pico neo2 通过unity制作简单的手柄控制游戏
一、unity环境搭建
1、打开unity,新建工程,在File中选择Build Settings,如下图所示
在Build Settings中选择Android,然后点击Switch Platform。再进行项目设置,点击Player Settings,在Other Settings中进行如下设置
修改包名(Package Name),将Minimum API Level和Target API Level修改成与Android studio 中的版本一致,pico neo2 应选择API在24以上。 在Edit中选择Preference,修改Android SDK和JDK,这里应与Android studio 中一致。
2、按照pico官网进行相应的配置
这一步也可以在导入SDK包弹出的Setting中选择Applied。
3、导入Pico的SDK包
SDK包导入成功后,将Pvr_unity SDK 中的Prefabs拖拽到Hierarchy中,然后删除原有的Main Camera;选择Pvr_Controller的Prefabs,将ControllerManger拖拽到Hierarchy的Pvr_unity SDK 中,这里面包含了手柄控制,若需要头盔控制,可以在demo中复制一个HeadControl到Pvr_unity SDK 中。
4、开始“玩”
在Asset Stroe中Import一个Standard Assets,在Scene中导入一个小人,并构建一个地面,很简单的一个画面完成,开始写相应的我控制程序。
首先,将Pvr_Controller Demo(SDK自带的脚本)挂载到ControllerManger中,用来获取控制信息。然后再开始写自己的通过手柄的trigger键来控制小人运动,控制要求:通过手柄的trigger键点击所构建的地面上的任意一个位置,小人就会跑到那个位置。程序如下:
using UnityEngine;
using Pvr_UnitySDKAPI;
public class move : MonoBehaviour
{
public static Pvr_KeyCode TOUCHPAD = Pvr_KeyCode.TOUCHPAD;
public static Pvr_KeyCode TRIGGER = Pvr_KeyCode.TRIGGER;
public GameObject currentController;
private Ray ray;
private Vector3 currentHitPoint = Vector3.zero;
public GameObject PointGo;
public GameObject CurrentController
{
get
{
if (currentController == null)
currentController = FindObjectOfType<Pvr_ControllerDemo>().currentController;
return currentController;
}
}
// Start is called before the first frame update
void Start()
{
ray = new Ray();
}
// Update is called once per frame
void Update()
{
if (CurrentController != null && GetTeleportKey())
{
MoveTo();
}
}
public void MoveTo()
{
ray.direction = CurrentController.transform.Find("dot").position - CurrentController.transform.Find("start").position;
//Debug.Log("方向" + ray.direction);
ray.origin = CurrentController.transform.Find("start").position;
//Debug.Log("位置" + ray.origin);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
currentHitPoint = hit.point;
if (HitFloor(ref hit) && hit.point != null)
{
PointGo.transform.position = hit.point;
PointGo.SetActive(true);
}
}
else { PointGo.SetActive(false); }
}
private static bool GetTeleportKey()
{
return Controller.UPvr_GetKey(0, TOUCHPAD) ||
Controller.UPvr_GetKey(1, TOUCHPAD) ||
Controller.UPvr_GetKey(0, TRIGGER) ||
Controller.UPvr_GetKey(1, TRIGGER) ||
Input.GetMouseButton(0);
}
private bool HitFloor(ref RaycastHit hit) //点击
{
return 1 << hit.transform.gameObject.layer == LayerMask.GetMask("TransparentFX");
}
}
我所做的小人没有跑的动作,若想让小人拥有跑的动作可以设置它的Animator。
5、导出到VR中
可以通过USB线,也可以通过无线传送的方式,我选择的时USB。
Neo2中的设置:打开设置->更多->系统->联系点击"PUI"版本条目7-9次->返回系统页,可以看到开发者选项,然后在开发者选项列表中开启USB调试功能。
在Build Setting 中将要导入的场景拖拽到Scense In Build中,也可以点击Add Open Scenes进行选择。在Run Device中选择自己的设备,勾选Development Profiler和Script Debugging这样就可以在console中debug出相应的信息。
然后Build And Run 就可以了。