「Unity/Prefab」の版間の差分
提供: 初心者エンジニアの簡易メモ
| 行1: | 行1: | ||
| + | ==アタッチオブジェクトのcanvasの位置== | ||
| + | SetParentを使う | ||
| + | <pre> | ||
| + | GameObject rObject; | ||
| + | GameObject prefab = (GameObject)Resources.Load("RObject"); | ||
| + | Vector3 position = new Vector3( | ||
| + | rouletteBackImage.transform.localPosition.x, | ||
| + | rouletteBackImage.transform.localPosition.y, | ||
| + | rouletteBackImage.transform.localPosition.z - 0.2f); | ||
| + | GameObject rObject = Instantiate(prefab, position, Quaternion.identity); | ||
| + | rObject.name = "RObject" + angle; | ||
| + | rObject.transform.SetParent(GameObject.Find("/Canvas").transform); | ||
| + | // rObject.transform.localScale = new Vector3(152.68f, 152.68f, 152.68f); // 場合によっては追加 | ||
| + | rObject.transform.localPosition = new Vector3(0f, 0f, - 30f); | ||
| + | </pre> | ||
| + | SetParentとlocalScaleなどの順番によって表示が異なるので気をつける。基本的にはSetParentを先に追加がわかりやすいと思う。 | ||
| + | |||
| + | もしくはInstantiateの第4パラメータを使う。 | ||
| + | GameObject obj = Instantiate(prefab, position, Quaternion.identity, rouletteBackImage.transform); | ||
==Prefabを編集== | ==Prefabを編集== | ||
2023年12月5日 (火) 11:16時点における版
目次
アタッチオブジェクトのcanvasの位置
SetParentを使う
GameObject rObject;
GameObject prefab = (GameObject)Resources.Load("RObject");
Vector3 position = new Vector3(
rouletteBackImage.transform.localPosition.x,
rouletteBackImage.transform.localPosition.y,
rouletteBackImage.transform.localPosition.z - 0.2f);
GameObject rObject = Instantiate(prefab, position, Quaternion.identity);
rObject.name = "RObject" + angle;
rObject.transform.SetParent(GameObject.Find("/Canvas").transform);
// rObject.transform.localScale = new Vector3(152.68f, 152.68f, 152.68f); // 場合によっては追加
rObject.transform.localPosition = new Vector3(0f, 0f, - 30f);
SetParentとlocalScaleなどの順番によって表示が異なるので気をつける。基本的にはSetParentを先に追加がわかりやすいと思う。
もしくはInstantiateの第4パラメータを使う。
GameObject obj = Instantiate(prefab, position, Quaternion.identity, rouletteBackImage.transform);
Prefabを編集
- プレハブ側ファイルを編集すると、設置しているScene内のプレハブが自動更新される。
- Scene内のプレハブを編集すると、Scene内のObjectが編集されるが、プレハブ側ファイルは変更されない。
- Scene内に同じオブジェクトがある場合は、プレハブ化して、おくと良い。gitで管理してる場合も楽かも。
Prefabの内、一部オブジェクトだけ変更したい場合
- Scene内のプレハブは編集すると、オブジェクトのアイコンに+マークが付き文字が白くなる。これは他のPrefabには影響しないので、そのオブジェクトにだけ変更を加えたい場合はそのようにする。
修正ファイル
- Prefabだけを、更新した場合は、Prefabファイルが更新される。
- Prefabの一部オブジェクトを、変更した場合は、~Scene.unityが更新される。
Sceneに配置されてるPrefabの修正を、Prefab側に反映
- Sceneに配置されてるPrefabのオブジェクトを修正
- Sceneに配置されてるPrefabのオブジェクトのInspectorのOverridesを開き、差分が出てることを確認。
- Sceneに配置されてるPrefabのオブジェクトのInspectorのOverridesの部分で、ApplyAllを選択すると、変更がPrefab側へ反映される。
- Sceneに配置されてるPrefabのオブジェクト側の変更は、残ったままだが、破棄しても問題ない。
参考:https://docs.unity3d.com/ja/2022.3/Manual/EditingPrefabViaInstance.html
UIPrefab
Prefabを選択した際に、Sceneに画面が出ない(Canvas(Environment)がでないときは、 CanvasRendererとか、RectTransformを追加すれば良い。 簡単に追加する方法は、Imageとかを作り、そちらにComponentを移し替えれば、良い。
