「Unity/Prefab」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→UIPrefab) |
|||
行43: | 行43: | ||
CanvasRendererとか、RectTransformを追加すれば良い。 | CanvasRendererとか、RectTransformを追加すれば良い。 | ||
簡単に追加する方法は、Imageとかを作り、そちらにComponentを移し替えれば、良い。 | 簡単に追加する方法は、Imageとかを作り、そちらにComponentを移し替えれば、良い。 | ||
+ | |||
+ | ==Prefabの分析== | ||
+ | Aaaa.Prefabを、テキストエディタで開くと以下のようになる。 | ||
+ | Aaaa.Prefabには、Buttonコンポーネントだけが追加されてある。 | ||
+ | <pre> | ||
+ | %YAML 1.1 | ||
+ | %TAG !u! tag:unity3d.com,2011: | ||
+ | --- !u!1 &4036905543814177402 | ||
+ | GameObject: | ||
+ | m_ObjectHideFlags: 0 | ||
+ | m_CorrespondingSourceObject: {fileID: 0} | ||
+ | m_PrefabInstance: {fileID: 0} | ||
+ | m_PrefabAsset: {fileID: 0} | ||
+ | serializedVersion: 6 | ||
+ | m_Component: | ||
+ | - component: {fileID: 2795986973129483262} | ||
+ | - component: {fileID: 6540708359075980082} | ||
+ | m_Layer: 0 | ||
+ | m_Name: Aaaa | ||
+ | m_TagString: Untagged | ||
+ | m_Icon: {fileID: 0} | ||
+ | m_NavMeshLayer: 0 | ||
+ | m_StaticEditorFlags: 0 | ||
+ | m_IsActive: 1 | ||
+ | --- !u!4 &2795986973129483262 | ||
+ | Transform: | ||
+ | m_ObjectHideFlags: 0 | ||
+ | m_CorrespondingSourceObject: {fileID: 0} | ||
+ | m_PrefabInstance: {fileID: 0} | ||
+ | m_PrefabAsset: {fileID: 0} | ||
+ | m_GameObject: {fileID: 4036905543814177402} | ||
+ | serializedVersion: 2 | ||
+ | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||
+ | m_LocalPosition: {x: 960.60004, y: 137.25, z: 0} | ||
+ | m_LocalScale: {x: 1, y: 1, z: 1} | ||
+ | m_ConstrainProportionsScale: 0 | ||
+ | m_Children: [] | ||
+ | m_Father: {fileID: 0} | ||
+ | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||
+ | --- !u!114 &6540708359075980082 | ||
+ | MonoBehaviour: | ||
+ | m_ObjectHideFlags: 0 | ||
+ | m_CorrespondingSourceObject: {fileID: 0} | ||
+ | m_PrefabInstance: {fileID: 0} | ||
+ | m_PrefabAsset: {fileID: 0} | ||
+ | m_GameObject: {fileID: 4036905543814177402} | ||
+ | m_Enabled: 1 | ||
+ | m_EditorHideFlags: 0 | ||
+ | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} | ||
+ | m_Name:- | ||
+ | m_EditorClassIdentifier:- | ||
+ | m_Navigation: | ||
+ | m_Mode: 3 | ||
+ | m_WrapAround: 0 | ||
+ | m_SelectOnUp: {fileID: 0} | ||
+ | m_SelectOnDown: {fileID: 0} | ||
+ | m_SelectOnLeft: {fileID: 0} | ||
+ | m_SelectOnRight: {fileID: 0} | ||
+ | m_Transition: 1 | ||
+ | m_Colors: | ||
+ | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} | ||
+ | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} | ||
+ | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} | ||
+ | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} | ||
+ | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} | ||
+ | m_ColorMultiplier: 1 | ||
+ | m_FadeDuration: 0.1 | ||
+ | m_SpriteState: | ||
+ | m_HighlightedSprite: {fileID: 0} | ||
+ | m_PressedSprite: {fileID: 0} | ||
+ | m_SelectedSprite: {fileID: 0} | ||
+ | m_DisabledSprite: {fileID: 0} | ||
+ | m_AnimationTriggers: | ||
+ | m_NormalTrigger: Normal | ||
+ | m_HighlightedTrigger: Highlighted | ||
+ | m_PressedTrigger: Pressed | ||
+ | m_SelectedTrigger: Selected | ||
+ | m_DisabledTrigger: Disabled | ||
+ | m_Interactable: 1 | ||
+ | m_TargetGraphic: {fileID: 0} | ||
+ | m_OnClick: | ||
+ | m_PersistentCalls: | ||
+ | m_Calls: [] | ||
+ | </pre> | ||
+ | 一番上にGameObjectがありm_NameにAaaaがある。一番下にMonoBehaviourがあり、これがButtonコンポーネント。 |
2025年2月28日 (金) 23:35時点における版
目次
アタッチオブジェクトの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を移し替えれば、良い。
Prefabの分析
Aaaa.Prefabを、テキストエディタで開くと以下のようになる。 Aaaa.Prefabには、Buttonコンポーネントだけが追加されてある。
%YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!1 &4036905543814177402 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2795986973129483262} - component: {fileID: 6540708359075980082} m_Layer: 0 m_Name: Aaaa m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &2795986973129483262 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4036905543814177402} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 960.60004, y: 137.25, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &6540708359075980082 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4036905543814177402} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name:- m_EditorClassIdentifier:- m_Navigation: m_Mode: 3 m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} m_SelectOnRight: {fileID: 0} m_Transition: 1 m_Colors: m_NormalColor: {r: 1, g: 1, b: 1, a: 1} m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} m_ColorMultiplier: 1 m_FadeDuration: 0.1 m_SpriteState: m_HighlightedSprite: {fileID: 0} m_PressedSprite: {fileID: 0} m_SelectedSprite: {fileID: 0} m_DisabledSprite: {fileID: 0} m_AnimationTriggers: m_NormalTrigger: Normal m_HighlightedTrigger: Highlighted m_PressedTrigger: Pressed m_SelectedTrigger: Selected m_DisabledTrigger: Disabled m_Interactable: 1 m_TargetGraphic: {fileID: 0} m_OnClick: m_PersistentCalls: m_Calls: []
一番上にGameObjectがありm_NameにAaaaがある。一番下にMonoBehaviourがあり、これがButtonコンポーネント。