问题描述
我正在开发一个 3D 游戏,如果小鸟成功穿过管道,它就会得分,否则它就死了。我能够很好地实现这一点。
此外,我正在通过脚本生成管道(这是一个预制件)。生成的管道的位置在小鸟前面的随机位置。代码如下。这段代码写在负责游戏状态的 GameControl 脚本中。
public class GameControl : MonoBehavIoUr
{
public GameObject pipe;
public static GameControl instance;
..........
..........
..........
void Update()
{
..........
..........
..........
spawnXposition = CurrentXpositionOfBird + Random.Range(-1,1);
spawnYposition = CurrentYpositionOfBird + Random.Range(-1,1);
spawnZposition = CurrentZpositionOfBird + Random.Range(50,100);
SpawnPipe(spawnXposition,spawnYposition,spawnZposition);
}
..........
..........
..........
public void SpawnPipe(float x,float y,float z)
{
pipe.transform.position = new Vector3(x,y,z);
CurrentZpositionOfScoringCollider = pipe.transform.position.z + 2.62f;
}
}
SpawnPipe 函数负责创建管道的部分。我已将管道预制件附加到检查器中的管道游戏对象。
现在问题来了。当我生成管道时,我不希望它接触到地形的任何部分。如果它接触到我想重生,直到我将管道放在一个不接触地形的位置。为此,我在管道预制件中附加了一个脚本,并在 OnCollisionEnter 函数中销毁了管道。代码如下:
private void OnCollisionEnter(Collision collision)
{
Destroy(GameControl.instance.pipe);
}
上面的逻辑是,如果生成的管道与地形接触,则销毁它。在这种情况下,当生成的管道被销毁时,更新函数再次运行以生成新的管道。只要它不与地形碰撞,它会一次又一次地产生。
但我仍然能够看到管道实际上接触,很好地与地形融合。对于地形,我添加了一个网格碰撞器,并使其成为检查了 isKinematic 的刚体。当鸟撞到地形时它工作得很好,我可以通过消息显示游戏
对于管道,我添加了 3 个盒子碰撞器,一个在管道底部,另外两个在管道侧面。当它与小鸟碰撞时,成功显示游戏结束消息。但是管道和地形之间的线圈没有被检测到。我不知道我哪里出错了。请帮忙。我对 Unity 也很陌生
地形的FBX模型链接
https://docs.google.com/uc?export=download&id=1kFUtPpQnopa7489i-iQwC2qEiQECbWCu
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)