zoukankan      html  css  js  c++  java
  • Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()

      四元数百度百科:  传送门

      四元数官方文档:  传送门

      欧拉旋转、四元数、矩阵旋转之间的差异:  传送门

      四元数转换为欧拉角eulerAngles  官方文档:  传送门

      欧拉角转换为四元数Euler  官方文档:  传送门

      

      Quaternion.LookRotation  官方文档:传送门

      LookRotation()根据对局部坐标轴的描述, 构造对应的代表旋转程度的四元数

    一、Transform中四元数和欧拉角

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Quaternion : MonoBehaviour {
    
        public Transform cube;
    
        // Use this for initialization
        void Start () {
        }
        
        // Update is called once per frame
        void Update () {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                //获得游戏物体欧拉角
                print(cube.eulerAngles);
                //获得游戏物体四元数
                print(cube.rotation);
            }
        }
    }
    Quaternion.cs

      欧拉角:方便开发者在控制面板上观察游戏物体旋转的角度,但旋转轴固定

      四元数:旋转轴可以是任意向量  传送门

        //获得游戏物体欧拉角
        print(cube.eulerAngles);
        //获得游戏物体四元数
        print(cube.rotation);

     二、Quaternion.LookRotation  

      场景中创建一个Capsule作为玩家,Sphere作为敌人,给Capsule绑定Quaternion_Gary.cs脚本,要使玩家一致朝向敌人可以用LookRotation()来实现

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Quaternion_Gary : MonoBehaviour {
    
        
    
        public Transform player;
        public Transform enemy;
    
        // Use this for initialization
        void Start () {
    
        }
        
        // Update is called once per frame
        void Update () {
            //让player前方向和dir方向保持一致
            Vector3 dir = player.position - enemy.position;
            player.rotation = Quaternion.LookRotation(dir);
        }
    }
    Quaternion_Gary
        void Update () {
            //让player前方向和dir方向保持一致
            Vector3 dir = player.position - enemy.position;
            player.rotation = Quaternion.LookRotation(dir);
        }

      有时以一帧的速度去让玩家转头容易造成不好的体验

      延缓转头速度缓慢,让动画看起来更平滑

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Quaternion_Gary : MonoBehaviour {
    
        
    
        public Transform player;
        public Transform enemy;
    
        // Use this for initialization
        void Start () {
    
        }
        
        // Update is called once per frame
        void Update () {
            //让player前方向和dir方向保持一致
            Vector3 dir = player.position - enemy.position;
            Quaternion target =  Quaternion.LookRotation(dir);
            player.rotation = Quaternion.Slerp(player.rotation,target,Time.deltaTime);
        }
    }
    Quaternion_Gary.cs
    void Update () {
            //让player前方向和dir方向保持一致
            Vector3 dir = player.position - enemy.position;
            Quaternion target =  Quaternion.LookRotation(dir);
            player.rotation = Quaternion.Slerp(player.rotation,target,Time.deltaTime);
        }
    (如需转载学习,请标明出处)
  • 相关阅读:
    linux命令总结
    在阿里云centos7.6上部署vue.js2.6前端应用
    MongoDb语法
    Echarts 地图绘制
    在阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4
    django--- 支付宝退款
    响应式网站设计(Responsive Web design)
    django -- 推荐商品算法
    django -- 美多订单分表
    小程序基本配置
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/9941272.html
Copyright © 2011-2022 走看看