「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を移し替えれば、良い。