1. 程式人生 > >unity 3d 中的quaternion.Slerp的作用以及用法

unity 3d 中的quaternion.Slerp的作用以及用法

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