【问题标题】:How to instantiate a : monobehaviour script from another GameObject如何从另一个 GameObject 实例化一个:monobehaviour 脚本
【发布时间】:2014-12-14 07:57:12
【问题描述】:

我无法弄清楚这一点,并且在谷歌上几乎找不到对我有帮助的东西。

统一来说,如果脚本派生自 MonoBehaviour,则不能使用“new”关键字对其进行实例化。美好的。所以我一直在研究如何做到这一点,似乎获取 GameObject,然后获取它的 GameComponent 是要走的路......但它不会走得很远......

所以我有一个名为 NetworkManager 的游戏对象。附加到它的是一个名为 NetworkManager 的脚本。我有另一个名为 Main 的 GameObject,附加了一个名为 Main 的脚本(惊喜!)。基本上我想做的是在主脚本中“实例化”网络管理器,这样我就可以执行 networkManager.hostServer() 或 networkManager.kickPlayer() 等操作。

这是我的 main.cs 脚本:

public class Main : MonoBehaviour {

Player player;
GameObject networkManager;
UiManager uiManager;

// Use this for initialization
void Start () 
{

    player = new Player(Network.player, Environment.UserName, 0, 0);
    networkManager = GameObject.FindGameObjectWithTag("NetworkManager").GetComponent<NetworkManager>();
    uiManager = new UiManager();

}

我得到的错误如下:“无法将类型'Assets.scripts.NetworkManager'隐式转换为'UnityEngine.GameObject'”

当我添加“.GetComponent();”时出现问题部分。现在似乎很明显,如果该函数正在寻找一个 Component 类型,而不是获得一个 NetworkManager 类型,它就无法工作......这就是我被卡住的地方。我不知道如何让它发挥作用,而且我已经超过了 15 分钟的谷歌搜索限制。

【问题讨论】:

  • 我不明白为什么这个问题被否决了。这是一个很好的问题——请至少在投票时留下一些反馈。

标签: c# unity3d gameobject


【解决方案1】:

如果您想实例化新的网络管理器游戏对象,您应该花一些时间了解“预制件”。您可以通过将网络管理器游戏对象从场景中拖到其中一个文件夹中来将其设置为其中之一。实例化预制件很简单:

 Instantiate(NetworkManagerPrefab, new Vector3(0, 0, 0), Quaternion.identity);

这将在您的场景中创建新的 NetworkManager GameObject。

正如您所说,您的脚本无法正常工作,因为它正在获取组件并将其存储到 GameObject。 只需将变量的类型更改为组件的类型,或者如果组件是脚本,则更改为类的类型。在您的情况下,将 GameObject networkManager; 更改为 NetworkManager networkManager; 即可。

【讨论】:

  • 谢谢!感谢您将我指向预制件。我会仔细阅读它!
【解决方案2】:

如果你有预制,那么你可以实例化它。

GameObject g = Instantiate(prefab, position, rotation) as GameObject;

如果游戏对象已经在场景中,除非您想要多个,否则不要实例化它。你可以找到它。

GameObject g = GameObject.Find("GameObject Name");

然后你会问,我如何获取附加到游戏对象的脚本。像这样:

ScriptName s = g.GetComponent<ScriptName>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多