周鵬程
摘要:三維虛擬數(shù)字校園系統(tǒng)采用了Unity引擎作為開發(fā)工具,Unity主要用于開發(fā)豐富的2D、3D、VR及AR的交互式內容,主要使用C#作為開發(fā)語言,在系統(tǒng)設計過程中主要用到了VR眼鏡的準心交互,其涉及的關鍵技術是射線碰撞原理。
關鍵詞:Unity3D;虛擬數(shù)字校園系統(tǒng);準心交互;射線碰撞
中圖分類號:G423.07 文獻標識碼:A 文章編號:1009-3044(2018)07-0183-02
Abstract:The 3D virtual digital campus system uses the Unity3D engine as a development platform, Unity3D is mainly used for the development of interactive content in 2D or 3D, VR and AR. The development mainly use C# as a development language, in the process of system design mainly uses VR glasses quasi heart interaction, the key technology is ray collision principle.
Key words:virtual campus system;Unity3D development;Vrinteractive;crosshairinteraction;ray collision
1 國內外相關研究動態(tài)
VR虛擬現(xiàn)實技術已成為當今較為追捧的科技,從阿里巴巴的Buy+,到Google的VR眼鏡,互聯(lián)網(wǎng)+正逐步細分出VR+、大數(shù)據(jù)+等等,作為當今開發(fā)VR技術的主流引擎Unity和UE4,Unity更受大眾的喜愛。Unity 科技公司提供的開發(fā)平臺,用于開發(fā)豐富的2D、3D、VR及AR交互式內容。Unity強大的圖形引擎和功能全面的編輯器能快速地實現(xiàn)用戶的創(chuàng)意,并將所需表達的內容部署到幾乎所有媒體與設備上。Unity可發(fā)布到PC平臺、主機、網(wǎng)頁、移動設備、家庭娛樂系統(tǒng)、嵌入式系統(tǒng)或頭戴顯示器等多種平臺。Unity提供的工具與資源包括:Unity Asset Store資源商店、Unity Cloud Build云構建、Unity Analytics分析、Unity Ads廣告、Unity Certification認證考試以及Unity Everyplay等。
三維虛擬數(shù)字校園系統(tǒng)的開發(fā)采用了Unity引擎,體驗者可以通過動態(tài)、交互的運用全方位地為用戶展示校園各種信息,通過3D影像動態(tài)交互,體驗者會產(chǎn)生身臨其境的感覺。
2 三維虛擬數(shù)字校園交互設計
在設計三維虛擬數(shù)字校園交互系統(tǒng)時,所需的載體是基于三星Galaxys 6的智能手機,該型號手機支持Gear VR眼鏡,將兩者相連后,手機會提示安裝Gear VR相關插件和對應應用程序,將三星手機的VR眼鏡證書與Unity關聯(lián)打包后,將生成的APK導入到手機,即可在Gear VR眼鏡上觀看。在手機開始界面會出現(xiàn)一個紅色圓點,這就是注視的準心,體驗者雙眼瞄準準心3秒,會出現(xiàn)一個旋轉的動態(tài)注視條,3秒后即可對注視的物體產(chǎn)生交互,如圖1所示。
VR眼鏡交互設計的關鍵技術在于準心射線的交互設計。首先在場景中創(chuàng)建一個空物體GameObject,再創(chuàng)建一臺主攝像機作為空物體下的子物體,將攝像機鏡頭Field of View視野設置為38。當用戶佩戴VR眼鏡后,進入三維虛擬數(shù)字校園界面,眼睛注視圓點準心,系統(tǒng)即認為是發(fā)射了一條射線,這條射線在運行時,每一幀都會去發(fā)射Ray,獲得用戶看向的物體的信息,射線的碰撞信息RayCastHit,向它發(fā)送了激活方法的信息(sendMessage)。當用戶漫游到校碑旁邊時,準心瞄準校碑,系統(tǒng)會播放學校發(fā)展沿革,如圖2所示。播放完后,會彈出箭頭示意用戶漫游到教學樓,如圖3所示。
準心交互的射線設計原理如下:
usingUnityEngine;
usingSystem.Collections;
usingUnityEngine.UI;
usingUnityEngine.VR;
public class VRviewToActive : MonoBehaviour {
public Ray myRay; //新建一個射線類的對象
public RaycastHit Hit; //新建一個射線碰撞信息類,用于存儲射線返回來的信息
public Camera myCamera; //我的相機
publicLayerMaskLayerMask; //層數(shù)據(jù)
public GameObjectNowObj;//現(xiàn)在注視的物體
public bool StartCountTime = false;//這個字段用來控制計時器的打開和關閉
public float NowTime = 0; //計時器開始的時間節(jié)點
public float NeedTime = 3;//需要停留3秒,也就是計時器需要計時3秒
publicGameObjectTagImage;
void Update() {
float value = NowTime / NeedTime;
TagImage.transform.GetComponent
see();//發(fā)射射線并控制計時器的方法
CountTime();//我們的計時器方法,同時它也是控制信息發(fā)送的地方}
發(fā)射射線并控制計時器的方法,設定為MyRay為發(fā)射射線,把這條射線碰撞到的信息輸出(out)給Hit,設定發(fā)射距離最大為1000m,使用layerMask中的遮罩剔除不需要檢測的層, 然后發(fā)射射線并檢測。
void see() {myRay = new Ray(myCamera.transform.position,myCamera.transform.forward);
//給射線填充一個新的射線(從我的相機位置開始,向相機的前方發(fā)射)
if (Physics.Raycast(myRay, out Hit, 1000, LayerMask))
{ if (Hit.collider.gameObject != null) //如果碰到了物體
{ NowObj = Hit.collider.gameObject; //把碰到的物體放入我們的目標中
StartCountTime = true; //打開計時器} }
else {//沒有碰到物體
NowObj = null; //清空當前目標
StartCountTime = false; //計時器關閉} }
如果計時器沒有開啟,計時歸零,跳出方法,不再往下執(zhí)行。如果目標里有物體,開始計時,NowTime是一開始為0的Float值, 每一幀自身加上系統(tǒng)這一幀運行花費的時間,假如一秒鐘運行了60幀,那么這個時間就是1/60秒,如果計時器累積時間超過規(guī)定的時間,表示計時完畢,可以執(zhí)行規(guī)定的事件。
voidCountTime()
{ if (StartCountTime == false)
{ NowTime = 0;//計時歸零
return; //跳出方法,不再往下執(zhí)行}
if (NowObj != null) //如果目標里有物體
{ NowTime = NowTime + Time.deltaTime; //開始計時
if (NowTime>= NeedTime) //計時完畢
{ StartCountTime = false; //停止計時
NowTime = 0; //計時器歸零
NowObj.SendMessage("StartActive", SendMessageOptions.DontRequireReceiver); } }
//發(fā)送信息給我們對象物體,嘗試激活目標方法
else { NowObj = null; //停止計時
NowTime = 0; //計時器歸零}}}
3 結束語
三維虛擬數(shù)字校園系統(tǒng)的設計涵蓋了粒子特效、三維模型、動畫、材質與貼圖、尋路技術、系統(tǒng)優(yōu)化等,是個跨專業(yè)較強的平臺,要設計出完整而交互界面友好美觀的數(shù)字校園交互系統(tǒng)還需要解決一系列問題,同時也能為各種數(shù)字園區(qū)的開發(fā)提供相關的VR技術。
參考文獻:
[1] 張敏.基于Unity 3D的游戲的設計與實現(xiàn)[J].計算機光盤軟件與應用,2014(18):269-270.
[2] 張敏.基于Unity 3D的三維地形建模[J].湖南工業(yè)職業(yè)技術學院學報,2014(6):16-18.
[3] 朱惠娟.基于Unity3D的虛擬漫游系統(tǒng)[J].計算機系統(tǒng)應用,2012(10):36-39+65.