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;
,但它不工作,因爲我是預期。實際上它根本不起作用。 如何改正角色位置,所以在移動到目標時,它似乎順利偏離了障礙物?
編輯:這裏是截圖
白色光照出觸點的方向,所以它們是多方面的。 我想要的是角色在移動到目標時可以避開障礙物。
現在我來到了新的想法:
float correction = Vector3.Dot(transform.right, dist.normalized)/10;
transform.position += transform.right * correction;
它的工作原理有點像我想要的,但性格是不斷地從一個地方跳到另一個。不知道如何解決這個問題。
也嘗試通過從運動矢量減去接觸矢量來糾正運動方向,但字符也運動乾澀,旋轉愚蠢。
使用導航網格代理來執行ypu cinsider嗎? – tim
我有隨機生成的關卡,因此會更難以生成導航網頁 –
也許會投射一定長度的光線,當您找到障礙物時,請將您的角色垂直移動到您的光線直到光線不被阻擋? –