Unity_物体旋转方法归纳

0、旋转的三种方式
    1、矩阵旋转
    2、欧拉旋转   会造成万向节锁问题
    3、四元数旋转   可避免万向节锁现象
1、方法1 Transform.rotation / Transform.localRotation 旋转角度
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
             print("物体的原始旋转信息:" + transform.eulerAngles);
             transform.rotation = Quaternion.Euler(30, 30, 30);
             //transform.localRotation= Quaternion.Euler(30, 30, 30);
             print("物体的当前旋转信息:" + transform.eulerAngles);
        }
    }
2、方法2 Transform.Rotate 旋转
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
             print("物体的原始旋转信息:" + transform.eulerAngles);
             transform.Rotate(new Vector3(45, 45, 45), Space.Self);
             print("物体的当前旋转信息:" + transform.eulerAngles);
        }
    }
3、方法3 Transform.RotateAround 围绕旋转
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
             print("物体的原始旋转信息:" + transform.eulerAngles);
             //若Point.position = Vector3.zero时为自转
             transform.RotateAround(Point.position, Vector3.forward, 45);
        }
    }
4、方法4 Quaternion.identity 恒等式旋转(就是无旋转)
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
             print("物体的原始旋转信息:" + transform.eulerAngles);
             transform.rotation = Quaternion.identity;
             print("物体的当前旋转信息:" + transform.eulerAngles);
        }
    }
5、方法5 Quaternion.AngleAxis 角轴
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
             print("物体的原始旋转信息:" + transform.eulerAngles);
             transform.rotation = Quaternion.AngleAxis(45, Vector3.up);
             print("物体的当前旋转信息:" + transform.eulerAngles);
        }
    }
6、方法6 Quaternion.ToAngleAxis 转化为角轴
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
             print("物体的原始旋转信息:" + transform.eulerAngles);
             //应用:将transform_a的角轴应用到transform_b上
             float angle;
             Vector3 axis;
             transform_a.rotation.ToAngleAxis(out angle, out axis);
             transform_b.rotation = Quaternion.AngleAxis(angle, axis);
        }
    }
7、方法7 Transform.LookAt 注视
    void Update()
    {
        //旋转物体指向目标物体   默认时Y轴
        transform.LookAt(transform_a);   
    }
8、方法8 Quaternion.LookRotation 注视旋转
    void Update()
    {
        //可以和Transform.LookAt达到相同的效果   大多数情况下优先使用Transform.LookAt
        Vector3 lookDir = transform_a.position - transform.position;
        transform.rotation = Quaternion.LookRotation(lookDir);
    }
9、方法9 Quaternion.FromToRotation 从from到to旋转
    void Update()
    {
        Vector3 from = Vector3.one;
        Vector3 to = Vector3.right;
        transform.rotation = Quaternion.FromToRotation(from, to);
    }
10、方法10 Quaternion.Lerp 球形插值(参数3不能为负)
    void Update()
    {
        transform.rotation = Quaternion.Lerp(transform.rotation, transform_a.rotation, Time.time * 0.1f);
    }
11、方法11 Quaternion.Slerp 球形插值(参数3不能为负)
    void Update()
    {
        transform.rotation = Quaternion.Slerp(transform.rotation, transform_a.rotation,Time.time * 0.1f);
    }
12、方法12 Quaternion.RotateTowards 转向(参数3为负将反转)
    void Update()
    {
        transform.rotation = Quaternion.RotateTowards(transform.rotation, transform_a.rotation, -Time.time * 0.1f);
    }
13、方法13 Quaternion.Inverse 求反
    void Update()
    {
        //返回反向的旋转
        transform.rotation = Quaternion.Inverse(transform_a.rotation);
    }
14、应用
    void Update()
    {
        //**********旋转动画**********

        //物体沿X轴旋转
        //transform.rotation *= Quaternion.Euler(5, 0, 0);

        //物体沿X轴旋转
        //transform.Rotate(new Vector3(45, 0, 0) * Time.deltaTime * 10, Space.Self);

        //物体绕Point沿Z轴每帧旋转1度   推荐
        //transform.RotateAround(Point.position, Vector3.forward, 1);

        //物体绕Y轴每帧旋转5度   推荐
        //transform.rotation *= Quaternion.AngleAxis(5, Vector3.up);

        //物体transform_b跟随transform_a同步旋转
        //float angle;
        //Vector3 axis;
        //transform_a.rotation.ToAngleAxis(out angle, out axis);
        //transform_a.rotation *= Quaternion.AngleAxis(5, Vector3.up);
        //transform_b.rotation = Quaternion.AngleAxis(angle, axis);
    }
  • 23
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值