Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(196评价)
价格: 4039.00元
关于DoTween插件旋转的问题
制杖萌新发起了问答2017-04-05
11
回复
12082
浏览

物体要旋转到一个目标点如果一个轴的超过360度会旋转一圈,但是两个物体在场景中表现的样子是几乎重合的。

想知道怎么才能不不会转圈的旋转到和目标物体一样,能旋转的自然一点。

所有回复
  • siki 2017-04-05

    如果一个轴的超过360度会旋转一圈 是什么意思

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-04-05

    可以的话 远程协助看一下

    • 制杖萌新 2017-04-06

      公司的项目不太方便远程。。。
      具体是这样的,物体A的rotation是(360,0,0) 目标的rotation是(1,0,0)
      在3D场景中看到的样子几乎是一模一样的,如果用DoTween做旋转的话,就会旋转一圈。
      现在就是想避免这个情况发生,因为模型的rotation经常和目标的rotation相差好多,甚至会有负数的情况。

      (0) 回复
    还有-4条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-04-06

    你可以把rotation都除以360的余数(360,0,0)    就是(0,0,0) 利用这个旋转 就是(0,0,0)到(1,0,0)

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 制杖萌新 2017-04-07
        public Transform Cube1;
        public Transform Cube2;
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.Space))
                Cube1.DORotateQuaternion(GetRotation(Cube2.rotation), 1);
        }
    
        private Quaternion GetRotation(Quaternion rotation)
        {
            float x = rotation.x / (rotation.x % 360);
            float y = rotation.y / (rotation.y % 360);
            float z = rotation.z / (rotation.z % 360);
    
            Debug.Log("x:" + x + " | y:" + y + " | z:" + z);
    
            return Quaternion.Euler(x, y, z);
        }

    @siki是这样写的吗? 返回的结果一直都是(1,1,1)啊。

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-04-07
        float x = rotation.x / (rotation.x % 360);
            float y = rotation.y / (rotation.y % 360);
            float z = rotation.z / (rotation.z % 360);

     这个是啥玩意,你想获取旋转直接transform.rotation

    旋转动画的调用是使用下面的方法,to是目标旋转(目标旋转不是四元数),duration是时间间隔,最后一个是旋转模式

    DORotate(Vector3 to, float duration, RotateMode mode)

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 制杖萌新 2017-04-08

    但是算出来的结果还是不对啊。 

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-04-09

    你的那个计算,下面的计算没有任何意义, 不管rotation。x是什么值,都会返回1, 所以我看不懂你写这段没有意义的代码的作用

       float x = rotation.x / (rotation.x % 360);
            float y = rotation.y / (rotation.y % 360);
            float z = rotation.z / (rotation.z % 360);
    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-04-09

    今天晚上9-10点可以找我远程看一下 qq

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 发光时代 2019-03-18

    老师,我也遇到了大问题,急急急

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 图书馆大盗.普罗米 2021-04-12

    目前这个问题也困扰我了,就是本身已经是这个角度了,但是再发送旋转的时候,还是会再旋转一圈到目前的角度,很烦。不像domove似的,如果最终位置相同就不会移动。

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!