対象物の方向を向く(3D)
他のオブジェクトを見つめたり、迫って行くときにその方向を向きたい場合があります
Unityでは、そのためのメソッドが用意されています。いくつかの方法があるのでみていきましょう
シーンの構成
LookAtSampleとしてプロジェクトを作成しましょう
ビデオから、プロジェクト名、シーンのゲームオブジェクト、コンポーネントを確認して、同じように構成しましょう
対象物を向くとは
対象物を向くとは、z軸がその方向を向くことを言います
LookAt
対象物のTransfromコンポーネントを引数に取ります。これをアタッチしているゲームオブジェクトは対象物のtransform.potisionの方向を向きます
オーバーロードとして引数にVector3型を取ることもできます
コード
using UnityEngine;
public class WatchLookAt : MonoBehaviour
{
[SerializeField]
Transform targetTran;
void Update()
{
transform.LookAt(targetTran);
}
}
実行結果
LookRotation
対象物の座標(transfrom.potision:Vector3型)を引数に取ります。これをアタッチしているゲームオブジェクトは対象物のtransform.potisionの方向を向きます
rotationに回転を代入しますが、クウォータニオン型(Quaternion)になります
インスペクターでの表示はVector3型になっていますが、内部ではクウォータニオン型で保持されています
回転は、回転順・向きによっては期待通りにならないことがあるため(ジンバルロック)、4元(x, y, z, w)を使って処理されます
コード
using UnityEngine;
public class WatchTargetLookRotation : MonoBehaviour
{
[SerializeField]
Transform targetTran;
void Update()
{
transform.rotation = Quaternion.LookRotation(targetTran.position);
}
}
実行結果
Slerp
対象物を向くのは同じですが、その方向に徐々に向けることができます
動きを補完する処理になります。引数に自身のrotationと対象のrotation、補間スピードを取ります
コード
using UnityEngine;
public class WatchTargetSlerp : MonoBehaviour
{
[SerializeField]
Transform targetTran;
[SerializeField]
float speed;
void Update()
{
Quaternion quaternion = Quaternion.LookRotation(targetTran.position);
transform.rotation = Quaternion.Slerp(transform.rotation, quaternion, speed);
}
}
ディスカッション
コメント一覧
まだ、コメントがありません