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