我无法将游戏对象保存在封闭空间内。当他们到达边缘时,会有一些短暂的向后推,但随后他们会直接穿过墙壁。
我在播放器上使用 Box Collider,在关卡的墙壁上使用 Mesh Collider。我对移动由玩家控制的玩家角色( spaceship )都有问题。还有射弹,它们是着火的,忘记了以恒定的速度移动。
这是我的播放器的移动代码。它正在 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);
}
一些但不是所有的子弹在击中网格对撞机壁时会被摧毁。玩家有时会撞到它并停下来,但通常可以通过它。我怎样才能使与网格碰撞器的碰撞每次都起作用?
最佳答案
我有一个弹球原型(prototype),在同样的领域也给我带来了很多麻烦。这些是我几乎(但尚未完全)解决这些问题所采取的所有步骤:
对于快速移动的物体:
在 Edit -> Project Settings -> Physics :
所有这些都会在性能上受到惩罚,但这是不可避免的。默认值在性能上是软的,但并不是真正用于正确模拟小型和快速移动的对象。
关于unity3d - 如何防止对撞机相互穿过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9688237/