我是 Unity3D 的新手,我制作了一个生成新 C# 脚本的脚本(暂时在 void Start() 上)。这个 C# 脚本必须在制作完成后添加到游戏对象中。我试图找到一种在运行时导入此脚本的方法,但我完全迷失了。
以下脚本附加到同一个游戏对象,并且生成的脚本也必须作为组件添加到同一个游戏对象。
这会生成脚本:
public class mutator : MonoBehaviour {
// Use this for initialization
void Start () {
string directoryName = @"C://blabla/bla";
string directoryPathString = Path.Combine(directoryName, gameObject.name);
string fileName = gameObject.name + ".cs";
string filePathString = Path.Combine(directoryPathString, fileName);
if(!Directory.Exists(directoryPathString))
Directory.CreateDirectory(directoryPathString);
if(!File.Exists(filePathString)) {
using(FileStream fs = File.Create(filePathString)) {
using (StreamWriter s = new StreamWriter(fs)) {
s.WriteLine("using UnityEngine;");
s.WriteLine("using System.Collections;");
s.WriteLine("public class " + gameObject.name + " : MonoBehaviour {");
s.WriteLine(" public int organelles = 0;");
s.WriteLine(" void Start () {");
s.WriteLine(" foreach(Transform T in transform){");
s.WriteLine(" organelles = organelles + 1;");
s.WriteLine(" }");
s.WriteLine(" }");
s.WriteLine("}");
}
}
}
}
}
这会尝试找到脚本并将其添加到游戏对象中:
public class DNA_translator : MonoBehaviour {
public string fileName;
public string url;
// Use this for initialization
void Start () {
string directoryName = @"C://blabla/bla";
string directoryPathString = directoryName + "/" + gameObject.name;
fileName = gameObject.name + ".cs";
string filePathString = directoryPathString + "/" + fileName;
if(File.Exists(filePathString)) {
print("file exists");
url = "file:///" + filePathString;
print(url);
UnityEngineInternal.APIUpdaterRuntimeServices.AddComponent(gameObject, "Assets/Scripts/DNA/DNA_translator.cs (21,4)", gameObject.name);
}
}
// Update is called once per frame
void Update () {
}
}
如果在程序第一次运行时关闭最后一个脚本并在程序第二次运行时打开(当然因为 Unity 有时间编译脚本),则该脚本可以工作。
很感谢任何形式的帮助!
一个