玩家不断穿过墙壁

时间:2020-07-25 06:19:11

标签: c# unity3d

我有一个游戏,其中地图/背景由预制件组成。我的播放器和预制件都具有刚体和对撞机。它们都没有被触发检查,并且预制件将碰撞检测设置为连续动态。玩家的碰撞检测设置为连续。每个预制件都具有网状对撞机,而预制件的各个壁都具有箱式对撞机(均未设置为触发器)。我一直尝试使用Unity Remote 5在手机上对其进行测试,每次移动播放器时,它都会穿过墙壁。如果有人对如何防止我的玩家穿过墙壁有任何建议,我将不胜感激!

我的动作脚本是:

  public class Movement : MonoBehaviour
   {
     private Touch touch; 
     private float speedModifier;

 
void Start()
{
    speedModifier = 0.01f; 
}

void Update()
{
    if(Input.touchCount > 0) 
    { 
        touch = Input.GetTouch(0);
        if(touch.phase == TouchPhase.Moved)
            { transform.position = new Vector3(transform.position.x + touch.deltaPosition.x * speedModifier,
             transform.position.y, 
             transform.position.z + touch.deltaPosition.y * speedModifier);
             }
    }
        
}

}

3 个答案:

答案 0 :(得分:0)

这确实有助于查看您的运动脚本,但是听起来好像您是在通过将 transform.position 使用无需更改isKinematic设置为true 的stiffbody.MovePosition()来操纵玩家的。 >。 documentation说;

如果刚体的isKinematic设置为false,则其作用类似于transform.position = newPosition并将对象传送到新位置(而不是执行平滑过渡)。

此行为将忽略冲突。同样,您不需要场景中每个GameObject都具有刚体。播放器上的1个刚体足以使其与其他物体碰撞。

答案 1 :(得分:0)

根据我从您的问题中得到的信息,当您玩游戏时,如果玩家撞墙,它就会进入室内;因此问题可能出在墙的质量上。如果您必须在墙上添加一个刚体,那么您需要在墙上增加更多的质量,还可以编辑盒子碰撞器的边框并使它们合理地宽一些,否则,如果您在墙上不需要刚体,则只需保留盒子即可对撞机,它将很好。希望这个答案对您有帮助,如果您可以使用一些图片来解释更多情况,将会更好。

答案 2 :(得分:0)

使用刚体位置或施加力会导致刚体夹住其他对撞机。我建议更改而不是直接更改其刚度。速度。