要做一个VR物品展示的项目,先写了个Demo练练手。
功能比较简单,直接上代码吧:
public class ModelController : MonoBehaviour {
public Transform obj;
public Camera objCamera;//模型摄像机
void Update () {
#if UNITY_IOS || UNITY_IPHONE || UNITY_ANDROID
//单指旋转物体
if (Input.touchCount == 1 && obj != null) {
obj.Rotate(Vector3.up, -Input.GetAxis("Mouse X") * 10, Space.World);
obj.Rotate(Vector3.right, Input.GetAxis("Mouse Y") * 10, Space.World);
}
//双指移动物体
else if (Input.touchCount > 1 && obj != null) {
Vector2 point;
Vector3 targetScreenSpace = Camera.main.WorldToScreenPoint(obj.position);
Touch t1 = Input.GetTouch(0);
Touch t2 = Input.GetTouch(1);
point = t2.position;//实时手指位置
if (t1.phase == TouchPhase.Moved && t2.phase == TouchPhase.Moved) {
obj.position = objCamera.ScreenToWorldPoint(new Vector3(point.x,point.y, targetScreenSpace.z));
}
}
#elif UNITY_EDITOR
//按住左键旋转物体
if (Input.GetMouseButton(0) && obj != null){
obj.Rotate(Vector3.up, -Input.GetAxis("Mouse X") * 10, Space.World);
obj.Rotate(Vector3.right, Input.GetAxis("Mouse Y") * 10, Space.World);
}
//按住右键拖动物体
else if (Input.GetMouseButton(1) && obj != null)
{
Vector3 targetScreenSpace = objCamera.WorldToScreenPoint(obj.position);//用于获取物体的z轴坐标(物体离相机距离不变)
Vector3 point = Input.mousePosition;
obj.position = objCamera.ScreenToWorldPoint(new Vector3(point.x, point.y, targetScreenSpace.z));
}
#endif
}
}
该博客介绍了一个Unity VR项目的实践,通过代码展示了如何实现用户按住鼠标左键旋转物体,按住右键移动物体的功能。同时,针对移动端,实现了单指旋转和双指移动物体的交互方式,为VR物品展示提供了一种交互解决方案。
1322

被折叠的 条评论
为什么被折叠?



