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);
        }
    (如需转载学习,请标明出处)
  • 相关阅读:
    四天玩转 Windows Phone 开发教学视频
    DZNT REST API doc
    【译著】Code First :使用Entity. Framework编程(1)
    如何关闭ReSharper中的[ Use 'var' ]提示How to Disable C# “var” Recommendation in ReSharper
    查看域名txt记录
    VS文本编辑器vssettings下载站
    .net 开发windows服务
    .net 简单图表控件 (之总结篇 源代码及测试示例) [c/s桌面应用程序控件] IV
    c# 算节气
    js 自定义title提示框
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/9941272.html
Copyright © 2011-2022 走看看