如何决定哪个GameObject应该处理碰撞?
在任何碰撞中,都涉及两个GameObjects,对吗?我想知道的是,如何确定哪个对象应包含我的对象OnCollision*? 作为示例,假设我有一个Player对象和一个Spike对象。我首先想到的是在播放器上放一个脚本,其中包含一些如下代码: OnCollisionEnter(Collision coll) { if (coll.gameObject.compareTag("Spike")) { Destroy(gameObject); } } 当然,可以通过在Spike对象上包含一个包含以下代码的脚本来实现完全相同的功能: OnCollisionEnter(Collision coll) { if (coll.gameObject.compareTag("Player")) { Destroy(coll.gameObject); } } 虽然两者都有效,但在Player上放置脚本对我来说更有意义,因为在这种情况下,发生碰撞时,正在对Player进行操作。 但是,令我感到怀疑的是,将来您可能希望添加更多会在碰撞时杀死播放器的对象,例如敌人,熔岩,激光束等。这些对象可能具有不同的标签。因此,播放器上的脚本将变为: OnCollisionEnter(Collision coll) { GameObject other = coll.gameObject; if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) { Destroy(gameObject); } } 而在脚本位于Spike上的情况下,您要做的就是将相同的脚本添加到所有其他可能杀死Player的对象上,并命名该脚本为KillPlayerOnContact。 另外,如果您在播放器和敌人之间发生碰撞,那么您可能想对两者都执行操作。那么在那种情况下,哪个对象应该处理碰撞?还是应该同时处理碰撞并执行不同的动作? 我以前从未开发过任何大小合适的游戏,而且我想知道,如果一开始就把这种事情弄错了,代码是否会变得混乱并且难以维护。也许所有方法都是有效的,这并不重要吗? 非常感谢任何见解!感谢您的时间 :)