update tool change prefabs

This commit is contained in:
CuongNV
2026-04-21 14:43:26 +07:00
parent 3c380b67a8
commit 7dd3975ba6
8 changed files with 536 additions and 40 deletions
@@ -0,0 +1,71 @@
using UnityEditor;
using UnityEditor.ShortcutManagement;
using UnityEngine;
public static class PrefabApplyOverrideShortcut
{
private const string MenuPath = "Tools/Prefab/Apply Overrides %#a";
[MenuItem(MenuPath)]
private static void ApplyOverridesFromSelection()
{
var selectedObjects = Selection.gameObjects;
if (selectedObjects == null || selectedObjects.Length == 0)
{
Debug.LogWarning("No GameObject selected.");
return;
}
int appliedCount = 0;
foreach (var selectedObject in selectedObjects)
{
if (selectedObject == null || !PrefabUtility.IsPartOfPrefabInstance(selectedObject))
{
continue;
}
var rootInstance = PrefabUtility.GetOutermostPrefabInstanceRoot(selectedObject);
if (rootInstance == null)
{
continue;
}
PrefabUtility.ApplyPrefabInstance(rootInstance, InteractionMode.UserAction);
appliedCount++;
}
if (appliedCount == 0)
{
Debug.LogWarning("Selected object(s) are not prefab instances.");
return;
}
Debug.Log($"Applied prefab overrides for {appliedCount} instance(s).");
}
[MenuItem(MenuPath, true)]
private static bool ValidateApplyOverridesFromSelection()
{
var selectedObjects = Selection.gameObjects;
if (selectedObjects == null || selectedObjects.Length == 0)
{
return false;
}
foreach (var selectedObject in selectedObjects)
{
if (selectedObject != null && PrefabUtility.IsPartOfPrefabInstance(selectedObject))
{
return true;
}
}
return false;
}
[Shortcut("Prefab/Apply Overrides", KeyCode.A, ShortcutModifiers.Action | ShortcutModifiers.Shift)]
private static void ApplyOverridesShortcut(ShortcutArguments _)
{
ApplyOverridesFromSelection();
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5313c15fbb1e129438e9201a10ff2eda
@@ -0,0 +1,293 @@
using System.Collections.Generic;
using UnityEditor;
using UnityEditorInternal;
using UnityEngine;
public class PrefabChildBatchCreatorWindow : EditorWindow
{
private readonly List<GameObject> _prefabs = new List<GameObject>();
private string _childName = "NewChild";
private bool _replaceIfExists = false;
private bool _copyLayerAndTagFromParent = true;
private bool _copyParentLocalScale = true;
private bool _useCustomLocalPosition = true;
private bool _useCustomLocalRotation = true;
private Vector3 _childLocalPosition = Vector3.zero;
private Vector3 _childLocalEulerRotation = Vector3.zero;
private Vector2 _scroll;
[MenuItem("Tools/Prefabs/Batch Create Child")]
public static void ShowWindow()
{
var window = GetWindow<PrefabChildBatchCreatorWindow>("Batch Child Creator");
window.minSize = new Vector2(500f, 450f);
}
private void OnGUI()
{
EditorGUILayout.LabelField("Batch Create Child For Prefabs", EditorStyles.boldLabel);
EditorGUILayout.HelpBox(
"Add multiple prefab assets below. The tool creates one child under each prefab root, then moves all root components to the child.",
MessageType.Info);
DrawPrefabDropArea();
DrawPrefabList();
EditorGUILayout.Space();
EditorGUILayout.LabelField("Child Settings", EditorStyles.boldLabel);
_childName = EditorGUILayout.TextField("Child Name", _childName);
_replaceIfExists = EditorGUILayout.ToggleLeft("Replace existing child with same name", _replaceIfExists);
_copyLayerAndTagFromParent = EditorGUILayout.ToggleLeft("Copy parent layer/tag/static", _copyLayerAndTagFromParent);
_copyParentLocalScale = EditorGUILayout.ToggleLeft("Copy parent local scale", _copyParentLocalScale);
EditorGUILayout.Space(4f);
_useCustomLocalPosition = EditorGUILayout.ToggleLeft("Set custom local position", _useCustomLocalPosition);
using (new EditorGUI.DisabledScope(!_useCustomLocalPosition))
{
_childLocalPosition = EditorGUILayout.Vector3Field("Local Position", _childLocalPosition);
}
_useCustomLocalRotation = EditorGUILayout.ToggleLeft("Set custom local rotation", _useCustomLocalRotation);
using (new EditorGUI.DisabledScope(!_useCustomLocalRotation))
{
_childLocalEulerRotation = EditorGUILayout.Vector3Field("Local Rotation (Euler)", _childLocalEulerRotation);
}
EditorGUILayout.Space(12f);
using (new EditorGUI.DisabledScope(_prefabs.Count == 0 || string.IsNullOrWhiteSpace(_childName)))
{
if (GUILayout.Button("Create Child For All Prefabs", GUILayout.Height(30f)))
{
CreateChildrenForPrefabs();
}
}
}
private void DrawPrefabDropArea()
{
Event evt = Event.current;
Rect dropRect = GUILayoutUtility.GetRect(0f, 60f, GUILayout.ExpandWidth(true));
GUI.Box(dropRect, "Drag Prefab Assets Here");
if (!dropRect.Contains(evt.mousePosition))
{
return;
}
if (evt.type == EventType.DragUpdated || evt.type == EventType.DragPerform)
{
DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
if (evt.type == EventType.DragPerform)
{
DragAndDrop.AcceptDrag();
foreach (Object obj in DragAndDrop.objectReferences)
{
TryAddPrefab(obj as GameObject);
}
}
evt.Use();
}
}
private void DrawPrefabList()
{
EditorGUILayout.Space(4f);
EditorGUILayout.LabelField($"Prefabs ({_prefabs.Count})", EditorStyles.boldLabel);
_scroll = EditorGUILayout.BeginScrollView(_scroll, GUILayout.Height(160f));
int removeIndex = -1;
for (int i = 0; i < _prefabs.Count; i++)
{
EditorGUILayout.BeginHorizontal();
_prefabs[i] = (GameObject)EditorGUILayout.ObjectField(_prefabs[i], typeof(GameObject), false);
if (GUILayout.Button("X", GUILayout.Width(28f)))
{
removeIndex = i;
}
EditorGUILayout.EndHorizontal();
}
if (removeIndex >= 0)
{
_prefabs.RemoveAt(removeIndex);
}
EditorGUILayout.EndScrollView();
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("Add Selected Prefabs"))
{
foreach (Object obj in Selection.objects)
{
TryAddPrefab(obj as GameObject);
}
}
if (GUILayout.Button("Clear List"))
{
_prefabs.Clear();
}
EditorGUILayout.EndHorizontal();
}
private void TryAddPrefab(GameObject prefab)
{
if (prefab == null)
{
return;
}
string path = AssetDatabase.GetAssetPath(prefab);
if (string.IsNullOrEmpty(path))
{
return;
}
if (PrefabUtility.GetPrefabAssetType(prefab) == PrefabAssetType.NotAPrefab)
{
return;
}
if (!_prefabs.Contains(prefab))
{
_prefabs.Add(prefab);
}
}
private void CreateChildrenForPrefabs()
{
int successCount = 0;
int failCount = 0;
string childName = _childName.Trim();
foreach (GameObject prefab in _prefabs)
{
if (prefab == null)
{
failCount++;
continue;
}
string path = AssetDatabase.GetAssetPath(prefab);
if (string.IsNullOrEmpty(path))
{
failCount++;
continue;
}
GameObject root = PrefabUtility.LoadPrefabContents(path);
try
{
if (root == null)
{
failCount++;
continue;
}
Transform existing = root.transform.Find(childName);
if (existing != null)
{
if (_replaceIfExists)
{
DestroyImmediate(existing.gameObject);
}
else
{
failCount++;
Debug.LogWarning($"Skipped `{prefab.name}` because child `{childName}` already exists.");
continue;
}
}
GameObject child = new GameObject(childName);
child.transform.SetParent(root.transform, false);
if (_copyLayerAndTagFromParent)
{
child.layer = root.layer;
child.tag = root.tag;
GameObjectUtility.SetStaticEditorFlags(
child,
GameObjectUtility.GetStaticEditorFlags(root));
}
if (_copyParentLocalScale)
{
child.transform.localScale = root.transform.localScale;
}
if (_useCustomLocalPosition)
{
child.transform.localPosition = _childLocalPosition;
}
if (_useCustomLocalRotation)
{
child.transform.localRotation = Quaternion.Euler(_childLocalEulerRotation);
}
MoveAllComponentsFromParentToChild(root, child, prefab.name);
PrefabUtility.SaveAsPrefabAsset(root, path);
successCount++;
}
catch (System.Exception ex)
{
failCount++;
Debug.LogError($"Failed processing `{prefab.name}` at path `{path}`. Error: {ex.Message}");
}
finally
{
PrefabUtility.UnloadPrefabContents(root);
}
}
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
EditorUtility.DisplayDialog(
"Batch Child Creator",
$"Done.\nSuccess: {successCount}\nFailed/Skipped: {failCount}",
"OK");
}
private static void MoveAllComponentsFromParentToChild(GameObject parent, GameObject child, string prefabName)
{
var componentsToRemove = new List<Component>();
Component[] parentComponents = parent.GetComponents<Component>();
foreach (Component component in parentComponents)
{
if (component == null || component is Transform)
{
continue;
}
bool copied = ComponentUtility.CopyComponent(component);
if (!copied)
{
Debug.LogWarning($"Could not copy component `{component.GetType().Name}` in prefab `{prefabName}`.");
continue;
}
bool pasted = ComponentUtility.PasteComponentAsNew(child);
if (!pasted)
{
Debug.LogWarning($"Could not paste component `{component.GetType().Name}` into child in prefab `{prefabName}`.");
continue;
}
componentsToRemove.Add(component);
}
foreach (Component component in componentsToRemove)
{
if (component != null)
{
Object.DestroyImmediate(component, true);
}
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 806a1a1dc1294784881ad4308e58b1e1
@@ -9,8 +9,6 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 1104867524497633025}
- component: {fileID: 5657266836829354752}
- component: {fileID: 5860347714460000696}
m_Layer: 0
m_Name: "\u63A3\u98CE\u4E4B\u77DB"
m_TagString: Untagged
@@ -26,28 +24,62 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 285550270365075957}
serializedVersion: 2
m_LocalRotation: {x: 0.86602545, y: 0, z: 0, w: 0.49999994}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Children:
- {fileID: 2165398315552083949}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &7290546735285867978
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2165398315552083949}
- component: {fileID: 2295362473509926262}
- component: {fileID: 6231640915859052576}
m_Layer: 0
m_Name: Visuals
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2165398315552083949
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7290546735285867978}
serializedVersion: 2
m_LocalRotation: {x: 0.86602545, y: 0, z: 0, w: 0.49999994}
m_LocalPosition: {x: 0, y: 1.38, z: 0.77}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1104867524497633025}
m_LocalEulerAnglesHint: {x: 120, y: 0, z: 0}
--- !u!33 &5657266836829354752
--- !u!33 &2295362473509926262
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 285550270365075957}
m_GameObject: {fileID: 7290546735285867978}
m_Mesh: {fileID: 4300000, guid: 48e6d3d2c0c1e4b20a5d8efcd18a88ff, type: 2}
--- !u!23 &5860347714460000696
--- !u!23 &6231640915859052576
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 285550270365075957}
m_GameObject: {fileID: 7290546735285867978}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
@@ -1,6 +1,6 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4784735423801820817
--- !u!1 &139938124384526895
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -8,46 +8,46 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6691621724556325783}
- component: {fileID: 7480364715263698102}
- component: {fileID: 7295731071253647233}
- component: {fileID: 2483168018957211454}
- component: {fileID: 3400312020946461207}
- component: {fileID: 8905872949688982505}
m_Layer: 0
m_Name: "\u63A3\u98CE\u4E4B\u77DB\u6210\u957F"
m_Name: Visuals
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6691621724556325783
--- !u!4 &2483168018957211454
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4784735423801820817}
m_GameObject: {fileID: 139938124384526895}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_Father: {fileID: 6691621724556325783}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &7480364715263698102
--- !u!33 &3400312020946461207
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4784735423801820817}
m_GameObject: {fileID: 139938124384526895}
m_Mesh: {fileID: 4300000, guid: 48e6d3d2c0c1e4b20a5d8efcd18a88ff, type: 2}
--- !u!23 &7295731071253647233
--- !u!23 &8905872949688982505
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4784735423801820817}
m_GameObject: {fileID: 139938124384526895}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
@@ -86,3 +86,35 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &4784735423801820817
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6691621724556325783}
m_Layer: 0
m_Name: "\u63A3\u98CE\u4E4B\u77DB\u6210\u957F"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6691621724556325783
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4784735423801820817}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2483168018957211454}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -9,8 +9,6 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 2883756883361503683}
- component: {fileID: 4741476720813344143}
- component: {fileID: 8241229427580220958}
m_Layer: 0
m_Name: "\u63A3\u98CE\u4E4B\u77DB\u6781\u54C1"
m_TagString: Untagged
@@ -30,24 +28,58 @@ Transform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Children:
- {fileID: 7071481149930127490}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &4741476720813344143
--- !u!1 &4920277037521302336
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7071481149930127490}
- component: {fileID: 4581653084234499189}
- component: {fileID: 7826282017077798854}
m_Layer: 0
m_Name: Visuals
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7071481149930127490
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4920277037521302336}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2883756883361503683}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &4581653084234499189
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1435714050475466025}
m_GameObject: {fileID: 4920277037521302336}
m_Mesh: {fileID: 4300000, guid: 48e6d3d2c0c1e4b20a5d8efcd18a88ff, type: 2}
--- !u!23 &8241229427580220958
--- !u!23 &7826282017077798854
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1435714050475466025}
m_GameObject: {fileID: 4920277037521302336}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
@@ -1,6 +1,6 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4351738867350916516
--- !u!1 &1669030948137255037
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -8,46 +8,46 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4864711436467380195}
- component: {fileID: 8602393969438771892}
- component: {fileID: 7658895765030975757}
- component: {fileID: 2010891848862894596}
- component: {fileID: 2807964204614947098}
- component: {fileID: 5034679566855837553}
m_Layer: 0
m_Name: "\u6D51\u94C1\u67AA\u6781\u54C1"
m_Name: Visuals
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4864711436467380195
--- !u!4 &2010891848862894596
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4351738867350916516}
m_GameObject: {fileID: 1669030948137255037}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalPosition: {x: 0, y: 1.098, z: -0.231}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_Father: {fileID: 4864711436467380195}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &8602393969438771892
--- !u!33 &2807964204614947098
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4351738867350916516}
m_GameObject: {fileID: 1669030948137255037}
m_Mesh: {fileID: 4300000, guid: 7d4ad266a648a4e1f866deb65272e273, type: 2}
--- !u!23 &7658895765030975757
--- !u!23 &5034679566855837553
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4351738867350916516}
m_GameObject: {fileID: 1669030948137255037}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
@@ -86,3 +86,35 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &4351738867350916516
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4864711436467380195}
m_Layer: 0
m_Name: "\u6D51\u94C1\u67AA\u6781\u54C1"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4864711436467380195
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4351738867350916516}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2010891848862894596}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}