強火で進め

このブログではプログラム関連の記事を中心に書いてます。

進行方向にキャラクターの向きを変える

7/7に「女性のためのUnityハンズオン初心者勉強会」なるイベントに自分もお手伝いとして参加して来ました。もう少し早く書きたかったのですがちょっと時間が取れなくてこんなに遅れてしまいました(^_^;)

女性のためのUnityハンズオン初心者勉強会・第2回目「Unityで猫もまっしぐら!」 #unijo #andronjo on Zusaar
http://www.zusaar.com/event/827006

このイベントの中で進行方向にキャラクターの(顔の)向きを変えるプログラムが出て来ましたのでそれをご紹介。言語はJavaScriptです。

#pragma strict

private var prev : Vector3;

function Start () {
	prev = transform.position;
}

function Update () {
	var diff = transform.position - prev;
	if (diff.magnitude > 0.01) {
		transform.rotation = Quaternion.LookRotation(diff);
	}
	prev = transform.position;
}

prevに1つ前のフレームでの位置を保存し、現在の位置との差分を取り、移動方向を取得し、それを元に rotation を指定しています。

if (diff.magnitude > 0.01) は方向ベクトルが0の場合は向きを求められなので無駄な処理と成ってしまうので方向ベクトルにある程度の大きさが有る時のみ処理をする様な実装と成っています。

図で示すとこんな感じです。

最初Aの位置にいて次にBの位置に移動すると方向ベクトルはCと成ります。これが diff = transform.position - prev で行なっている事です。

このルールを理解すればこのプログラムを少し変更するだけで大砲の砲台の向きをターゲットに向けるプログラムに書き換える事も可能です。

関連情報

キャラクターの移動処理(入力した方向へ移動するタイプ) - 強火で進め
http://d.hatena.ne.jp/nakamura001/20110613/1307992289