如何防止对手穿过对方?

Chr*_*ris 17 unity-game-engine game-physics

我无法将游戏对象保留在包含的空间内.当它们到达边缘时,会有一些瞬间推回,但随后它们将穿过墙壁.

我在玩家上使用了Box Collider,在水平墙上使用了Mesh Collider.我对玩家角色(太空飞船)的问题表明该运动是由玩家控制的.并且使用射弹,它们是火,忘记以恒定速度移动.

这是我的播放器的移动代码.它正在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);
Run Code Online (Sandbox Code Playgroud)

通过子弹,它们被赋予速度并且引擎计算他们的电影.他们正在使用Box Collider并将其设置为Trigger,因此他们没有物理.但我用它OnTriggerEnter来摧毁它们.

//Projectiles without physics collisiions
function OnTriggerEnter (other : Collider) {
    Destroy(gameObject);
}
Run Code Online (Sandbox Code Playgroud)

击中网眼对撞墙时,有些但不是所有的子弹都会被摧毁.玩家有时会击中并停止,但通常可以通过它.如何每次都与网格对撞机碰撞?

Pet*_*cio 12

我有一个弹球原型,在同样的领域给我带来了很多麻烦.这些是我几乎(但尚未完全)解决这些问题的所有步骤:

对于快速移动的物体:

  • 将刚体的Interpolate设置为'Interpolate'(这不会影响实际的物理模拟,但会正确更新对象的渲染 - 仅在渲染视角的重要对象上使用它,如播放器或弹球,但不能用于射弹)

  • 将碰撞检测设置为连续动态

  • 将脚本DontGoThroughThings(https://www.auto.tuwien.ac.at/wordpress/?p=260)附加到您的对象.这个脚本巧妙地使用我在其他答案中发布的Raycasting解决方案,在碰撞点之前拉回有问题的对象.

编辑 - >项目设置 - >物理:

  • 将Min Penetration for Penalty设置为非常低的值.我把我的设定为0.001

  • 将Solver Iteration Count设置为更高的值.我把我的设定为50,但你可以用更少的东西做好.

所有这些都将在性能上受到惩罚,但这是不可避免的.默认值在性能上是软的,但并不是真正用于正确模拟小型和快速移动的对象.


Pet*_*cio 11

与快速移动的物体碰撞总是一个问题.确保检测到所有碰撞的一种好方法是使用Raycasting而不是依赖于物理模拟.这适用于项目符号或小对象,但不会为大型对象产生良好的结果. http://unity3d.com/support/documentation/ScriptReference/Physics.Raycast.html

伪编码(我这里没有代码完成和内存不足):

void FixedUpdate()
{
    Vector3 direction = new Vector3(transform.position - lastPosition);
    Ray ray = new Ray(lastPosition, direction);
    RaycastHit hit;
    if (Physics.Raycast(ray, hit, direction.magnitude))
    {
        // Do something if hit
    }

    this.lastPosition = transform.position;
}
Run Code Online (Sandbox Code Playgroud)


Chc*_*hwy 6

如何将刚体的碰撞检测设置为连续连续动态

http://unity3d.com/support/documentation/Components/class-Rigidbody.html