Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Unity3D中按名称加载脚本_C#_Unity3d - Fatal编程技术网

C# 在Unity3D中按名称加载脚本

C# 在Unity3D中按名称加载脚本,c#,unity3d,C#,Unity3d,我正在用Unity3D用C#创建一个游戏,我需要调用我在运行时创建的脚本,所以我知道脚本的名称,因为我有一个与之完全相同的对象 我在运行时创建脚本,然后将其保存到我的资源文件夹中,但随后我更改了场景,需要调用该脚本并将其附加到当前场景中的空游戏对象,因此我希望使用类似的方式: Script myScript = Resources.Load(myObject.name) as Script; 但我知道这不能像这样做,所以我正在寻找一种方法,我可以做我想做的,因为我需要加载新的脚本,在运行时添加

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

我在运行时创建脚本,然后将其保存到我的资源文件夹中,但随后我更改了场景,需要调用该脚本并将其附加到当前场景中的空游戏对象,因此我希望使用类似的方式:

Script myScript = Resources.Load(myObject.name) as Script;
但我知道这不能像这样做,所以我正在寻找一种方法,我可以做我想做的,因为我需要加载新的脚本,在运行时添加一些函数


你知道解决我问题的办法吗?非常感谢

这其实比你想象的要容易。您可以使用AddComponent方法将脚本添加到游戏对象。因此,在你的等级改变后,你只需抓住你的空游戏对象并执行以下操作:

var gameObject = ... 

gameObject.AddComponent<Script>(); // where Script is the name of your Script's C# class
var gameObject=。。。
gameObject.AddComponent();//其中Script是脚本的C#类的名称

请参见

我可以在编辑器中这样做,但当我构建项目时,它会抛出一个错误。问题是,我在运行时使用FileStream.WriteFile()创建了一个.cs文件,这样在构建项目时,该文件就不会像类一样存在了。事实上,在Unity编辑器中我可以这样做,但是当我构建项目时,它会抛出错误“无法添加组件,因为类‘myClass’不存在!”您在游戏运行时编写该类?你到底想用这个达到什么目的?也许还有别的办法。你能给出一些关于为什么你需要在运行时创建这个类的见解吗?即使忽略了完全的解释或阐述,而不是仅仅是一个代码转储,为什么世界上有人认为这是一个可行的选择,当有一个非常好的泛型方法可以用更简单的方法来完成这项工作时,更有效的方式?
    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);