「Unity/3d/Prefab」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→Prefabの内、一部オブジェクトだけ変更したい場合) |
(→parentの引数名をかけば、第4引数までを省略できる) |
||
(同じ利用者による、間の7版が非表示) | |||
行11: | 行11: | ||
float z = Random.Range(-5.0f, 5.0f); | float z = Random.Range(-5.0f, 5.0f); | ||
GameObject obj = Instantiate(prefab, Vector3.zero, Quaternion.identity); | GameObject obj = Instantiate(prefab, Vector3.zero, Quaternion.identity); | ||
+ | // GameObject obj = Instantiate(prefab, Vector3.zero, Quaternion.Euler(0, 0, 180f)); // 回転を含む場合 | ||
obj.name = "sphere" + i; | obj.name = "sphere" + i; | ||
} | } | ||
行58: | 行59: | ||
} | } | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ==parentの引数名をかけば、第4引数までを省略できる== | |
− | + | Instantiate(textPrefab, parent: scrollContent.transform); | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
2024年10月11日 (金) 11:01時点における最新版
目次
Prefabからインスタンスを設置する
例としてcubeを設置
- Hieraruchyに3Dオブジェクト/cubeを選択し追加
- Project(Assetsの下に)にPrefabsディレクトリを作成する。(Prefabs名はわかりやすい名前で何でも良い)
- 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を複製
- Hieraruchyに3Dオブジェクト/cubeを選択し追加
- Project(Assetsの下に)にResourcesディレクトリを作成する(名前は、Resources名でないとならない)
- 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);