我在控制游戏对象时遇到了一个问题,无法将它们保留在一个固定的空间内。当它们到达边缘时,会有一些瞬间的阻力,但然后它们就会穿过墙壁。
我正在使用玩家的 Box Collider 以及关卡墙壁的 Mesh Collider。我遇到了两个问题:一个是玩家角色(太空飞船)由玩家控制移动,另一个是由玩家发射的匀速移动的 Projectile(抛射物)。
这是我的玩家移动代码,在 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);
子弹被赋予了速度,引擎会计算它们的移动。它们使用Box Collider,并将其设为触发器,因此它们没有物理效应。但我使用OnTriggerEnter
来销毁它们。
//Projectiles without physics collisiions
function OnTriggerEnter (other : Collider) {
Destroy(gameObject);
}
当子弹碰到网格碰撞器的墙时,有些但不是全部的子弹将被摧毁。玩家有时候会撞上它并停下来,但通常可以突破它。我该如何使网格碰撞器的碰撞每次都有效?
MovePosition()
的调用是作为FixedUpdate()
的结果,所以不需要使用deltaTime。我还没有找到关于碰撞工作/失败的真正行为模式。 - CLo