【问题标题】:Accessing GetComponent() without instantiating在不实例化的情况下访问 GetComponent()
【发布时间】:2020-07-20 13:01:36
【问题描述】:

我是 Unity 游戏开发的新手,我发现代码中的以下用法有点令人困惑。

private Transform enemy;

// Start is called before the first frame update
void Start()
{
    enemy = GetComponent<Transform>();
}

根据文档 GetComponent() 是一个公共函数。那么如何在不实例化的情况下访问它呢? 我发现在 Unity 的社区上提出了类似的问题,但我没有找到任何答案准确地回答了这个问题。请帮助我理解这一点。 Unity 论坛上的问题链接如下。 Question

我的 Unity 版本是 2018.4.16f1 谢谢!

【问题讨论】:

  • 这是你调用它的类中的一个方法,所以对象已经存在
  • @SamiKuhmonen 那么这意味着我可以在类中类似地使用任何非静态方法吗?没有实例化?
  • 您可以使用该类中的任何方法(或其父类允许的方法),因为已经有一个实例,因为它不是从静态方法本身调用的。

标签: c# unity3d game-development


【解决方案1】:

您的类很可能继承自 MonoBehaviour,后者继承自 Behaviour,而 Behaviour 继承自 Component

Component 实现GetComponent

Fazit:你调用这个方法的实例就是this,实例Start被调用了。


顺便说一句,Transform 已经有一个专用属性 Component.transform,所以你不应该使用 GetComponent 来获取 Transform 参考。

【讨论】:

  • 感谢您的及时回复!所以我想我可以在子生命周期方法中使用父类中的任何非静态方法?
  • @bhagya 好吧,是的,这就是 c# 和面向对象编程的一般工作原理:)
  • :) 是的,只需要确认。谢谢!
【解决方案2】:

您正在调用添加 MonoBehavior 的 GameObject 的 GetComponent() 方法,并将其分配给 Transform 敌人。它甚至是您链接问题的第一个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多