四元数百度百科:  传送门

  四元数官方文档:  传送门

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

  四元数转换为欧拉角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()的更多相关文章

  1. Unity3D 中 用quaternion 来对一个坐标点进行旋转的初步体会

    在unity3d中,用四元数来表示旋转,四元数英文名叫quaternion . 比如 transform.rotation 就是一个四元数,其由四个部分组成 Quaternion = (xi + yj ...

  2. [Unity Quaternion]四元数Quaternion的计算方式

    什么是Quaternion四元数 1843年,William Rowan Hamilton发明了四元数,但直到1985年才有一个叫Ken Shoemake的人将四元数引入计算机图形学处理领域.四元数在 ...

  3. 四元数和旋转(Quaternion & rotation)

    四元数和旋转(Quaternion & rotation) 本篇文章主要讲述3D空间中的旋转和四元数之间的关系.其中会涉及到矩阵.向量运算,旋转矩阵,四元数,旋转的四元数表示,四元数表示的旋转 ...

  4. 关于ArcGIS API for JavaScript中basemap的总结介绍(一)

    实际上basemap这个概念并不只在arcgis中才有,在Python中有一个matplotlib basemap toolkit(https://pypi.python.org/pypi/basem ...

  5. FormatMessage与GetLastError配合使用,排查windows api调用过程中的错误

    前一段时间在学习windows api调用过程中,遇到过一些调用错误或者程序没能显示预期的结果,或者直接出现vc运行时错误. 这对新手来说是司空见惯的事,因为不太熟悉难免会出错,出错的信息如果能显示很 ...

  6. Asp.net mvc web api 在项目中的实际应用

    Asp.net mvc web api 在项目中的实际应用 前言:以下只是记录本人在项目中的应用,而web api在数据传输方面有多种实现方式,具体可根据实际情况而定! 1:数据传输前的加密,以下用到 ...

  7. ArcGIS API for Silverlight中加载Google地形图(瓦片图)

    原文:ArcGIS API for Silverlight中加载Google地形图(瓦片图) 在做水利.气象.土地等行业中,若能使用到Google的地形图那是再合适不过了,下面就介绍如何在ArcGIS ...

  8. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

  9. Web Api 2.0中使用Swagger生成Api文档的2个小Tips

    当Web Api 2.0使用OAuth2授权时,如何在Swagger中添加Authorization请求头? Swagger说明文档支持手动调用Api, 但是当Api使用OAuth2授权时,由于没有地 ...

随机推荐

  1. 区间前k小的和(权值线段树+离散化)--2019牛客多校第7场C--砍树

    题目链接:https://ac.nowcoder.com/acm/contest/887/C?&headNav=acm 题意: 给你 n 种树,有 高度,花费和数量 ,现在问你最少需要花多少钱 ...

  2. 2019中山纪念中学夏令营-Day4[JZOJ]

    Begin (题目的排序方式:难易程度) 什么是对拍: 对拍是一种在写完程序后,验证自己程序是不是正解的比较方便的方法. 实现过程: 对同一道题,再打一个暴力程序,然后用一些大数据等跑暴力程序来进行验 ...

  3. java各种jar的下载地址和源码下载地址

    1.jboss http://jbossmarshalling.jboss.org/downloads2.netty https://netty.io/downloads.html3.spring h ...

  4. Java线程和进程

    一.线程 1.什么是线程: 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.一个进程至少包含一个线程,也可以多个,线程属于进程. 2.Java中线程经历的四个 ...

  5. 命名空间System.IO

    基本介绍:System.IO 命名空间提供读写文件和数据流的类型.基本文件和目录支持的类型. 原文:http://blog.sina.com.cn/s/blog_48a45b950100erhz.ht ...

  6. 第一章 T-SQL查询和编程基础 T-SQL语言基础(1)

    T-SQL查询和编程基础(1) 1.1 理论背景 SQL是为查询和管理关系型数据库管理系统(RDBMS)中的数据而专门设计的一种标准语言. RDBMS是一种基于关系模型的数据库管理系统,关系模型则是一 ...

  7. O008、LVM类型的Storage Pool

    参考https://www.cnblogs.com/CloudMan6/p/5277927.html   LVM类型的Storage Pool   不仅一个文件可以分配给客户机作为虚拟磁盘,宿主机上  ...

  8. centos配置postfix邮件服务

    1.环境初始化 [root@mail ~]# rpm -q centos-release //查看系统版本 centos-release-7-5.1804.el7.centos.x86_64 [roo ...

  9. webpack 四个核心概念

    webpack 是当下最热门的前端资源模块化和打包工具.它可以将许多松散的模块(如 CommonJs 模块. AMD 模块. ES6 模块.CSS.图片. JSON.Coffeescript. LES ...

  10. 键盘事件 Ctrl+p 模拟(vue)

    方法定义 // 打印页面 printpage(myDiv) { // myDiv 为打印对象的id名 var newstr = document.getElementById(myDiv).inner ...