检测两个物体之间的碰撞

Detect collisions between 2 objects

我正在尝试使用 Unity 在移动设备上做一个小游戏,但我遇到了迷宫旋转的问题。

要添加上下文: 当您在屏幕上移动手指时,迷宫会自行旋转。里面有一个球,你需要让它进入一个格子才能赢得关卡。

当迷宫旋转太快时,小球掉落穿过地面,我不知道如何解决。 我试着玩重力,对撞机...... 小球在跳跃时(迷宫快速上下移动时)也是如此。

目前我只是在你下落时重置球的位置。

        {
            ball.transform.position = new Vector3(0, 2, 0);
            maze.transform.position = Vector3.zero;
            maze.transform.rotation = Quaternion.identity;
        }

你们有什么想法吗?谢谢

在刚体(对于球)中,将碰撞检测设置为连续,并在迷宫(如果有的话)的刚体中将碰撞检测设置为连续动态。希望这对您有所帮助!

如果允许玩家自由移动平台,我认为这是不可避免的。我建议你限制玩家倾斜平台的速度。这样,小球就会有更多的帧数来适应新的坡度

我在倾斜迷宫中遇到了类似的问题 mini-game 我曾经研究过。理想情况下,实施 会起作用,但我认为迷宫移动得太快以至于碰撞无法正确注册。您需要使用 Lerp 平滑迷宫的旋转。在我们的例子中,我们有一个带有倾斜值的压力板,所以它不会直接转化为您的移动使用,但可能会给您一个正确方向的推动。我们使用了:

public GameObject maze;

private float _lerpTime;
private bool _isRotating;
private Quaternion _startingRot, _desiredRot;

private void Awake()
{
  _startingRot = maze.transform.localRotation;
} 

private void Update()
{
  //Don't want to move the maze if we don't ask for it
  if(!_isRotating)
    return;
  
  //Lerp the maze's rotation
  _lerpTime = Mathf.Clamp(_lerpTime + Time.deltaTime * 0.5f, 0f, 1f);
  maze.transform.localRotation = Quaternion.Lerp(_startingRot, _desiredRot, _lerpTime);
  
  //Once the maze gets where it needs to be, stop moving it
  if(affectedObject.transform.localRotation.Equals(_desiredRot)
    _isRotating = false;
}

private void ActivateTilt()
{
  //Set the new starting point of the rotation.
  _startingRot = maze.transform.localRotation;
  
  //However you want to calculate the desired rotation here
  
  //Reset our lerp and start rotating again
  _lerpTime = 0f;
  _isRotating = true;
}

随着时间的推移,这将减轻迷宫的旋转。使小球能够适应新的对撞机位置。