Unity按住左键旋转物体,按住右键移动物体,移动端单指旋转物体,双指移动物体

该博客介绍了一个Unity VR项目的实践,通过代码展示了如何实现用户按住鼠标左键旋转物体,按住右键移动物体的功能。同时,针对移动端,实现了单指旋转和双指移动物体的交互方式,为VR物品展示提供了一种交互解决方案。

 

要做一个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
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值