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);
}
Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()的更多相关文章
- Unity3D 中 用quaternion 来对一个坐标点进行旋转的初步体会
在unity3d中,用四元数来表示旋转,四元数英文名叫quaternion . 比如 transform.rotation 就是一个四元数,其由四个部分组成 Quaternion = (xi + yj ...
- [Unity Quaternion]四元数Quaternion的计算方式
什么是Quaternion四元数 1843年,William Rowan Hamilton发明了四元数,但直到1985年才有一个叫Ken Shoemake的人将四元数引入计算机图形学处理领域.四元数在 ...
- 四元数和旋转(Quaternion & rotation)
四元数和旋转(Quaternion & rotation) 本篇文章主要讲述3D空间中的旋转和四元数之间的关系.其中会涉及到矩阵.向量运算,旋转矩阵,四元数,旋转的四元数表示,四元数表示的旋转 ...
- 关于ArcGIS API for JavaScript中basemap的总结介绍(一)
实际上basemap这个概念并不只在arcgis中才有,在Python中有一个matplotlib basemap toolkit(https://pypi.python.org/pypi/basem ...
- FormatMessage与GetLastError配合使用,排查windows api调用过程中的错误
前一段时间在学习windows api调用过程中,遇到过一些调用错误或者程序没能显示预期的结果,或者直接出现vc运行时错误. 这对新手来说是司空见惯的事,因为不太熟悉难免会出错,出错的信息如果能显示很 ...
- Asp.net mvc web api 在项目中的实际应用
Asp.net mvc web api 在项目中的实际应用 前言:以下只是记录本人在项目中的应用,而web api在数据传输方面有多种实现方式,具体可根据实际情况而定! 1:数据传输前的加密,以下用到 ...
- ArcGIS API for Silverlight中加载Google地形图(瓦片图)
原文:ArcGIS API for Silverlight中加载Google地形图(瓦片图) 在做水利.气象.土地等行业中,若能使用到Google的地形图那是再合适不过了,下面就介绍如何在ArcGIS ...
- 返璞归真 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 上传文件, ...
- Web Api 2.0中使用Swagger生成Api文档的2个小Tips
当Web Api 2.0使用OAuth2授权时,如何在Swagger中添加Authorization请求头? Swagger说明文档支持手动调用Api, 但是当Api使用OAuth2授权时,由于没有地 ...
随机推荐
- uniapp配置scss支持
在开发 uniapp 的时候发现默认 style 是不支持 scss 模式开发样式,这样的话使用 --status-bar-height 就没有办法变成想要的数值了,这时候就需要开启 scss 支持. ...
- JVM 线上故障排查基本操作 (转)
前言 对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的.各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题.楼主同样也遇到过这些问题,那么,遇到这些问题该如何 ...
- golang(5):struct & 链表 & 二叉树 & 接口
struct : 结构体 // 1. 用来自定义复杂数据结构 // 2. struct里面可以包含多个字段(属性) // 3. struct类型可以定义方法,注意和函数的区分 // 4. struct ...
- mysql中有条件的插入语句
今天在参加笔试的过程中,看到一道题,大概意思就是说,当满足了条件就执行插入语句,当时就蒙了,之前从来都没有考虑过满足条件才插入的情况,所以一直都是这样写的 insert into table_name ...
- Spark写入HBase(Bulk方式)
在使用Spark时经常需要把数据落入HBase中,如果使用普通的Java API,写入会速度很慢.还好Spark提供了Bulk写入方式的接口.那么Bulk写入与普通写入相比有什么优势呢? BulkLo ...
- 19、Firewalld防火墙
安全的考虑方向: 安全框架 OSI七层模型 硬件 机架上锁(机柜) 温度 硬件检查 网络 iptables/firewalld 仅允许公司的IP地址能连接服务器的22端口 公有云使用 安全组 系统 没 ...
- or/in/union与索引优化
假设订单业务表结构为: order(oid, date, uid, status, money, time, …) 其中: oid,订单ID,主键 date,下单日期,有普通索引,管理后台经常按照da ...
- linux 用户及文件权限管理
Linux 是一个可以实现多用户登陆的操作系统,比如“李雷”和“韩梅梅”都可以同时登陆同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件.但实际上他们的文件都是放在同 ...
- 架构师成长之路5.1-Saltstack安装及入门
点击架构师成长之路 架构师成长之路5.1-Saltstack安装及入门 (安装.配置.启动) 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需 ...
- html和css牛刀小试
html和css网上教程很多,这里我也给大家一个网址:https://www.cnblogs.com/majj/ 今天心血来潮就模仿着小米的官网写了部分代码,效果图如下:(本人故意加了个华为广告栏在最 ...