私は Unity3D の初心者で、新しい C# スクリプトを生成するスクリプトを作成しました (今のところ void Start() で)。この C# スクリプトは、作成後にゲーム オブジェクトに追加する必要があります。実行時にこのスクリプトをインポートする方法を見つけようとしましたが、完全に失われました。
次のスクリプトは同じ gameObject にアタッチされており、生成されたスクリプトもコンポーネントとして同じ gameObject に追加する必要があります。
これにより、スクリプトが生成されます。
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 () {
}
}
プログラムの最初の実行時に最後のスクリプトがオフになり、プログラムの 2 回目の実行時にオンになった場合、スクリプトは機能します (もちろん、Unity にはスクリプトをコンパイルする時間があったため)。
どんな助けでも大歓迎です!
あ