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);
    }

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

时间: 2024-11-08 09:25:06

Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()的相关文章

unity3d中的Quaternion.LookRotation

android开发范例中的第二个粒子,是摇杆操作游戏,模式类似于“迷你高尔”,僵尸包围类型的设计游戏. 其中让我注意到这个函数的使用非常特别:Quaternion.LookRotation. 游戏针对两个平台做了输入配置. 在pc平台上控制人物移动用正常的上下左右按键控制,然而人物的旋转就变成了鼠标位置. 正常情况我们希望东西能够根据指定目标方向移动其实用lookat这个函数就可以了.但这个地方用的方法原比lookat来的更加省事儿. 看看他是怎么获得这个角度的: 1 2 3 4 5 6 7 8

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

什么是Quaternion四元数 1843年,William Rowan Hamilton发明了四元数,但直到1985年才有一个叫Ken Shoemake的人将四元数引入计算机图形学处理领域.四元数在3D图形学中主要用于旋转,骨骼动画等. 简单地来说,四元数描述了一次旋转:绕任意一个轴(V)旋转一个弧度(θ). 那么四元数q就与(V,θ)两个参数有关. 具体公式: q = (sin(θ / 2) * V,cos(θ / 2) ) q = (sin(θ / 2) * x,sin(θ / 2) *

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

在unity3d中,用四元数来表示旋转,四元数英文名叫quaternion . 比如 transform.rotation 就是一个四元数,其由四个部分组成 Quaternion = (xi + yj + zk + w ) = (x,y,z,w) 1.  http://en.wikipedia.org/wiki/Quaternion  有四元数的定义     2.  http://en.wikipedia.org/wiki/Quaternions_%26_spatial_rotation   有

Unity API 解析(8)—— Quaternion 类

四元数 -- 由x,y,z 和 w 这4个分量组成,属于struct 类型 用来存储和表示对象的选择角度   eulerAngles 属性 -- 欧拉角 对GameObject 对象的Transform进行欧拉角的变换次序是,先绕z轴旋转相应的角度,再绕x轴旋转相应的角度,最后y轴 -- 不同的旋转次序得到的最终状态不同 using UnityEngine; using System.Collections; public class EulerAngle_ts : MonoBehaviour

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

原文:ArcGIS API for Silverlight中加载Google地形图(瓦片图) 在做水利.气象.土地等行业中,若能使用到Google的地形图那是再合适不过了,下面就介绍如何在ArcGIS API for Silverlight中加载Google地 形图.先上一个图,初步制作,待后续继续改进 ArcGIS API for Silverlight 中的ArcGISTiledMapServiceLayer图层,继承自TiledMapServiceLayer.如果想实现自己的缓存地图图 层

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

实际上basemap这个概念并不只在arcgis中才有,在Python中有一个matplotlib basemap toolkit(https://pypi.python.org/pypi/basemap),是用来实现地理信息可视化的.其中,matplotlib是Python常用的数据绘制包,basemap是matplotlib的一个子包,用来进行地图绘制.本文所指的basemap是指esri提供的基础底图图层. 正式使用basemap是在前一阵做webgis开发的时候,需要在自己的矢量图层下面

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

Asp.net mvc web api 在项目中的实际应用 前言:以下只是记录本人在项目中的应用,而web api在数据传输方面有多种实现方式,具体可根据实际情况而定! 1:数据传输前的加密,以下用到 微软自带的 Rijndael 类(关于Rijndael 的更多信息请参见MSDN),32位密钥加16对称算法初始化向量,代码如下: //简单定义一个实体类: public class User { public int Id { get; set; } public string Name { g

如何用web api在网页中嵌入二维码?

如何用web api在网页中嵌入二维码? 随着智能手机和平板电脑的日益普及,二维码逐渐成了链接智能终端和传统网站的桥梁.在下文中,笔者将介绍几个实时生成二维码的web api,希望能够简化web design过程中的二维码集成工作. 1. 范例一 <img src="http://qrickit.com/api/qr?d=http://www.taobao.com" > 上述代码产生如下的二维码图片: 该web api还支持下面的这些特性, 说明文字:例如addtext=H

ArcGIS API for JavaScript中Symbol符号篇

ArcGIS API for JavaScript中Symbol简介: Symbol定义了arcgis中graphics图层内几何图形(geometry)的显示样式 ArcGIS API for JavaScript中Symbol分为四大类:继承关系如下图所示: 1.点符号(MarkerSymbol):点符号(point)的显示样式 2.线符号(LineSymbol):线符号(line)的显示样式 3.面符号(FillSymbol):面符号(polygon)的显示样式 4.文本符号(TextSy