針對CardBoard一類的眼鏡用Unity3D開發(fā)VR內(nèi)容福扬。
1腕铸、創(chuàng)建VRCamera:
使用Dive插件,從DiveUnityDemo提取攝像機(jī)和有關(guān)的腳本并export出來铛碑。
2狠裹、對象選擇:
視選模式:從眼睛發(fā)射一條射線,選擇看到的對象汽烦。
手柄模式:藍(lán)牙手柄上的按鍵來選擇對象涛菠。
3、視選模式的實(shí)現(xiàn):
視選:使用Raycast檢測,RaycastHit返回碰撞到的物體信息俗冻。
private RaycastHit rayHitInfo;
public Transform goPoint;//為射線發(fā)出點(diǎn)礁叔,是兩個(gè)攝像機(jī)中間的一個(gè)點(diǎn)。
if (Physics.Raycast(goPoint.position, goPoint.forward, out rayHitInfo))
{
Debug.Log("RaySelect: " + rayHitInfo.collider.gameObject.name);
}
焦點(diǎn):新建一個(gè)Plane言疗,和Point放在同一個(gè)局部坐標(biāo)系下晴圾,然后調(diào)整transform,使其放到視野中間噪奄,去選Mesh collider死姚。
給焦點(diǎn)開發(fā)動(dòng)畫效果:Texture循環(huán)播放。
給視選設(shè)置一個(gè)停留時(shí)間:不是說看到某個(gè)物體就觸發(fā)勤篮,而是盯著某個(gè)物體一定時(shí)間才觸發(fā)都毒。
4、手柄模式的實(shí)現(xiàn):
檢測手柄是否存在:
if ((Input.GetJoystickNames().Length > 0) && (!Input.GetJoystickNames()[0].Equals("")))
{
//手柄存在
}
void Start ()
{
InvokeRepeating("detect", 0, 5);//每隔5s調(diào)用一次detect函數(shù)碰缔,做檢測手柄動(dòng)作账劲。
}
檢測手柄按鍵:
if (Input.GetKeyDown(KeyCode.Joystick1Button0))
{
//手柄鍵1
}
else if (Input.GetKeyDown(KeyCode.Joystick1Button1))
{
//手柄鍵2
}
//以此類推
設(shè)置并檢測手柄搖桿:
設(shè)置搖桿通過在input里面增加axis的手柄,4個(gè)方向金抡,要新增設(shè)置四個(gè)瀑焦。
檢測搖桿:
if (Input.GetAxis("AxisName"))
{
//搖桿的一個(gè)方向
}