繆明會 曹德飛 肖明慧 陸映峰
【摘要】隨著虛擬現(xiàn)實技術的飛速發(fā)展,各種3D引擎用于虛擬漫游系統(tǒng)的開發(fā)。本文針對利用unity3D引擎實現(xiàn)虛擬漫游的方法進行了探討和研究,闡述了利用C#語言進行虛擬漫游的腳本實現(xiàn)。
【關鍵詞】Unity3D;漫游系統(tǒng);虛擬現(xiàn)實
1 虛擬漫游介紹
1.1現(xiàn)狀分析
虛擬漫游,是虛擬現(xiàn)實(VR)技術的重要分支,在房地產(chǎn)、旅游、游戲、航空航天、醫(yī)學等多種行業(yè)發(fā)展很快。
1.2國內(nèi)外發(fā)展趨勢
國外:美國是虛擬現(xiàn)實技術的發(fā)源地,現(xiàn)如今已經(jīng)建立了空間站、航空、衛(wèi)星維護的虛擬訓練系統(tǒng);在歐洲,英國在輔助設備設計、分布并行處理和應用研究方面是領先的,在硬件和軟件的領域處于領先地位。
國內(nèi):我國對于虛擬現(xiàn)實技術的研究和國外一些發(fā)達國家還存在相當大的一段距離,但隨著計算機技術的發(fā)展速度越來越快,我國各界人士對于虛擬現(xiàn)實技術也越來越重視,正在積極進行虛擬環(huán)境的建立以及虛擬場景模型分布式系統(tǒng)的開發(fā)等等。
2 虛擬漫游技術實現(xiàn)
在虛擬漫游腳本設計中,主要涉及到三個功能,分別是自動漫游、手動漫游和攝像機鏡頭縮放功能。
2.1自動漫游
自動漫游其實就是在場景中設置幾個遍歷點,類似于設置一條固定路線,然后讓攝像機去逐個遍歷點,采用的API是Vector3.MoveTowards,具體設計流程圖如圖1所示:
其中,腳本設計中的代碼實現(xiàn)情況如下所示:
(1)數(shù)組:此處設計一個列表存放遍歷點,控制相機逐個遍歷各個點并移動到當前遍歷點的位置(注:定義移動速度是為了方便用戶可以根據(jù)自己的需求來調(diào)整攝像機自動漫游的速度):
public List point=new List();//定義遍歷數(shù)組并實例化
publicGameObject roamCamera;//定義相機
public floatmoveSpeed;//定義移動速度
int i=0;//定義遍歷點變量
(2)按鍵改變漫游速度,此處可以設置一個范圍,如我在這里設置的是最小速度為0.5,最大速度為6,通過捕捉用戶鍵盤操作“+”、“-”,按動一次速度+-0.5,執(zhí)行流程圖如圖2所示:
(3)遍歷目標點(通過遍歷列表中的點,依次移動到目標點):
if(roamCamera.transform.position==point[i].position){
i++;
if(i==point.Count){
i=0;
roamCamera.transform.position=point[0].position;
}}
roamCamera.transform.position=Vector3.MoveTowards(roamCamera.transform.position,point[i].position,moveSpeed*Time.deltaTime);
(4)控制攝像機的視野范圍(通過按住鼠標左鍵使得攝像機漫游時根據(jù)用戶需求旋轉(zhuǎn)到自定義的視野中)
if(Input.GetMouseButton(0)){
floatmouseX=Input.GetAxis(“Mouse X”)*1f;
roamCamera.transform.localRotation=roamCamera.transform.localRotation*Quaternion.Euler(0,mouseX,0);
}
2.2手動漫游
用戶自定義根據(jù)鍵盤WSAD鍵控制攝像機的移動。首先定義角色控制器及相機速度初始量,要設置一個角色控制器組件,其次定義移動速度并初始化,最后設置一個相機的組件讓相機圍繞角色運動。(注:角色可以設置為一個cub,然后將材質(zhì)剔除,這樣也就變?yōu)榱说谝蝗朔Q視角)
privateCharacterController player;
publicint speed=3;
publicGameObject camera;
獲取角色控制器組件:
player=this.GetComponent();
通過WASD鍵控制移動:
player.SimpleMove(transform.forward*Input.GetAxis(“Vertical”)*speed);
transform.Rotate(0,Input.GetAxis(“Horizontal”),0);//控制攝像機旋轉(zhuǎn)
//Vertical為水平軸 即表示AD鍵/左右鍵等
2.3攝像機鏡頭縮放
首先控制攝像機鏡頭縮放需要設置一個縮放速度,可以這樣定義:
public floatScaleSpeed=10.0f;
另外,需要在每一幀的運行中,也就是update方法中實時獲取到是否輸入了滑輪的操作.(注:這里主要的實現(xiàn)思想是通過滑輪控制攝像機的位置移動,也就控制了視野范圍的大?。?/p>
if(Input.GetAxis(“Mouse ScrollWheel”)<0)
{
Camera.main.transform.Translate(0,0,-1*ScaleSpeed);
}
if(Input.GetAxis(“Mouse ScrollWheel”)>0)
{
Camera.main.transform.Translate(0,0,1*ScaleSpeed);
}
3 結(jié)論
本研究很好地展示虛擬漫游的實現(xiàn)方法,可以根據(jù)自己設置的路線實現(xiàn)攝像機自動漫游功能,也可以通過鍵盤自定義控制攝像機移動來漫游整個場景。另外,當今已經(jīng)更新到5G時代,可以結(jié)合5G、VR、AR等技術進一步推廣,使得虛擬漫游功能更加豐富,給游客提供更加逼真的效果體驗。
參考文獻:
[1]祝敏嬌.基于Unity3D的虛擬漫游技術的研究[J].硅谷,2012.
[2]干建松.基于Unity 3D的室內(nèi)漫游的關鍵技術研究[J].鹽城工學院學報,2011.
[3]王愛軍,李中永,顏世波.基于Unity 3D的博物館虛擬漫游系統(tǒng)設計[J].湖南工程學院學報,2019.