在Unity3D中按名称加载脚本

时间:2013-01-03 16:16:22

标签: c# unity3d

我正在使用Unity3D在C#中创建一个游戏,我需要调用我在运行时创建的脚本,所以我知道脚本的名称,因为我有一个与它完全相同的对象。

我在运行时创建脚本,然后将其保存到我的Resources文件夹,但后来我更改了场景并需要调用该脚本并将其附加到当前场景中的Empty GameObject,所以我想使用一些东西那样:

Script myScript = Resources.Load(myObject.name) as Script;

但我知道这不可能这样做,所以我正在寻找一种方法,我可以做我想做的事情,因为我需要加载新的脚本来在运行时添加一些功能。

你知道我的问题的任何解决方案吗?非常感谢!!

2 个答案:

答案 0 :(得分:7)

这实际上比你想象的容易。您可以使用AddComponent方法将脚本添加到游戏对象。所以在你的等级改变之后你可以抓住你的空游戏对象并做一个:

var gameObject = ... 

gameObject.AddComponent<Script>(); // where Script is the name of your Script's C# class

请参阅http://docs.unity3d.com/Documentation/ScriptReference/GameObject.AddComponent.html

答案 1 :(得分:-1)

    GameObject gameObj = new GameObject();
    Type scriptType = Type.GetType(nameSpace.className);
    if (scriptType == null)
    {
        foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
        {
            var tempType = a.GetType(nameSpace.className);
            if (tempType != null)
            {
                scriptType = tempType;
            }
        }
    }
    gameObj.AddComponent(scriptType);