unity 3d 中的quaternion.Slerp的作用以及用法
阿新 • • 發佈:2019-02-18
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="csharp">using UnityEngine; using System.Collections; public class enemyAI : MonoBehaviour { public Transform target; public int moveSpeed; public int rotationSpeed; private Transform myTransform; void Awake() { myTransform = transform; } // Use this for initialization void Start () { GameObject go = GameObject.FindGameObjectWithTag ("Player"); target = go.transform; } // Update is called once per frame void Update () { Debug.DrawLine (target.transform.position, myTransform.position, Color.yellow); // look at target myTransform.rotation = Quaternion.Slerp (myTransform.rotation,Quaternion.LookRotation(target.position-myTransform.position), rotationSpeed*Time.deltaTime); // move to target myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime; } }
<span style="font-family: Arial, Helvetica, sans-serif;">忽略掉什麼叫做四元數平滑插值這種複雜的概念,這個方法的意思其實就是:讓初始點面朝目標點。第三個引數的意思是讓初始點轉多少度才能面朝目標點。引數意思是從from 的rotation慢慢旋轉增值到to.rotation.以多少的角度旋轉,把其中的值插到這個中間過程中,就是這個方法所要表達的意思。</span>
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
官方文件上這麼寫的:
static function Slerp (from : Quaternion, to : Quaternion, t : float) : Quaternion Description描述 Spherically interpolates from towards to by t. 球形插值,通過t值from向to之間插值。 C#JavaScript // Interpolates rotation between the rotations // of from and to. // (Choose from and to not to be the same as // the object you attach this script to) //在from和to之間插值旋轉. //(from和to不能與附加指令碼的物體相同) var from : Transform; var to : Transform; var speed = 0.1; function Update () { transform.rotation = Quaternion.Slerp (from.rotation, to.rotation, Time.time * speed); }