码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()

时间:2018-11-11 15:03:26      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:ati   nsf   transform   NPU   cap   article   blog   inpu   nio   

 

 

  四元数百度百科:  传送门

  四元数官方文档:  传送门

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

  四元数转换为欧拉角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);
    }

 

Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()

标签:ati   nsf   transform   NPU   cap   article   blog   inpu   nio   

原文地址:https://www.cnblogs.com/1138720556Gary/p/9941272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!