2016-03-22 14 views
0

移動中に障害物を避けるために私のキャラクターを作ろうとしています。障害物を避けるためのベクトルの数学

ターゲットをクリックし、文字の上に定義されているがtransform.position(ここではありませんので物理学)を更新することにより、すべてのフレームに、それに移動します。

すべての障害物には衝突者があり、キャラクターにはトリガーがあります。

Vector3 point = other.ClosestPointOnBounds(transform.position); 
Vector3 dist = point - transform.position; 

と私がされに来た最高のもの:私があったよう

Vector3 perp = Vector3.Cross(transform.forward, dist.normalized); 
float dir = Vector3.Dot(perp, transform.up); 

transform.position -= transform.right * dir; 

が、それは動作しません文字のTriggerStayイベントに私は接触点についていくつかの情報を取得するために管理しています期待される。実際には全く動作しません。 どのようにキャラクターの位置を修正するため、ターゲットに移動しながら障害物をスムーズに逸らしているようですか?

編集:ここ

screenshot

白い線が連絡先の方向を示すスクリーンショットであるので、彼らは複数あります。 私が望むのは、キャラクターが目標に向かって移動中に障害物を避けることができるということです。今の

私は新しいアイデアに来た:

float correction = Vector3.Dot(transform.right, dist.normalized)/10; 
transform.position += transform.right * correction; 

私が望むようには多少動作しますが、文字は常にある場所から別の場所へジャンプします。これを修正する方法を知らない。

はまた、動きのベクトルから接触のベクトルをsubstractingによる移動の方向を補正しようとしたが、文字もぎくしゃくを移動し、愚かに回転されます。あなたはVector3.Cross適切な方法を使用しないように見える

Vector3 perp = Vector3.Cross(transform.forward, other.transform.up); 
transform.position -= perp.normalized * other.bounds.size.x/2f; 

+0

navメッシュエージェントを使用してypuのcinsider? – tim

+0

私は、ランダムなレベルを生成し、そう難しくフライ –

+0

にnavmesh生成することになるかもしれない特定の長さの線をキャストしたときに光線が遮られないまで障害物は、その後、あなたの線に自分のキャラクターを垂直に動かす見つけてきましたか? –

答えて

1

あなたのような何かを試すことができます。ここをクリックしてください:Unity3D docs link