我在保持包含空間內的遊戲對象時遇到問題。當他們到達邊緣時,會有一些瞬間推回,但他們會直接穿過牆壁。如何防止碰撞體相互穿過?
我在玩家身上使用了箱子對撞機,而在等級的牆上使用了網狀碰撞物。我與玩家角色(太空飛船)有問題,運動是由玩家控制的。並且拋射物是火,而且不會以恆定的速度移動。
這是我的球員的運動代碼。它正在運行在FixedUpdate()
函數中。
//Movement
haxis = Input.GetAxis("Horizontal") * speed;
vaxis = Input.GetAxis("Vertical") * speed;
moveVector.x = haxis;
moveVector.z = vaxis;
if(moveVector.magnitude > 1)
{
moveVector.Normalize();
}
rigidbody.MovePosition(transform.position + moveVector * speed);
隨着子彈,它們被賦予一個速度,引擎計算他們的電影。他們使用箱子對撞機,它被設置爲觸發器,所以他們沒有物理。但我用OnTriggerEnter
來摧毀它們。
//Projectiles without physics collisiions
function OnTriggerEnter (other : Collider) {
Destroy(gameObject);
}
一些,但並不是所有的子彈擊中將網格對撞機壁時被破壞。玩家有時會擊中並停止,但通常可以通過它。我怎樣才能使網格碰撞器每次碰撞?
我甚至從牆上的網格創建了一個更簡單的網格對撞機,它沒有幫助。 – Chris 2012-03-13 16:42:12
您用於屏幕的網狀碰撞體有多寬,子彈和玩家的行程有多快?如果子彈或玩家可以在一幀內移動比對撞機長的距離,那麼就有了它。另外,我會避免手動移動剛體。這隻會混淆物理引擎並阻止其優化。改爲移動遊戲對象的變換。 – Elideb 2012-03-14 14:22:09
@Elideb對撞機大概有8個字符和20個子彈。他們沒有完全通過一個框架中的對撞機。如果移動變換Unity將忽略所有物理,rigidbody.MovePosition將物理考慮在內。 – Chris 2012-03-14 16:23:00