facebook twitter hatena line email

Unity/3d/Prefab

提供: 初心者エンジニアの簡易メモ
2024年10月11日 (金) 11:01時点におけるAdmin (トーク | 投稿記録)による版 (parentの引数名をかけば、第4引数までを省略できる)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

Prefabからインスタンスを設置する

例としてcubeを設置

  1. Hieraruchyに3Dオブジェクト/cubeを選択し追加
  2. Project(Assetsの下に)にPrefabsディレクトリを作成する。(Prefabs名はわかりやすい名前で何でも良い)
  3. cubeをPrefabsディレクトリへドラッグする

以下コードで設置できる

[SerializeField] GameObject prefab;
for (int i = 0; i < 100; i++) {
           float x = Random.Range(-5.0f, 5.0f);
           float y = i  * 2 - 4f;
           float z = Random.Range(-5.0f, 5.0f);
           GameObject obj = Instantiate(prefab, Vector3.zero, Quaternion.identity);
           // GameObject obj = Instantiate(prefab, Vector3.zero, Quaternion.Euler(0, 0, 180f)); // 回転を含む場合
           obj.name = "sphere" + i;
}

上記csを貼り付けた、オブジェクトのinspectorを開いて、prefabに、Prefabsに入れたcubeを設置する。

PrefabをInstantiateで複製する

例としてcubeを複製

  1. Hieraruchyに3Dオブジェクト/cubeを選択し追加
  2. Project(Assetsの下に)にResourcesディレクトリを作成する(名前は、Resources名でないとならない)
  3. cubeをResourcesディレクトリへドラッグする

以下コードで複製できる

for (int i = 0; i < 100; i++) {
           float x = Random.Range(-5.0f, 5.0f);
           float y = i  * 2 - 4f;
           float z = Random.Range(-5.0f, 5.0f);
           GameObject prefab = (GameObject)Resources.Load("Sphere");
           Vector3 position = new Vector3(x, y, z);
           GameObject obj = Instantiate(prefab, position, Quaternion.identity);
           obj.name = "sphere" + i;
}

Resourcesディレクトリはオブジェクトを読込時に使われるディレクトリ名でunityのルールらしい。

PrefabをInstantiateで複製したものを削除

List<GameObject> list_obj = new List<GameObject>();
for (int i = 0; i < 100; i++) {
           float x = Random.Range(-5.0f, 5.0f);
           float y = i  * 2 - 4f;
           float z = Random.Range(-5.0f, 5.0f);
           GameObject prefab = (GameObject)Resources.Load("Sphere");
           Vector3 position = new Vector3(x, y, z);
           GameObject obj = Instantiate(prefab, position, Quaternion.identity);
}
list_obj.Add(obj);
// 削除チェック
for (int i = 0; i < list_obj.Count; i++)
{
           GameObject obj = list_obj[i];
           if (obj == null) {
               continue;
           }
           if (obj.transform.position.y < -10) {
               Destroy(list_obj[i]);
               Debug.Log("削除 i=" + i);
           }
}

parentの引数名をかけば、第4引数までを省略できる

Instantiate(textPrefab, parent: scrollContent.transform);