Unityの忘備録とメモです('◇')ゞ

Unityでゲーム制作中に気づいたことや忘備録とかとか

Playerの位置からTargetの方向を求める!!ベクトル同士の引き算【Unity】

ゲーム制作お疲れ様です~( ^^) _旦~~

Playerの位置からターゲットの方向を求める時は、
ベクトル同士の引き算で求められるそうですよ~('◇')ゞ

ターゲットの方向を求めたいときは、


ターゲットの位置 - Playerの位置 = Playerから見たターゲットの方向


という計算で求められます!

例えば~、

Playerがワールド座標でいうところのVector3(x = 5, y = 0, z = -9)にいるとして、
Enemy(ターゲット)はVector3(x = -3, y = 0, z = 3)にいるとしますね。


この時にスクリプトで、

Vector3 direction = enemy.transform.position  -  player.transform.position;
Debug.Log(direction);

で実行してみると、

Vector3(-8, 0, 12); という結果になります。


これはPlayerから見たEnemyの方向を示しているようですね。

いや、PlayerからEnemyへのベクトルが分かる~といった方が
正しいのかもしれないぃ。



~角度を調べる~



Playerの向きに対してのEnemyの角度も計算することができますよ(^^)



2つのベクトルの角度を計算する時は、Vector3.Angleという関数を使うといいみたいです。

Vector3.Angleの引数に、Playerの正面のベクトルと、敵との方向を渡してあげると
角度がわかりますね~(^_-)-☆

youtu.be

Vector3 direction =  enemy.transform.position - player.transform.position;
float angel = Vector3.Angle(player.transform.forward, direction);                        
Debug.Log(angel);

最後に全体のスクリプトを載せますね~('◇')ゞ

using UnityEngine;

public class Test : MonoBehaviour
{
   public GameObject player; //インスペクターからアタッチしてください~
   public GameObject enemy; //インスペクターからアタッチしてください~
   
   void Update()
   {
       Direction();
   }

   void Direction()
   {
        Vector3 direction =  enemy.transform.position - player.transform.position; //方向がわかる
        float angel = Vector3.Angle(player.transform.forward, direction); //角度がわかる
        Debug.Log(direction);
        Debug.Log(angel);
   }
}

寒いので暖かくしてゲーム制作してくださいね~( ^^) _旦~~
おわりです~。