哪里附上碰撞检测脚本?我观看了Unity的BasicPlatformerGame教程,其中主持人创建了一个他附加到Coin预制件的硬币拾取脚本。我想知道是否应该将拾取脚本附加到Player或CoinGameObject。假设我们有一个可以拾取物体的游戏。他们所做的只是增加分数(或以另一种方式影响玩家)并在碰撞时摧毁自己。我想知道解决这个问题的首选方法是什么。我想到了两种方法:方法A。在玩家游戏对象上有一个ObjectPickup脚本。该脚本将根据碰撞对象的类型执行任何操作。privatevoidOnTriggerEnter2D(Collider2Dother){if(other.gameObject.CompareTag("Coin")){IncrementScore();销毁(其他游戏对象);}elseif(other.gameObject.CompareTag("SuperSpeed")){IncreasePlayerSpeed();销毁(其他游戏对象);}}方法B。每个硬币都有一个CoinPickup脚本,每个超高速加电都有一个SuperSpeedPickup脚本。privatevoidOnTriggerEnter2D(Collider2Dother){if(other.gameObject.CompareTag("Player")){other.gameObject.IncrementScore();销毁(游戏对象);}}和其他脚本:销毁(游戏对象);}}方法A比方法B更有效吗?如果是这样,当方法A变得更可取时,游戏对象的粗略数量是多少?还是使用方法B总是更好,因为它看起来更干净(当我们有许多不同的可拾取对象时)?在您的示例中,“接近一个”将比另一个更有效,因为OnTriggerEnter2D被调用一次。使用“方法b”时,OnTriggerEnter2D在两个不同的脚本中被调用两次。Unity在两个不同的脚本+播放器上进行回调调用很慢。此外,OnTriggerEnter2D被发送到禁用的MonoBehaviours,这使得“更接近”成为更有效的选项。事件调用缓慢的主要原因是因为调用是从代码的本机C++端到Unity的C#API端进行的,这很昂贵。请注意,这无关紧要。这只是试图回答您的问题,哪个更有效,但您所做的是微观优化。在这个决定中应该发挥重要作用的是硬币在触发后的行为。如果硬币表现相同,则使用“接近a”并在玩家端进行检测。如果硬币在收集时具有不同的行为,例如具有不同分数值、颜色和动作(动画)的硬币,则在硬币侧进行检测并处理每个硬币。这就是脚本首先附加到游戏对象的原因。每个不同的硬币不需要不同的标签。使用枚举来区分OnTriggerEnter2D函数中的操作。在这种情况下,使用“closetoa”来处理这个问题是不好的。我真的坚持第二个,考虑到你可以为每个硬币和每个超高速创建一个预制件,并且已经附加了第二个方法脚本,并且考虑到你可以轻松地从代码方法中的任何地方生成它们,使其更智能、更清洁等每个人都清晰易读。我不喜欢(而且我绝对不会使用)用于此特定目的的第一种方法,主要是因为OnTriggerEnter2D很可能多次成为OnTriggerEnter2D因为它被放置在播放器上并且播放器到处移动.我应该使用B,因为它更像是对象编程的工作方式(至少在我看来是这样!),尽管它更昂贵。但是方法A不会拆分交互,所以想象一下您可以与2个不同的可拾取物发生碰撞并同时与两个可拾取物发生碰撞。如果您使用方法A,它将始终使用相同的碰撞顺序,这可能是您想要的,也可能不是您想要的!但显然,使用方法B,您并不知道首先选择哪个对象(在这种特定情况下!)方法A听起来更有效,也适用于多人游戏。如果你有n个玩家本地或在线,你需要检查硬币上的玩家ID。否则你需要很多标签。如果玩家自己检测到物品碰撞,则无需执行此操作。以上就是C#学习教程:哪里附上碰撞检测脚本?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
