facebook twitter hatena line email

「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側に反映

  1. Sceneに配置されてるPrefabのオブジェクトを修正
  2. Sceneに配置されてるPrefabのオブジェクトのInspectorのOverridesを開き、差分が出てることを確認。
  3. Sceneに配置されてるPrefabのオブジェクトのInspectorのOverridesの部分で、ApplyAllを選択すると、変更がPrefab側へ反映される。
  4. Sceneに配置されてるPrefabのオブジェクト側の変更は、残ったままだが、破棄しても問題ない。

参考:https://docs.unity3d.com/ja/2022.3/Manual/EditingPrefabViaInstance.html

UIPrefab

Prefabを選択した際に、Sceneに画面が出ない(Canvas(Environment)がでないときは、 CanvasRendererとか、RectTransformを追加すれば良い。 簡単に追加する方法は、Imageとかを作り、そちらにComponentを移し替えれば、良い。