LeapMotion拉动物体旋转

在VR中经常需要实现这样的功能:展示一个物体,当玩家碰触到这个物体时,可以用手来拨动这个物体,把物体前后左右上下都看一下,在程序上就是获取手的位置变化来控制物体的旋转,具体的思路呢就是求出手与物体中心两点之间的向量,然后求出上一帧与下一帧这两个向量的夹角,这样就能得出我们的手相对于物体移动的角度,再让物体转动相应的角度即可。物体的转动一定是要以camera 的轴向旋转的。

    public Camera cam;
    private Collider colObj;
    private Vector3 lastPos;
    private bool grab;
    public bool relase;
    private Transform hand;
    void Awake()
    {
        colObj = GetComponent<Collider>();
    }

    void OnTriggerEnter(Collider col)
    {
        lastPos = col.transform.position;//记录手触碰到物体时的位置
        hand = col.transform;
        grab = true;
        relase = false;
    }

    void OnTriggerExit(Collider e)
    {
        grab = false;
        relase = true;
    }
    void Update()
    {
        if (!grab)
            return;
        //求当前手与物体中心的向量
        Vector3 newVec = Vector3.Normalize((hand.transform.position - transform.position));
        //求上一帧手与物体中心的向量
        Vector3 lastVec = Vector3.Normalize((lastPos - transform.position));
        //计算两个向量之间的夹角
        Quaternion drot = Quaternion.FromToRotation(lastVec, newVec);
        //把quaternion转换成欧拉角
        Vector3 euler = drot.eulerAngles;
        Vector3 camfor = cam.transform.forward;
        Vector3 fwd = Vector3.Cross(camfor, Vector3.up);
        //物体在camera对应的轴向上旋转
        transform.Rotate(cam.transform.up,euler.y,Space.World);
        transform.Rotate(fwd,-euler.x,Space.World);
        //旋转之后再次记录手的位置
        lastPos = hand.transform.position;
    }

好啦,基本的实现就是这些,可以根据实际情况再加一些有趣的功能哦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 111. [动画系统]如何将其他类型的动画转换成关键帧动画? 动画->点缓存->关键帧 112. [动画]Unit...
    胤醚貔貅阅读 14,539评论 3 89
  • 更新:【面试题含答案】http://bbs.9ria.com/thread-288394-1-1.html 高频问...
    好怕怕阅读 10,399评论 3 52
  • Unity技术面试题 一:什么是协同程序? 答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话...
    沐冉阅读 7,972评论 1 19
  • 新的一年即将到来,重新审视自己工作的方式,开展了几点新的思路。 1 考虑一两项合适的业务加入 纵观当下琴行市场,琴...
    乐学艺术中心阅读 3,077评论 1 8
  • js中的数据类型: 基本数据类型:简单结构组成Numberstringbooleannullundefined 引...
    放逐的帝王阅读 1,729评论 0 0

友情链接更多精彩内容