Unity3Dで、真っ直ぐ直線上に進む Playerと、そのPlayerの進行方向にSwitchオブジェクトがあり、Switchオブジェクトから見て、Playerが近づいてきているのか、遠ざかっているのかを検知しようとして、以下のコードを書きました。(一部省略しました)
C#
1void Update() 2 { 3 //Player近くに入ると、Colliderがactiveにしてくれる 4 if (activate) 5 { 6 //playerの向いている方向を取得する。 7 float angleDir = playerObject.transform.eulerAngles.y * (Mathf.PI / 180.0f); 8 Vector3 player_dir = new Vector3(Mathf.Sin(angleDir), 0.0f, Mathf.Cos(angleDir)); 9 //Switchがplayerを見る方向を取得、正規化したあとに、反対方向のベクトルを返す。 10 Vector3 dir_from_switch = (playerObject.transform.position - myPosition).normalized * (-1); 11 12 Debug.Log("fromSwitch" + dir_from_switch ); 13 Debug.Log("player" + player_dir); 14 //上の二つのベクトルの向きが真逆である(playerが向かってきている)とき、trueを返す。 15 16 if(dir_from_switch == player_dir) 17 { 18 Debug.Log("近づいてきています"); 19 } 20 else 21 { 22 Debug.Log("去ってます"); 23 } 24 } 25 }
if文の前のDebug.Logではそれぞれ正確なベクトルを算出していて、近づいているときは全く同じ値になっているのですが、if文の中は常に「遠ざかっている」という結果を出しています。どうすればよいのでしょうか。
ご教授お願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。