Commit aa919a17 authored by Jérémy Lacoche's avatar Jérémy Lacoche
Browse files

New way to compute world pose with grapheditorwindow (remove old way with...

New way to compute world pose with grapheditorwindow (remove old way with classic editor), color code for trabckable and anchors
parent a3687e09
Loading
Loading
Loading
Loading
+113 −3
Original line number Diff line number Diff line
@@ -30,6 +30,9 @@ using ETSI.ARF.WorldStorage.Editor.Graph;
using ETSI.ARF.OpenAPI.WorldStorage;
using System.Collections.ObjectModel;
using UnityEngine.UIElements;
using TMPro;
using UnityEditor.Experimental.GraphView;
using System.Drawing.Drawing2D;

namespace ETSI.ARF.WorldStorage.Editor.Windows
{
@@ -250,7 +253,13 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows

                    GUILayout.EndHorizontal();
                }

                if (GUILayout.Button("Generate/Update GameObject"))
                {
                    Vector3 position ;
                    Vector3 rotation ;
                    EstimateWorldPose(worldAnchorNode, out position, out rotation);
                    GenerateAndUpdateVisual(worldAnchor.UUID.ToString(), "Anchor: " + worldAnchor.Name, position, rotation, false); // Todo : localCRS does not correspond to world pos
                }
                //
                //ELEMENT PARAMETERS
                //
@@ -259,6 +268,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows

                //uuid
                EditorGUILayout.BeginHorizontal();
                
                EditorGUILayout.LabelField("UUID ", EditorStyles.boldLabel, GUILayout.Width(50));
                if (!SaveInfo.instance.nodePositions.ContainsKey(worldAnchor.UUID.ToString()))
                {
@@ -594,6 +604,15 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                    GUILayout.EndHorizontal();
                }

                if (GUILayout.Button("Generate/Update GameObject"))
                {
                    Vector3 position ;
                    Vector3 rotation ;
                    EstimateWorldPose(trackableNode, out position, out rotation);
                    Debug.Log("Position " +position);
                    GenerateAndUpdateVisual(trackable.UUID.ToString(), "Trackable: "+ trackable.TrackableType + "  "+ trackable.Name, position, rotation, true); // Todo : localCRS does not correspond to world pos
                }

                //
                //ELEMENT PARAMETERS
                //
@@ -602,6 +621,9 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows

                //uuid
                EditorGUILayout.BeginHorizontal();

                

                EditorGUILayout.LabelField("UUID ", EditorStyles.boldLabel, GUILayout.Width(50));
                if (!SaveInfo.instance.nodePositions.ContainsKey(trackable.UUID.ToString()))
                {
@@ -1306,7 +1328,95 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
        }


        public static GameObject GenerateAndUpdateVisual(string UUID, string name, Vector3 pos, Vector3 rot, bool isTrackable /* else anchor */)
        {
            ETSI.ARF.WorldStorage.UI.Prefabs.WorldStoragePrefabs prefabs;
            prefabs = (ETSI.ARF.WorldStorage.UI.Prefabs.WorldStoragePrefabs)Resources.Load("ARFPrefabs");
            GameObject arf = GameObject.Find("ARF Visuals");
            GameObject visual = GameObject.Find(UUID);

            if (arf == null) arf = new GameObject("ARF Visuals");
            if (visual == null)
            {
                GameObject typePrefaf = prefabs.trackablePrefab ;
                if (!isTrackable)
                {
                    typePrefaf = prefabs.worldAnchorPrefab ;
                }

                visual = SceneAsset.Instantiate<GameObject>(typePrefaf, pos, Quaternion.Euler(rot), arf.transform); 
                visual.name = UUID;
            }
            else
            {
                visual.transform.SetPositionAndRotation(pos, Quaternion.Euler(rot));
            }


            visual.transform.Find("Canvas/Text").GetComponent<TextMeshProUGUI>().text = $"Name: { name }\nUUID: { UUID }";
            return visual;
        }
        
        /// Here is an approach to estimate the world pose of a node
        /// It goes map depth and multiply the matrix of each link until it finds the last node considered as the origin (0, 0 ,0)
        /// This is not the optimal method as it can create inconsistencies
        /// A better approach would be to set the world poses of the nodes and then compute the matrix of the world links
        private void EstimateWorldPose(ARFNode node, out Vector3 pos, out Vector3 rot)
        {
           // trackable
           int newNDepth = 0 ;
           Matrix4x4 mat = Matrix4x4.identity ;
           ComputePose(node, ref mat , ref newNDepth);

            Vector3 translation = mat.GetColumn(3);
            // Extract Rotation
            Quaternion rotation = Quaternion.LookRotation(
            mat.GetColumn(2),
            mat.GetColumn(1)
             );

            pos = translation;
            rot = rotation.eulerAngles;
        }

        private void ComputePose(ARFNode node, ref Matrix4x4 mat , ref int depth)
        {
            int maxDepth = 0 ;

            foreach(Edge edge in node.portIn.connections)
            {
                ARFEdgeLink arfEdge = (ARFEdgeLink) edge ;
                if (arfEdge !=null)
                {
                    WorldLink link =  arfEdge.worldLink ;
                    ARFNode newNode = (ARFNode) arfEdge.output.node ;
                    int currentDepth = 1 ;
                    ComputePose(newNode, ref mat ,ref currentDepth);
                    if (currentDepth > maxDepth)
                    {
                        Matrix4x4 newMat = GetMatrix(link.Transform); 
                        mat = mat * newMat ;
                        ARFNodeTrackable trackNode =  newNode as ARFNodeTrackable;
                        ARFNodeWorldAnchor worldNode = newNode as ARFNodeWorldAnchor;
                        maxDepth = currentDepth ;
                    }
                }
            }
            depth += maxDepth ;
        }

        private Matrix4x4 GetMatrix(Transform3D tr)
        {
             Matrix4x4 matrix = new Matrix4x4();

            for (int row = 0; row < 4; row++)
            {
                for (int col = 0; col < 4; col++)
                {
                    matrix[row, col] = tr[row * 4 + col];
                }
            }
            return matrix ;
        }
    }
}
 No newline at end of file
+2 −0
Original line number Diff line number Diff line
@@ -198,10 +198,12 @@ namespace ETSI.ARF.WorldStorage.UI
            GUI.backgroundColor = ori;

            GUI.backgroundColor = WorldStorageWindow.arfColors[5];
            /* wrong way to comptute world pos : remove for now
            if (GUILayout.Button("Generate/Update GameObject"))
            {
                GenerateAndUpdateVisual(UUID, customName, localCRS_pos, localCRS_rot);
            }
            */
            GUI.backgroundColor = ori;
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space();
+3 −2
Original line number Diff line number Diff line
@@ -307,10 +307,11 @@ namespace ETSI.ARF.WorldStorage.UI
            GUI.backgroundColor = ori;

            GUI.backgroundColor = WorldStorageWindow.arfColors[5];
           /* wrong way to comptute world pos : remove for now 
           if (GUILayout.Button("Generate/Update GameObject"))
            {
                GenerateAndUpdateVisual(UUID, FROM, TO);
            }
            }*/
            GUI.backgroundColor = ori;
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space();
+48 −14
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1239500166128132140}
  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}
@@ -31,7 +32,6 @@ Transform:
  - {fileID: 4532241398218188797}
  - {fileID: 33536572583887604}
  m_Father: {fileID: 0}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1389085265039543899
GameObject:
@@ -59,13 +59,13 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1389085265039543899}
  serializedVersion: 2
  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
  m_LocalPosition: {x: 0, y: 0.1, z: 0}
  m_LocalScale: {x: 0.020000001, y: 0.05, z: 0.020000001}
  m_ConstrainProportionsScale: 0
  m_Children: []
  m_Father: {fileID: 4532241398218188797}
  m_RootOrder: 2
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &8839914115087242523
MeshFilter:
@@ -125,8 +125,17 @@ CapsuleCollider:
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1389085265039543899}
  m_Material: {fileID: 0}
  m_IncludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_ExcludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_LayerOverridePriority: 0
  m_IsTrigger: 0
  m_ProvidesContacts: 0
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.5000001
  m_Height: 2
  m_Direction: 1
@@ -157,13 +166,13 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1687101261560852242}
  serializedVersion: 2
  m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}
  m_LocalPosition: {x: 0, y: 0, z: 0.1}
  m_LocalScale: {x: 0.020000001, y: 0.05000001, z: 0.019999998}
  m_ConstrainProportionsScale: 0
  m_Children: []
  m_Father: {fileID: 4532241398218188797}
  m_RootOrder: 3
  m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!33 &6822513350628080072
MeshFilter:
@@ -223,8 +232,17 @@ CapsuleCollider:
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1687101261560852242}
  m_Material: {fileID: 0}
  m_IncludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_ExcludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_LayerOverridePriority: 0
  m_IsTrigger: 0
  m_ProvidesContacts: 0
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.5000001
  m_Height: 2
  m_Direction: 1
@@ -255,13 +273,13 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1823986580348874447}
  serializedVersion: 2
  m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068}
  m_LocalPosition: {x: 0.1, y: 0, z: 0}
  m_LocalScale: {x: 0.019999998, y: 0.05000001, z: 0.020000001}
  m_ConstrainProportionsScale: 0
  m_Children: []
  m_Father: {fileID: 4532241398218188797}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90}
--- !u!33 &5158975352210721371
MeshFilter:
@@ -321,8 +339,17 @@ CapsuleCollider:
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1823986580348874447}
  m_Material: {fileID: 0}
  m_IncludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_ExcludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_LayerOverridePriority: 0
  m_IsTrigger: 0
  m_ProvidesContacts: 0
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.5000001
  m_Height: 2
  m_Direction: 1
@@ -358,7 +385,6 @@ RectTransform:
  m_ConstrainProportionsScale: 1
  m_Children: []
  m_Father: {fileID: 33536572583887604}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
@@ -404,8 +430,8 @@ MonoBehaviour:
  m_fontMaterials: []
  m_fontColor32:
    serializedVersion: 2
    rgba: 4294967295
  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
    rgba: 4278245631
  m_fontColor: {r: 1, g: 0.84843576, b: 0, a: 1}
  m_enableVertexGradient: 0
  m_colorMode: 3
  m_fontColorGradient:
@@ -495,7 +521,6 @@ RectTransform:
  m_ConstrainProportionsScale: 1
  m_Children: []
  m_Father: {fileID: 33536572583887604}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
@@ -539,8 +564,8 @@ MonoBehaviour:
  m_fontMaterials: []
  m_fontColor32:
    serializedVersion: 2
    rgba: 4294967295
  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
    rgba: 4278245631
  m_fontColor: {r: 1, g: 0.84843576, b: 0, a: 1}
  m_enableVertexGradient: 0
  m_colorMode: 3
  m_fontColorGradient:
@@ -622,6 +647,7 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8182691244837652424}
  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}
@@ -632,7 +658,6 @@ Transform:
  - {fileID: 788171341007892784}
  - {fileID: 377487265314945344}
  m_Father: {fileID: 1814829793678878270}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8225488253825437761
GameObject:
@@ -660,13 +685,13 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8225488253825437761}
  serializedVersion: 2
  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
  m_ConstrainProportionsScale: 1
  m_Children: []
  m_Father: {fileID: 4532241398218188797}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &8225488253825437764
MeshFilter:
@@ -726,9 +751,17 @@ BoxCollider:
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8225488253825437761}
  m_Material: {fileID: 0}
  m_IncludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_ExcludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_LayerOverridePriority: 0
  m_IsTrigger: 0
  m_ProvidesContacts: 0
  m_Enabled: 1
  serializedVersion: 2
  serializedVersion: 3
  m_Size: {x: 1, y: 1, z: 1}
  m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &8292506020522815698
@@ -765,7 +798,6 @@ RectTransform:
  - {fileID: 8156859587808685068}
  - {fileID: 2888022835692577799}
  m_Father: {fileID: 1814829793678878270}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0, y: 0}
  m_AnchorMax: {x: 0, y: 0}
@@ -789,7 +821,9 @@ Canvas:
  m_OverrideSorting: 0
  m_OverridePixelPerfect: 0
  m_SortingBucketNormalizedSize: 0
  m_VertexColorAlwaysGammaSpace: 0
  m_AdditionalShaderChannelsFlag: 25
  m_UpdateRectTransformForStandalone: 0
  m_SortingLayerID: 0
  m_SortingOrder: 0
  m_TargetDisplay: 0
+48 −14
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ RectTransform:
  m_ConstrainProportionsScale: 1
  m_Children: []
  m_Father: {fileID: 1497700213276983046}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
@@ -75,8 +74,8 @@ MonoBehaviour:
  m_fontMaterials: []
  m_fontColor32:
    serializedVersion: 2
    rgba: 4294967295
  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
    rgba: 4278190335
  m_fontColor: {r: 1, g: 0, b: 0, a: 1}
  m_enableVertexGradient: 0
  m_colorMode: 3
  m_fontColorGradient:
@@ -158,6 +157,7 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1525499792725534490}
  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}
@@ -168,7 +168,6 @@ Transform:
  - {fileID: 7950346510699467234}
  - {fileID: 7032495084649945490}
  m_Father: {fileID: 9046317383172441836}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1622323168209334419
GameObject:
@@ -196,13 +195,13 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1622323168209334419}
  serializedVersion: 2
  m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
  m_ConstrainProportionsScale: 1
  m_Children: []
  m_Father: {fileID: 6503384942250313519}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
--- !u!33 &1622323168209334422
MeshFilter:
@@ -262,9 +261,17 @@ BoxCollider:
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1622323168209334419}
  m_Material: {fileID: 0}
  m_IncludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_ExcludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_LayerOverridePriority: 0
  m_IsTrigger: 0
  m_ProvidesContacts: 0
  m_Enabled: 1
  serializedVersion: 2
  serializedVersion: 3
  m_Size: {x: 1, y: 1, z: 1}
  m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &4529171925897838154
@@ -298,7 +305,6 @@ RectTransform:
  m_ConstrainProportionsScale: 1
  m_Children: []
  m_Father: {fileID: 1497700213276983046}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
@@ -344,8 +350,8 @@ MonoBehaviour:
  m_fontMaterials: []
  m_fontColor32:
    serializedVersion: 2
    rgba: 4294967295
  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
    rgba: 4278190335
  m_fontColor: {r: 1, g: 0, b: 0, a: 1}
  m_enableVertexGradient: 0
  m_colorMode: 3
  m_fontColorGradient:
@@ -430,13 +436,13 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8344222362070912960}
  serializedVersion: 2
  m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}
  m_LocalPosition: {x: 0, y: 0, z: 0.1}
  m_LocalScale: {x: 0.020000001, y: 0.05000001, z: 0.019999998}
  m_ConstrainProportionsScale: 0
  m_Children: []
  m_Father: {fileID: 6503384942250313519}
  m_RootOrder: 3
  m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!33 &4182441150992537882
MeshFilter:
@@ -496,8 +502,17 @@ CapsuleCollider:
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8344222362070912960}
  m_Material: {fileID: 0}
  m_IncludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_ExcludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_LayerOverridePriority: 0
  m_IsTrigger: 0
  m_ProvidesContacts: 0
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.5000001
  m_Height: 2
  m_Direction: 1
@@ -525,6 +540,7 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8473238451594182910}
  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}
@@ -533,7 +549,6 @@ Transform:
  - {fileID: 6503384942250313519}
  - {fileID: 1497700213276983046}
  m_Father: {fileID: 0}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8638588117357457033
GameObject:
@@ -561,13 +576,13 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8638588117357457033}
  serializedVersion: 2
  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
  m_LocalPosition: {x: 0, y: 0.1, z: 0}
  m_LocalScale: {x: 0.020000001, y: 0.05, z: 0.020000001}
  m_ConstrainProportionsScale: 0
  m_Children: []
  m_Father: {fileID: 6503384942250313519}
  m_RootOrder: 2
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &2164195824166614473
MeshFilter:
@@ -627,8 +642,17 @@ CapsuleCollider:
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8638588117357457033}
  m_Material: {fileID: 0}
  m_IncludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_ExcludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_LayerOverridePriority: 0
  m_IsTrigger: 0
  m_ProvidesContacts: 0
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.5000001
  m_Height: 2
  m_Direction: 1
@@ -667,7 +691,6 @@ RectTransform:
  - {fileID: 4263110725940009300}
  - {fileID: 2044833251513730170}
  m_Father: {fileID: 9046317383172441836}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0, y: 0}
  m_AnchorMax: {x: 0, y: 0}
@@ -691,7 +714,9 @@ Canvas:
  m_OverrideSorting: 0
  m_OverridePixelPerfect: 0
  m_SortingBucketNormalizedSize: 0
  m_VertexColorAlwaysGammaSpace: 0
  m_AdditionalShaderChannelsFlag: 25
  m_UpdateRectTransformForStandalone: 0
  m_SortingLayerID: 0
  m_SortingOrder: 0
  m_TargetDisplay: 0
@@ -761,13 +786,13 @@ Transform:
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 9076285480843021853}
  serializedVersion: 2
  m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068}
  m_LocalPosition: {x: 0.1, y: 0, z: 0}
  m_LocalScale: {x: 0.019999998, y: 0.05000001, z: 0.020000001}
  m_ConstrainProportionsScale: 0
  m_Children: []
  m_Father: {fileID: 6503384942250313519}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90}
--- !u!33 &2539246307318246025
MeshFilter:
@@ -827,8 +852,17 @@ CapsuleCollider:
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 9076285480843021853}
  m_Material: {fileID: 0}
  m_IncludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_ExcludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_LayerOverridePriority: 0
  m_IsTrigger: 0
  m_ProvidesContacts: 0
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.5000001
  m_Height: 2
  m_Direction: 1
Loading