読者です 読者をやめる 読者になる 読者になる
【スポンサーリンク】

【Unity 2D】あるオブジェクトを指定オブジェクトの方向に向ける

要約

下記のメソッドを使えばOK

Vector2 Aim(GameObject rotationObject, GameObject targetObject, float angleOffset) {
	Vector3 posDif = targetObject.transform.position - rotationObject.transform.position;
	float angle = Mathf.Atan2(posDif.y, posDif.x) * Mathf.Rad2Deg;
	Vector3 euler = new Vector3(0, 0, angle + angleOffset);
	
	rotationObject.transform.rotation = Quaternion.Euler(euler);
	
	return posDif.normalized;
}

仕様

引数
  • rotationObject: 回転させたいオブジェクト
  • targetObject: ターゲットとなるオブジェクト
  • angleOffset: 角度補正値 ※1

このメソッドの効果

rotationObjectがtargetObjectの方向に向く

返り値について

rotationObjectからtargetObjectへの単位方向ベクトルが返される。
このベクトルはrotationObjectからtargetObjectに向けて何かを動かしたいときに使える。

※1 角度補正値(angleOffset)について

例えば下記二つのSpriteオブジェクト(矢印の画像)に上記のメソッドを適用することを考える。

f:id:Phalusamil:20151001160443p:plainこちらの画像は角度補正値を0にすると正しい方向に向く

f:id:Phalusamil:20151001160447p:plain一方こちらの画像は角度補正値を−45にする必要がある

角度補正値をこれらの値に設定する理由は、角度の基準が次のようになっているためである。

f:id:Phalusamil:20151001160400p:plain

なので、0度に合わせる必要がある。

f:id:Phalusamil:20151001160345p:plain

その昔、デザイナーが描いた弓矢の画像が135度くらいを向いていたが、このメソッドのおかげで元画像を修正する手間が省けた記憶がある。

【スポンサーリンク】