From 76bc665337e914ad126f6d0d3c03b2cf77c81730 Mon Sep 17 00:00:00 2001 From: SOOBEEN HAN Date: Fri, 24 Oct 2025 14:36:33 +0900 Subject: [PATCH] =?UTF-8?q?=20TCP=20=EC=A2=8C=ED=91=9C=20=ED=8C=A8?= =?UTF-8?q?=EB=84=90=20=ED=91=9C=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Resources/Images/TCP_bg.png | Bin 0 -> 43999 bytes Assets/Resources/Images/TCP_bg.png.meta | 143 ++ Assets/Resources/Images/button_bg1.png | Bin 0 -> 8916 bytes Assets/Resources/Images/button_bg1.png.meta | 143 ++ Assets/Resources/Images/point marker.png | Bin 6187 -> 3005 bytes Assets/Resources/Images/point marker.png.meta | 2 +- Assets/Scenes/HDRobo_Main.unity | 1688 ++++++++++++++++- Assets/Scripts/AppManager.cs | 6 +- Assets/Scripts/Model/ProgramModel.cs | 86 +- Assets/Scripts/Presenter/ProgramPresenter.cs | 16 +- Assets/Scripts/View/ProgramView.cs | 1 + Assets/Scripts/View/TCPView.cs | 33 + Assets/Scripts/View/TCPView.cs.meta | 2 + 13 files changed, 2093 insertions(+), 27 deletions(-) create mode 100644 Assets/Resources/Images/TCP_bg.png create mode 100644 Assets/Resources/Images/TCP_bg.png.meta create mode 100644 Assets/Resources/Images/button_bg1.png create mode 100644 Assets/Resources/Images/button_bg1.png.meta create mode 100644 Assets/Scripts/View/TCPView.cs create mode 100644 Assets/Scripts/View/TCPView.cs.meta diff --git a/Assets/Resources/Images/TCP_bg.png b/Assets/Resources/Images/TCP_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d975ec0d07b523228d110be6f9ed744f34be2bb2 GIT binary patch literal 43999 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 JPDHLkV1hHF0-OK< diff --git a/Assets/Resources/Images/point marker.png.meta b/Assets/Resources/Images/point marker.png.meta index 4d39dc6..ab1195f 100644 --- a/Assets/Resources/Images/point marker.png.meta +++ b/Assets/Resources/Images/point marker.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1d5e6c822c487ba488842f217edee286 +guid: a4e764ee05645514cab2cf0636654f5f TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Assets/Scenes/HDRobo_Main.unity b/Assets/Scenes/HDRobo_Main.unity index de193cc..7d9f560 100644 --- a/Assets/Scenes/HDRobo_Main.unity +++ b/Assets/Scenes/HDRobo_Main.unity @@ -857,8 +857,8 @@ MonoBehaviour: m_fontMaterials: [] m_fontColor32: serializedVersion: 2 - rgba: 4281479730 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} m_enableVertexGradient: 0 m_colorMode: 3 m_fontColorGradient: @@ -1940,6 +1940,142 @@ Transform: m_CorrespondingSourceObject: {fileID: 1379559849778724361, guid: 68b9dfd21ae6a0e41a7520acf29bc28e, type: 3} m_PrefabInstance: {fileID: 124466898} m_PrefabAsset: {fileID: 0} +--- !u!1 &126485250 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 126485251} + - component: {fileID: 126485253} + - component: {fileID: 126485252} + m_Layer: 5 + m_Name: Text(TMP)_RZ + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &126485251 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 126485250} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.00000013504177} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.7199998, y: -1.2770002} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &126485252 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 126485250} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: RZ + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278248960 + m_fontColor: {r: 0, g: 0.9019608, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &126485253 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 126485250} + m_CullTransparentMesh: 1 --- !u!1001 &128205795 PrefabInstance: m_ObjectHideFlags: 0 @@ -2797,6 +2933,142 @@ Transform: m_CorrespondingSourceObject: {fileID: 3086840681278354231, guid: c0ff04569978f7c449990e62ba9ed94b, type: 3} m_PrefabInstance: {fileID: 250337474} m_PrefabAsset: {fileID: 0} +--- !u!1 &256866022 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 256866023} + - component: {fileID: 256866025} + - component: {fileID: 256866024} + m_Layer: 5 + m_Name: Text(TMP)_X + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &256866023 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256866022} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.72, y: -0.7770001} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &256866024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256866022} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: X + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278248960 + m_fontColor: {r: 0, g: 0.9019608, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &256866025 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256866022} + m_CullTransparentMesh: 1 --- !u!1001 &256976296 PrefabInstance: m_ObjectHideFlags: 0 @@ -5533,6 +5805,142 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &485836791 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 485836792} + - component: {fileID: 485836794} + - component: {fileID: 485836793} + m_Layer: 5 + m_Name: Text(TMP)_RX_input + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &485836792 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485836791} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.00000013504177} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.9499998, y: -1.0770001} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &485836793 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485836791} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &485836794 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485836791} + m_CullTransparentMesh: 1 --- !u!1 &486445035 GameObject: m_ObjectHideFlags: 0 @@ -6198,6 +6606,142 @@ Transform: m_CorrespondingSourceObject: {fileID: 4542286524079617657, guid: 9649d1697e9f70c4b95c575d0be726f3, type: 3} m_PrefabInstance: {fileID: 522289963} m_PrefabAsset: {fileID: 0} +--- !u!1 &531180350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 531180351} + - component: {fileID: 531180353} + - component: {fileID: 531180352} + m_Layer: 5 + m_Name: Text(TMP)_Z + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &531180351 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531180350} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.00000013504177} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.7199998, y: -0.9770001} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &531180352 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531180350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Z + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278248960 + m_fontColor: {r: 0, g: 0.9019608, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &531180353 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531180350} + m_CullTransparentMesh: 1 --- !u!1001 &538485951 PrefabInstance: m_ObjectHideFlags: 0 @@ -6868,7 +7412,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &593598035 RectTransform: m_ObjectHideFlags: 0 @@ -10266,6 +10810,142 @@ Transform: m_CorrespondingSourceObject: {fileID: 2327615195304194689, guid: fd5d9e17acaad7b489128938cac279bc, type: 3} m_PrefabInstance: {fileID: 815496747} m_PrefabAsset: {fileID: 0} +--- !u!1 &821550448 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 821550449} + - component: {fileID: 821550451} + - component: {fileID: 821550450} + m_Layer: 5 + m_Name: Text(TMP)_RX + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &821550449 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 821550448} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.00000013504177} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.7199998, y: -1.0770001} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &821550450 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 821550448} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: RX + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278248960 + m_fontColor: {r: 0, g: 0.9019608, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &821550451 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 821550448} + m_CullTransparentMesh: 1 --- !u!1001 &822765100 PrefabInstance: m_ObjectHideFlags: 0 @@ -10539,6 +11219,142 @@ Transform: m_CorrespondingSourceObject: {fileID: 5163148701440001141, guid: efbf0a11b076d5741b85cb55d2f436e5, type: 3} m_PrefabInstance: {fileID: 831515934} m_PrefabAsset: {fileID: 0} +--- !u!1 &834795797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 834795798} + - component: {fileID: 834795800} + - component: {fileID: 834795799} + m_Layer: 5 + m_Name: Text(TMP)_Z_input + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &834795798 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 834795797} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.00000013504177} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.9499998, y: -0.9770001} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &834795799 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 834795797} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &834795800 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 834795797} + m_CullTransparentMesh: 1 --- !u!1 &837739950 GameObject: m_ObjectHideFlags: 0 @@ -11852,6 +12668,142 @@ Transform: - {fileID: 1280997979} m_Father: {fileID: 1155787432} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &974987083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 974987084} + - component: {fileID: 974987086} + - component: {fileID: 974987085} + m_Layer: 5 + m_Name: Text(TMP)_Y_input + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &974987084 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974987083} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.00000013504177} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.9499998, y: -0.8770001} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &974987085 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974987083} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &974987086 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974987083} + m_CullTransparentMesh: 1 --- !u!1001 &986431877 PrefabInstance: m_ObjectHideFlags: 0 @@ -12434,7 +13386,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 79deac728869c20499a93958c23da1a3, type: 3} + m_Sprite: {fileID: 21300000, guid: 69776f1a1b6df8c4e9f3a4d4f7942cf9, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -13115,6 +14067,142 @@ Transform: m_CorrespondingSourceObject: {fileID: 4059515807982710430, guid: 9bcfc22b0f4423943869542124166029, type: 3} m_PrefabInstance: {fileID: 1095978737} m_PrefabAsset: {fileID: 0} +--- !u!1 &1118878339 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1118878340} + - component: {fileID: 1118878342} + - component: {fileID: 1118878341} + m_Layer: 5 + m_Name: Text(TMP)_RY + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1118878340 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1118878339} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.00000013504177} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.7199998, y: -1.177} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1118878341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1118878339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: RY + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278248960 + m_fontColor: {r: 0, g: 0.9019608, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1118878342 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1118878339} + m_CullTransparentMesh: 1 --- !u!1 &1119502345 GameObject: m_ObjectHideFlags: 0 @@ -14571,6 +15659,142 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1216385820} m_CullTransparentMesh: 1 +--- !u!1 &1223469530 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1223469531} + - component: {fileID: 1223469533} + - component: {fileID: 1223469532} + m_Layer: 5 + m_Name: Text(TMP)_Y + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1223469531 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1223469530} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.00000013504177} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.7199998, y: -0.8770001} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1223469532 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1223469530} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Y + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278248960 + m_fontColor: {r: 0, g: 0.9019608, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1223469533 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1223469530} + m_CullTransparentMesh: 1 --- !u!1001 &1224318211 PrefabInstance: m_ObjectHideFlags: 0 @@ -15388,6 +16612,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: view: {fileID: 1243479632} + tcpView: {fileID: 1456747455} robotController: {fileID: 806304512143720359} motorStatePollInterval: 1 --- !u!4 &1299890571 @@ -16689,7 +17914,7 @@ RectTransform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1408958899} m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: 0, y: 0, z: -0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -16697,7 +17922,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -3.59, y: -0.59} + m_AnchoredPosition: {x: -3.65, y: -0.609} m_SizeDelta: {x: 8, y: 2} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1408958901 @@ -16747,8 +17972,8 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 0.06 - m_fontSizeBase: 0.06 + m_fontSize: 0.08 + m_fontSizeBase: 0.08 m_fontWeight: 400 m_enableAutoSizing: 0 m_fontSizeMin: 18 @@ -17930,6 +19155,7 @@ GameObject: - component: {fileID: 1456747452} - component: {fileID: 1456747454} - component: {fileID: 1456747453} + - component: {fileID: 1456747455} m_Layer: 5 m_Name: Panel_TCP m_TagString: Untagged @@ -17950,6 +19176,18 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1408958900} + - {fileID: 256866023} + - {fileID: 1223469531} + - {fileID: 531180351} + - {fileID: 821550449} + - {fileID: 1118878340} + - {fileID: 126485251} + - {fileID: 1463749074} + - {fileID: 974987084} + - {fileID: 834795798} + - {fileID: 485836792} + - {fileID: 1669820732} + - {fileID: 1714274130} - {fileID: 593598035} m_Father: {fileID: 2084353335} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -17971,14 +19209,14 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.92941177} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: ccbd5037a1e2a224f9ab0e518dc0cc37, type: 3} + m_Sprite: {fileID: 21300000, guid: 4613896ebca42224aaf4fdd322c6f3e2, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -17996,6 +19234,24 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1456747451} m_CullTransparentMesh: 1 +--- !u!114 &1456747455 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1456747451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6f5682d5897289846962ca66ba85af5a, type: 3} + m_Name: + m_EditorClassIdentifier: + x: {fileID: 1463749075} + Y: {fileID: 974987085} + Z: {fileID: 834795799} + Rx: {fileID: 485836793} + Ry: {fileID: 1669820733} + Rz: {fileID: 1714274131} --- !u!1 &1457055926 GameObject: m_ObjectHideFlags: 0 @@ -18042,6 +19298,142 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 19.119972} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1463749073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1463749074} + - component: {fileID: 1463749076} + - component: {fileID: 1463749075} + m_Layer: 5 + m_Name: Text(TMP)_X_input + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1463749074 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1463749073} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.00000013504177} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.9499998, y: -0.7770001} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1463749075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1463749073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1463749076 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1463749073} + m_CullTransparentMesh: 1 --- !u!1 &1465393238 GameObject: m_ObjectHideFlags: 0 @@ -20789,7 +22181,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: f495e2e2d5023a34381185fc0f6beb19, type: 3} + m_Sprite: {fileID: 21300000, guid: 69776f1a1b6df8c4e9f3a4d4f7942cf9, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -21150,6 +22542,142 @@ Transform: m_CorrespondingSourceObject: {fileID: 5963453192452930084, guid: 2bbf452482df06b43874a7713a3a1c8a, type: 3} m_PrefabInstance: {fileID: 1660759741} m_PrefabAsset: {fileID: 0} +--- !u!1 &1669820731 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1669820732} + - component: {fileID: 1669820734} + - component: {fileID: 1669820733} + m_Layer: 5 + m_Name: Text(TMP)_RY_input + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1669820732 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1669820731} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.00000013504177} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.9499998, y: -1.177} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1669820733 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1669820731} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1669820734 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1669820731} + m_CullTransparentMesh: 1 --- !u!1 &1674389728 GameObject: m_ObjectHideFlags: 0 @@ -21621,6 +23149,142 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1710825583} m_CullTransparentMesh: 1 +--- !u!1 &1714274129 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1714274130} + - component: {fileID: 1714274132} + - component: {fileID: 1714274131} + m_Layer: 5 + m_Name: Text(TMP)_RZ_input + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1714274130 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714274129} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.00000013504177} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1456747452} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -3.9499998, y: -1.2770002} + m_SizeDelta: {x: 8, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1714274131 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714274129} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_sharedMaterial: {fileID: 4756777559880485875, guid: eee44b2fb758cfd48a3c3f0236ba05b5, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 0.06 + m_fontSizeBase: 0.06 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1714274132 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714274129} + m_CullTransparentMesh: 1 --- !u!1001 &1734554058 PrefabInstance: m_ObjectHideFlags: 0 @@ -26565,8 +28229,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c12f4ab377ddfdc46820089b240eaf27, type: 3} m_Name: m_EditorClassIdentifier: - robotId: robot1 - isLocallyControlled: 0 motorStatusIndicator1: {fileID: 1475297475771640280} motorStatusIndicator2: {fileID: 2476781507827223150} indicatorMaterial1: {fileID: 2100000, guid: 8429ea8a04d5dd844875dc07c5f6c06b, type: 2} diff --git a/Assets/Scripts/AppManager.cs b/Assets/Scripts/AppManager.cs index e3d9c0c..c711236 100644 --- a/Assets/Scripts/AppManager.cs +++ b/Assets/Scripts/AppManager.cs @@ -7,6 +7,7 @@ using UnityEngine; public class AppManager : MonoBehaviour { [SerializeField] private ProgramView view; + [SerializeField] private TCPView tcpView; [SerializeField] private RobotController robotController; [SerializeField] private float motorStatePollInterval = 1.0f; ProgramPresenter presenter; @@ -19,10 +20,11 @@ public class AppManager : MonoBehaviour { LoadConfig(); - ProgramModel model = new ProgramModel(hostip, tcpPort); + ProgramModel model = new ProgramModel(hostip, tcpPort, udpPort); await model.InitializeAsync(); + _ = model.GetTCPAsync(); - presenter = new ProgramPresenter(model, view); + presenter = new ProgramPresenter(model, view, tcpView); presenter.RegisterControlledRobot(robotController); await presenter.UpdateMotorStateAsync(); diff --git a/Assets/Scripts/Model/ProgramModel.cs b/Assets/Scripts/Model/ProgramModel.cs index cba6c70..dd6c8fa 100644 --- a/Assets/Scripts/Model/ProgramModel.cs +++ b/Assets/Scripts/Model/ProgramModel.cs @@ -11,6 +11,7 @@ using System.Threading; using System.Threading.Tasks; using UdpClientLib; using UnityEngine; +using static DirectorySyncer; public interface IProgramModel { @@ -19,26 +20,57 @@ public interface IProgramModel public class ProgramModel : IProgramModel { - private string baseUrl; + private string tcpBaseUrl; + private string udpBaseUrl; HttpClient httpClient = new HttpClient(); + private SingleUdpClient udpClientForHttp; + public UdpClientManager manager = new UdpClientManager(); private List allProgramsCache = new List(); public RobotProgram CurrentProgram { get; private set; } - public ProgramModel(string hostip, int tcpPort) + private RobotData robotData; + + private readonly object lockObject = new object(); + private bool hasNewData; + + public bool isUdpLoopRunning = false; + + public ProgramModel(string hostip, int tcpPort, int udpPort) { - baseUrl = $"http://{hostip}:{tcpPort}"; + tcpBaseUrl = $"http://{hostip}:{tcpPort}"; + udpBaseUrl = $"http://{hostip}:{udpPort}"; + udpClientForHttp = manager.AddClient("Udp-client2", hostip, udpPort); } public async Task InitializeAsync() { await LoadAllPrograms(); + hasNewData = false; + isUdpLoopRunning = true; return; } + public bool IsNewDataAvailable() + { + lock (lockObject) + { + return hasNewData; + } + } + + public RobotData GetLatestRobotData() + { + lock (lockObject) + { + hasNewData = false; // µ¥ÀÌÅ͸¦ ÀоúÀ¸¹Ç·Î Ç÷¡±×¸¦ ³»¸² + return robotData; // (µ¥ÀÌÅÍ º¹»çº»À» ¹ÝȯÇÏ´Â °ÍÀÌ ´õ ¾ÈÀüÇÒ ¼ö ÀÖÀ½) + } + } + public async Task CheckProgramExists(string jobProgramName) { - string requestUri = $"{baseUrl}/file_manager/file_exist?pathname=project/jobs/{jobProgramName}"; + string requestUri = $"{tcpBaseUrl}/file_manager/file_exist?pathname=project/jobs/{jobProgramName}"; HttpResponseMessage result = await httpClient.GetAsync(requestUri); string jsonResponse = await result.Content.ReadAsStringAsync(); @@ -82,7 +114,7 @@ public class ProgramModel : IProgramModel string jsonString = JsonConvert.SerializeObject(newJob); HttpContent jsonPayload = new StringContent(jsonString, Encoding.UTF8, "application/json"); - string requestUri = $"{baseUrl}/project/jobs/create_job"; + string requestUri = $"{tcpBaseUrl}/project/jobs/create_job"; try { HttpResponseMessage result = await httpClient.PostAsync(requestUri, jsonPayload); @@ -103,7 +135,7 @@ public class ProgramModel : IProgramModel private async Task GetRobotModelNameAsync() { - string requestUri = $"{baseUrl}/project/rgen"; + string requestUri = $"{tcpBaseUrl}/project/rgen"; HttpResponseMessage result = await httpClient.GetAsync(requestUri); string jsonResponse = await result.Content.ReadAsStringAsync(); @@ -122,7 +154,7 @@ public class ProgramModel : IProgramModel public async Task GetRobotMotorStateAsync() { - string requestUri = $"{baseUrl}/project/rgen"; + string requestUri = $"{tcpBaseUrl}/project/rgen"; HttpResponseMessage result = await httpClient.GetAsync(requestUri); string jsonResponse = await result.Content.ReadAsStringAsync(); @@ -140,9 +172,38 @@ public class ProgramModel : IProgramModel } } + public async Task GetTCPAsync() + { + while (isUdpLoopRunning) + { + try + { + //string requestUri = $"{udpBaseUrl}/project/robot/po_cur"; + string requestUri = $"{tcpBaseUrl}/project/robot/po_cur"; + + HttpResponseMessage result = await httpClient.GetAsync(requestUri); + string jsonResponse = await result.Content.ReadAsStringAsync(); + + var tempRobotData = JsonConvert.DeserializeObject(jsonResponse, new JsonSerializerSettings { CheckAdditionalContent = false }); + + lock (lockObject) + { + robotData = tempRobotData; + hasNewData = true; + } + await Task.Delay(50); + } + catch (System.Exception e) + { + Debug.Log(e); + await Task.Delay(1000); // ¿¡·¯ ½Ã ´õ ±ä ´ë±â + } + } + } + public async Task LoadProgram(string programId) { - string requestUri = $"{baseUrl}/file_manager/files?pathname=project/jobs/{programId}&common"; + string requestUri = $"{tcpBaseUrl}/file_manager/files?pathname=project/jobs/{programId}&common"; HttpResponseMessage result = await httpClient.GetAsync(requestUri); string rawTextContent = await result.Content.ReadAsStringAsync(); @@ -153,7 +214,7 @@ public class ProgramModel : IProgramModel } CurrentProgram = new RobotProgram(programId, rawTextContent); - + return true; } @@ -165,7 +226,7 @@ public class ProgramModel : IProgramModel try { - HttpResponseMessage result = await httpClient.GetAsync($"{baseUrl}/project/jobs_info"); + HttpResponseMessage result = await httpClient.GetAsync($"{tcpBaseUrl}/project/jobs_info"); jsonResponse = await result.Content.ReadAsStringAsync(); wrappedJson = $"{{\"jobs\":{jsonResponse}}}"; @@ -199,4 +260,9 @@ public class ProgramModel : IProgramModel } return ids; } + + void OnDestroy() + { + isUdpLoopRunning = false; + } } \ No newline at end of file diff --git a/Assets/Scripts/Presenter/ProgramPresenter.cs b/Assets/Scripts/Presenter/ProgramPresenter.cs index 3c9a28c..adfd39b 100644 --- a/Assets/Scripts/Presenter/ProgramPresenter.cs +++ b/Assets/Scripts/Presenter/ProgramPresenter.cs @@ -7,14 +7,16 @@ public class ProgramPresenter { private ProgramModel model; private IProgramView view; + private TCPView tcpView; private RobotController controlledRobot; private string _programId; private bool lastKnownMotorState = false; - public ProgramPresenter(ProgramModel model, IProgramView view) + public ProgramPresenter(ProgramModel model, IProgramView view, TCPView tcpView) { this.model = model; this.view = view; + this.tcpView = tcpView; this.view.OnCreateProgramClicked += async (id) => await HandleCreateProgram(id); this.view.OnLoadProgramListRequested += HandleLoadProgramList; @@ -22,6 +24,7 @@ public class ProgramPresenter this.view.OnOpenProgramClicked += async () => await HandleOpenProgram(); this.view.OnSaveClicked += HandleSaveProgram; this.view.OnAddPointClicked += HandleAddPoint; + this.tcpView.OnTCPupdateRequested += HandleTCPViewUpdate; } public void RegisterControlledRobot(RobotController robot) @@ -59,6 +62,7 @@ public class ProgramPresenter } } + private async Task HandleCreateProgram(string programId) { if (await model.CreateNewProgram(programId)) @@ -113,6 +117,15 @@ public class ProgramPresenter //view.DisplayProgram(model.CurrentProgram); } + private void HandleTCPViewUpdate() + { + if (model.IsNewDataAvailable()) + { + RobotData data = model.GetLatestRobotData(); + + tcpView.SetCoordinates(data); + } + } private void Destroy() { this.view.OnCreateProgramClicked -= async (id) => await HandleCreateProgram(id); @@ -121,5 +134,6 @@ public class ProgramPresenter this.view.OnOpenProgramClicked -= async () => await HandleOpenProgram(); this.view.OnSaveClicked -= HandleSaveProgram; this.view.OnAddPointClicked -= HandleAddPoint; + this.tcpView.OnTCPupdateRequested -= HandleTCPViewUpdate; } } \ No newline at end of file diff --git a/Assets/Scripts/View/ProgramView.cs b/Assets/Scripts/View/ProgramView.cs index 33c4225..ee20207 100644 --- a/Assets/Scripts/View/ProgramView.cs +++ b/Assets/Scripts/View/ProgramView.cs @@ -52,6 +52,7 @@ public class ProgramView : MonoBehaviour, IProgramView public event Action OnSaveClicked; public event Action OnAddPointClicked; + void Start() { loadProgramButton.onClick.AddListener(() => OnLoadProgramListRequested?.Invoke()); diff --git a/Assets/Scripts/View/TCPView.cs b/Assets/Scripts/View/TCPView.cs new file mode 100644 index 0000000..92f213c --- /dev/null +++ b/Assets/Scripts/View/TCPView.cs @@ -0,0 +1,33 @@ +using TMPro; +using UnityEngine; +using System; + +public class TCPView : MonoBehaviour +{ + public event Action OnTCPupdateRequested; + + // --- TCP ÁÂÇ¥µé --- + [SerializeField] private TextMeshProUGUI x; + [SerializeField] private TextMeshProUGUI Y; + [SerializeField] private TextMeshProUGUI Z; + [SerializeField] private TextMeshProUGUI Rx; + [SerializeField] private TextMeshProUGUI Ry; + [SerializeField] private TextMeshProUGUI Rz; + + void Update() + { + OnTCPupdateRequested?.Invoke(); + } + + public void SetCoordinates(RobotData data) + { + if (data == null) return; + + x.text = data.x.ToString("F2"); + Y.text = data.y.ToString("F2"); + Z.text = data.z.ToString("F2"); + Rx.text = data.rx.ToString("F2"); + Ry.text = data.ry.ToString("F2"); + Rz.text = data.rz.ToString("F2"); + } +} diff --git a/Assets/Scripts/View/TCPView.cs.meta b/Assets/Scripts/View/TCPView.cs.meta new file mode 100644 index 0000000..9877933 --- /dev/null +++ b/Assets/Scripts/View/TCPView.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 6f5682d5897289846962ca66ba85af5a \ No newline at end of file