Unity/Prefab
提供: 初心者エンジニアの簡易メモ
目次
アタッチオブジェクトの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を移し替えれば、良い。