我无法将游戏对象保持在一个封闭的空间内。当它们到达边缘时,会有一些暂时的推回,但随后它们将穿过墙壁。

我在播放器上使用了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);


有了子弹,它们就会被赋予一定的速度,引擎会计算出它们的电影镜头。他们正在使用Box Collider,并将其设置为扳机,因此他们没有物理学。但是我使用OnTriggerEnter销毁它们。

//Projectiles without physics collisiions
function OnTriggerEnter (other : Collider) {
    Destroy(gameObject);
}


撞击网状对撞机壁时,部分但不是全部的子弹会被破坏。播放器有时会击打并停止,但通常可以推动它。每次如何使与网格碰撞器的碰撞起作用?

最佳答案

与快速移动的物体碰撞始终是一个问题。确保检测到所有碰撞的一种好方法是使用光线投射,而不是依赖于物理模拟。这对子弹或小物体效果很好,但对大物体则不会产生很好的效果。
http://unity3d.com/support/documentation/ScriptReference/Physics.Raycast.html

伪codeish(我在这里没有代码补全,并且记忆力很差):

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;
}

关于unity3d - 如何防止对撞机彼此通过?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9688237/

10-10 05:06