【问题标题】:What is the most efficient way - checking tag or GetComponent什么是最有效的方法 - 检查标签或 GetComponent
【发布时间】:2019-11-16 12:40:19
【问题描述】:

我正在考虑检查 GameObject 是否为 Enemy 的最佳方法。我可以使用 CompareTag 方法来检查它是否是“Enemy”或尝试获取组件,例如“EnemyController”,但我很困惑。 您能告诉我在 Unity 中执行此类操作的最有效方法是什么吗?

感谢您的回复。

【问题讨论】:

  • 如果你需要对脚本做一些事情(造成伤害),无论如何都需要getComponent。否则使用标签,标签非常快。如果是哪个组件的问题,我建议使用接口或超类,这样你就可以完全跳过这个决定。
  • 我听说使用 tags==strings 并不是一个好主意,因为垃圾。因此,如果我想例如检查单击的 GO 是敌人还是其他东西并造成损坏或其他操作,我应该尝试 GetComponent(如果 null 做其他事情)还是检查标签。
  • CompareTag。就垃圾而言,所有局部变量基本上都贡献了零垃圾,无论是否为字符串。

标签: c# unity3d game-development


【解决方案1】:

在这里你可以找到一个很好的比较;

https://snowhydra.wordpress.com/2015/06/01/unity-performance-testing-getcomponent-fields-tags/

因此,使用层是最好的方法。

【讨论】:

    【解决方案2】:

    您可以创建一个字典,使用 Collider 作为键,脚本作为值。当你和删除项目时,你需要自己管理它。

    【讨论】:

    • 你认为这个方案会占用大量内存,并产生垃圾吗?
    • 它会使用一些内存,但没什么大不了的,到目前为止,这是我发现的处理冲突和避免调用 get 组件的最有效方法。
    • 字典是 1:1,我不确定这是否能解决提问者的问题。
    猜你喜欢
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    相关资源
    最近更新 更多