Unity - 无法访问 C# 中主播放器的子组件

Unity - cannot access sub-component of main player in C#

我在从其他组件访问某些组件时遇到问题 - 这主要是由于未能理解 Unity 架构。我假设每次你 'name' 一个组件,实际上你创建了一个新的 C# 类型,就像 class 定义一样 - 但也许不是......。

请注意,由于各种原因,我试图以编程方式将所有这些连接起来 - 我不想在编辑器中拖放,原因有两个:(1) 在某些情况下,实际上这只能在运行时完成, (2) 无论如何我都需要了解架构。

我的主播放器附有脚本,因此我想访问主播放器的子组件,即相机。称为 - 例如 - 'MyMainCamera'.

在主播放器脚本的 Start() 中,我这样做:

GameObject    tmp = GameObject.Find("MyMainCamera");

MyMainCamera  camera = tmp.GetComponent<MyMainCamera>();

//  do something with camera ....

(此处遗漏了错误检查代码)。问题是编译器抛出错误 "The type or namespace name 'MyMainCamera' could not be found (are you missing a using directive ...?)"。这只是一个例子,在其他情况下我需要访问不是主要播放器的子组件的组件。

当我对 Unity 定义的类型(如 Text、Dropdown 等)执行相同的操作时 - 可能在 'using UnityEngine;' 中定义,一切正常。

不清楚如何为我定义的类型执行此操作。

遗憾的是,在 Unity 中命名游戏对象不会创建新类型。

所以根据我的理解,你有一个相机组件附加到你试图获得的玩家游戏对象?在这种情况下,您应该尝试:

GameObject tmp = GameObject.Find("MyMainCamera");

Camera myMainCamera = tmp.GetComponent<Camera>();    

其中 MyMainCamera 应该是包含所需相机组件的游戏对象的名称。

由于相机组件 class 的名称只是 "Camera" 而不是 MyMainCamera,您可以将变量命名为 "MyMainCamera" 如果有帮助,就像我在上面的代码中所做的那样.