2016-03-22 25 views
0

我試圖讓我的角色在移動時避開障礙物。矢量數學統一以避開障礙

目標是在點擊時定義的,字符通過更新transform.position(所以這裏沒有物理)在每一幀上移動。

每個障礙物都有對撞機和人物有觸發器。在角色的TriggerStay事件中,我已成功地獲得有關接觸點的一些信息:

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; 

,但它不工作,因爲我是預期。實際上它根本不起作用。 如何改正角色位置,所以在移動到目標時,它似乎順利偏離了障礙物?

編輯:這裏是截圖

screenshot

白色光照出觸點的方向,所以它們是多方面的。 我想要的是角色在移動到目標時可以避開障礙物。

現在我來到了新的想法:

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

它的工作原理有點像我想要的,但性格是不斷地從一個地方跳到另一個。不知道如何解決這個問題。

也嘗試通過從運動矢量減去接觸矢量來糾正運動方向,但字符也運動乾澀,旋轉愚蠢。

+0

使用導航網格代理來執行ypu cinsider嗎? – tim

+0

我有隨機生成的關卡,因此會更難以生成導航網頁 –

+0

也許會投射一定長度的光線,當您找到障礙物時,請將您的角色垂直移動到您的光線直到光線不被阻擋? –

回答

1

你可以嘗試這樣的:

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

你似乎不使用Vector3.Cross有道。請閱讀此處:Unity3D docs link