規則にそってプレハブを大量に作る必要があったのだけど、手作業でやるのが面倒だったのでスクリプトから作る方法がないかどうか調べた。

UnityEditor.PrefabUtility.CreatePrefab を使えばゲームオブジェクトをプレハブ化して指定のパスに保存できることがわかった。それを使って、例えば:

using UnityEditor;

  GameObject go = new GameObject("MyPrefabName");  // ゲームオブジェクト作成
  SomeComponent component = go.AddComponent<SomeComponent>();  // コンポーネント追加
  // componentをいじる
  PrefabUtility.CreatePrefab("Assets/Resources/Prefabs/MyPrefab.prefab", go);  // GameObjectをプレハブ化
  DestroyImmediate(go);  // シーンから削除

エディタから行う操作がスクリプトからも呼び出せるところが、Unity素晴らしい

他に、主題とはズレるが便利に使えることは

  • テキストファイルを読み込む:
  FileStream f = null;
  try {
    f = new FileStream(ファイル名, FileMode.Open, FileAccess.Read);
    StreamReader sr = new StreamReader(f);
    return sr.ReadToEnd();  // string
  } finally {
    if (f != null)
      f.Close();
  }
  return null;
  • ディレクトリに含まれるファイルを列挙: Directory.GetFiles(ディレクトリ名, "*.asset")
  • アセットのコンポーネントを取り出す: AssetDatabase.LoadAssetAtPath(ファイル名, typeof(FooComponent)) as FooComponent (ref)