From 43d705296312b7a223b56df63450f90e2f75291d Mon Sep 17 00:00:00 2001 From: XgC2961 <2961904938@qq.com> Date: Sat, 30 Aug 2025 08:52:30 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=B6=E6=AE=B5=E5=A4=87=E4=BB=BD3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scenes/ControlScene.unity | 198 ++++++++++-- Assets/Scenes/DisplayScene.unity | 20 +- Assets/Scripts/BroadcastServer.cs | 53 +++- Assets/Scripts/DisplayServer.cs | 229 ++++++++++---- Assets/Scripts/ModelController.cs | 124 ++++++-- Assets/Scripts/TouchClient.cs | 241 ++++++++++++--- Assets/部件结构展示/整体结构展示.controller | 2 +- ProjectSettings/EditorBuildSettings.asset | 4 +- UserSettings/EditorUserSettings.asset | 9 +- UserSettings/Layouts/default-2021.dwlt | 319 +++++++++++++++----- 10 files changed, 946 insertions(+), 253 deletions(-) diff --git a/Assets/Scenes/ControlScene.unity b/Assets/Scenes/ControlScene.unity index f20d540..beaf25a 100644 --- a/Assets/Scenes/ControlScene.unity +++ b/Assets/Scenes/ControlScene.unity @@ -1009,6 +1009,7 @@ GameObject: m_Component: - component: {fileID: 147885631} - component: {fileID: 147885632} + - component: {fileID: 147885633} m_Layer: 5 m_Name: Slider m_TagString: Untagged @@ -1084,7 +1085,7 @@ MonoBehaviour: m_HandleRect: {fileID: 1206650072} m_Direction: 0 m_MinValue: 0 - m_MaxValue: 1 + m_MaxValue: 100 m_WholeNumbers: 0 m_Value: 0 m_OnValueChanged: @@ -1102,6 +1103,35 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 +--- !u!114 &147885633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 147885630} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Delegates: + - eventID: 14 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2109707620} + m_TargetAssemblyTypeName: TouchClient, Assembly-CSharp + m_MethodName: OnSliderEndDrag + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &149928848 GameObject: m_ObjectHideFlags: 0 @@ -1905,7 +1935,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &255454897 RectTransform: m_ObjectHideFlags: 0 @@ -2248,6 +2278,7 @@ GameObject: m_Component: - component: {fileID: 323632687} - component: {fileID: 323632688} + - component: {fileID: 323632689} m_Layer: 5 m_Name: Slider m_TagString: Untagged @@ -2323,7 +2354,7 @@ MonoBehaviour: m_HandleRect: {fileID: 838312354} m_Direction: 0 m_MinValue: 0 - m_MaxValue: 1 + m_MaxValue: 100 m_WholeNumbers: 0 m_Value: 0 m_OnValueChanged: @@ -2341,6 +2372,35 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 +--- !u!114 &323632689 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323632686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Delegates: + - eventID: 14 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2109707620} + m_TargetAssemblyTypeName: TouchClient, Assembly-CSharp + m_MethodName: OnSliderEndDrag + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &337630845 GameObject: m_ObjectHideFlags: 0 @@ -4588,14 +4648,14 @@ MonoBehaviour: m_Calls: - m_Target: {fileID: 2109707620} m_TargetAssemblyTypeName: TouchClient, Assembly-CSharp - m_MethodName: OnButtonClick_Anim + m_MethodName: OnButtonClick_PlayModel m_Mode: 5 m_Arguments: m_ObjectArgument: {fileID: 0} m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_IntArgument: 0 m_FloatArgument: 0 - m_StringArgument: "\u6574\u4F53\u7ED3\u6784\u5C55\u793A" + m_StringArgument: "\u5E8A\u53F0\u7CFB\u7EDF" m_BoolArgument: 0 m_CallState: 2 --- !u!114 &588168071 @@ -5618,14 +5678,14 @@ MonoBehaviour: m_Calls: - m_Target: {fileID: 2109707620} m_TargetAssemblyTypeName: TouchClient, Assembly-CSharp - m_MethodName: OnButtonClick_Anim + m_MethodName: OnButtonClick_PlayModel m_Mode: 5 m_Arguments: m_ObjectArgument: {fileID: 0} m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_IntArgument: 0 m_FloatArgument: 0 - m_StringArgument: "\u6574\u4F53\u7ED3\u6784\u5C55\u793A" + m_StringArgument: "CT\u7CFB\u7EDF" m_BoolArgument: 0 m_CallState: 2 --- !u!114 &857052105 @@ -5970,7 +6030,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &918998978 RectTransform: m_ObjectHideFlags: 0 @@ -6201,6 +6261,7 @@ GameObject: m_Component: - component: {fileID: 965406577} - component: {fileID: 965406578} + - component: {fileID: 965406579} m_Layer: 5 m_Name: Slider m_TagString: Untagged @@ -6276,7 +6337,7 @@ MonoBehaviour: m_HandleRect: {fileID: 84517325} m_Direction: 0 m_MinValue: 0 - m_MaxValue: 1 + m_MaxValue: 100 m_WholeNumbers: 0 m_Value: 0 m_OnValueChanged: @@ -6287,13 +6348,42 @@ MonoBehaviour: m_MethodName: OnSliderChanged m_Mode: 2 m_Arguments: - m_ObjectArgument: {fileID: 0} + m_ObjectArgument: {fileID: 965406578} m_ObjectArgumentAssemblyTypeName: UnityEngine.UI.Slider, UnityEngine.UI m_IntArgument: 0 m_FloatArgument: 0 m_StringArgument: m_BoolArgument: 0 m_CallState: 2 +--- !u!114 &965406579 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965406576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Delegates: + - eventID: 14 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2109707620} + m_TargetAssemblyTypeName: TouchClient, Assembly-CSharp + m_MethodName: OnSliderEndDrag + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &970197317 GameObject: m_ObjectHideFlags: 0 @@ -6493,14 +6583,14 @@ MonoBehaviour: m_Calls: - m_Target: {fileID: 2109707620} m_TargetAssemblyTypeName: TouchClient, Assembly-CSharp - m_MethodName: OnButtonClick_Anim + m_MethodName: OnButtonClick_PlayModel m_Mode: 5 m_Arguments: m_ObjectArgument: {fileID: 0} m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_IntArgument: 0 m_FloatArgument: 0 - m_StringArgument: "\u6574\u4F53\u7ED3\u6784\u5C55\u793A" + m_StringArgument: PET m_BoolArgument: 0 m_CallState: 2 --- !u!114 &1024400632 @@ -8234,7 +8324,7 @@ RectTransform: m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} m_AnchoredPosition: {x: 6, y: 0} m_SizeDelta: {x: 54.2549, y: -14.6958} m_Pivot: {x: 0.5, y: 0.5} @@ -8695,14 +8785,14 @@ MonoBehaviour: m_Calls: - m_Target: {fileID: 2109707620} m_TargetAssemblyTypeName: TouchClient, Assembly-CSharp - m_MethodName: OnButtonClick_Anim + m_MethodName: OnButtonClick_PlayModel m_Mode: 5 m_Arguments: m_ObjectArgument: {fileID: 0} m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_IntArgument: 0 m_FloatArgument: 0 - m_StringArgument: "\u6574\u4F53\u7ED3\u6784\u5C55\u793A" + m_StringArgument: SPECT m_BoolArgument: 0 m_CallState: 2 --- !u!114 &1238533519 @@ -10050,7 +10140,7 @@ RectTransform: m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 10, y: 0} m_Pivot: {x: 0.5, y: 0.5} @@ -10178,7 +10268,7 @@ MonoBehaviour: m_Calls: - m_Target: {fileID: 2109707620} m_TargetAssemblyTypeName: TouchClient, Assembly-CSharp - m_MethodName: OnButtonClick_Anim + m_MethodName: OnButtonClick_PlayModel m_Mode: 5 m_Arguments: m_ObjectArgument: {fileID: 0} @@ -11741,14 +11831,14 @@ MonoBehaviour: m_Calls: - m_Target: {fileID: 2109707620} m_TargetAssemblyTypeName: TouchClient, Assembly-CSharp - m_MethodName: OnButtonClick_Anim + m_MethodName: OnButtonClick_PlayModel m_Mode: 5 m_Arguments: m_ObjectArgument: {fileID: 0} m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_IntArgument: 0 m_FloatArgument: 0 - m_StringArgument: "\u6574\u4F53\u7ED3\u6784\u5C55\u793A" + m_StringArgument: "\u673A\u67B6\u7CFB\u7EDF" m_BoolArgument: 0 m_CallState: 2 --- !u!114 &1866139834 @@ -12439,6 +12529,7 @@ GameObject: m_Component: - component: {fileID: 2048917857} - component: {fileID: 2048917858} + - component: {fileID: 2048917859} m_Layer: 5 m_Name: Slider m_TagString: Untagged @@ -12514,7 +12605,7 @@ MonoBehaviour: m_HandleRect: {fileID: 527617392} m_Direction: 0 m_MinValue: 0 - m_MaxValue: 1 + m_MaxValue: 100 m_WholeNumbers: 0 m_Value: 0 m_OnValueChanged: @@ -12532,6 +12623,35 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 +--- !u!114 &2048917859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2048917856} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Delegates: + - eventID: 14 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2109707620} + m_TargetAssemblyTypeName: TouchClient, Assembly-CSharp + m_MethodName: OnSliderEndDrag + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &2062396200 GameObject: m_ObjectHideFlags: 0 @@ -12896,6 +13016,7 @@ GameObject: m_Component: - component: {fileID: 2094144141} - component: {fileID: 2094144142} + - component: {fileID: 2094144143} m_Layer: 5 m_Name: Slider m_TagString: Untagged @@ -12971,7 +13092,7 @@ MonoBehaviour: m_HandleRect: {fileID: 195234605} m_Direction: 0 m_MinValue: 0 - m_MaxValue: 1 + m_MaxValue: 100 m_WholeNumbers: 0 m_Value: 0 m_OnValueChanged: @@ -12989,6 +13110,35 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 +--- !u!114 &2094144143 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2094144140} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Delegates: + - eventID: 14 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2109707620} + m_TargetAssemblyTypeName: TouchClient, Assembly-CSharp + m_MethodName: OnSliderEndDrag + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &2094264359 GameObject: m_ObjectHideFlags: 0 @@ -13329,12 +13479,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} m_Name: m_EditorClassIdentifier: - m_UiScaleMode: 0 + m_UiScaleMode: 1 m_ReferencePixelsPerUnit: 100 m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} + m_ReferenceResolution: {x: 1920, y: 1080} m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 + m_MatchWidthOrHeight: 0.5 m_PhysicalUnit: 3 m_FallbackScreenDPI: 96 m_DefaultSpriteDPI: 96 diff --git a/Assets/Scenes/DisplayScene.unity b/Assets/Scenes/DisplayScene.unity index 17c6ee6..baa56c6 100644 --- a/Assets/Scenes/DisplayScene.unity +++ b/Assets/Scenes/DisplayScene.unity @@ -525,7 +525,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c86ed53e8144b2b4781bab9d7e73c21e, type: 3} m_Name: m_EditorClassIdentifier: - defaultAnimName: Idle + defaultAnimName: Take 001 --- !u!1 &497933936 GameObject: m_ObjectHideFlags: 0 @@ -613,10 +613,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} m_Name: m_EditorClassIdentifier: - m_UiScaleMode: 0 + m_UiScaleMode: 1 m_ReferencePixelsPerUnit: 100 m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} + m_ReferenceResolution: {x: 3328, y: 1352} m_ScreenMatchMode: 0 m_MatchWidthOrHeight: 0 m_PhysicalUnit: 3 @@ -938,7 +938,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c86ed53e8144b2b4781bab9d7e73c21e, type: 3} m_Name: m_EditorClassIdentifier: - defaultAnimName: Idle + defaultAnimName: Take 001 --- !u!1 &705507993 GameObject: m_ObjectHideFlags: 0 @@ -1068,7 +1068,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -7} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &943449934 @@ -1224,7 +1224,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c86ed53e8144b2b4781bab9d7e73c21e, type: 3} m_Name: m_EditorClassIdentifier: - defaultAnimName: Idle + defaultAnimName: Take 001 --- !u!1 &1151435827 GameObject: m_ObjectHideFlags: 0 @@ -1477,7 +1477,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c86ed53e8144b2b4781bab9d7e73c21e, type: 3} m_Name: m_EditorClassIdentifier: - defaultAnimName: Idle + defaultAnimName: Take 001 --- !u!1001 &1681616358 PrefabInstance: m_ObjectHideFlags: 0 @@ -1485,6 +1485,10 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 586304722} m_Modifications: + - target: {fileID: 2088313044, guid: 56ad479e7b7393943899010515c51f96, type: 3} + propertyPath: defaultAnimName + value: Take 001 + objectReference: {fileID: 0} - target: {fileID: 3868356453414391042, guid: 56ad479e7b7393943899010515c51f96, type: 3} propertyPath: m_RootOrder value: 0 @@ -1731,7 +1735,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c86ed53e8144b2b4781bab9d7e73c21e, type: 3} m_Name: m_EditorClassIdentifier: - defaultAnimName: Idle + defaultAnimName: Take 001 --- !u!1 &2139815134 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/BroadcastServer.cs b/Assets/Scripts/BroadcastServer.cs index 218c7df..f3cef3c 100644 --- a/Assets/Scripts/BroadcastServer.cs +++ b/Assets/Scripts/BroadcastServer.cs @@ -3,54 +3,77 @@ using System.Net.Sockets; using System.Net; using System.Text; using System.Threading; +using System; public class BroadcastServer : MonoBehaviour { - private UdpClient udpBroadcaster; - private Thread broadcastThread; - private bool isRunning = true; + private UdpClient udpBroadcaster; // ÓÃÓڹ㲥±¾µØIPµÄUDP¿Í»§¶Ë + private Thread broadcastThread; // ÔËÐй㲥ѭ»·µÄÏß³Ì + private CancellationTokenSource cts = new CancellationTokenSource(); // ¿ØÖÆÏß³ÌÈ¡Ïû + private volatile bool isRunning = true; // ¿ØÖƹ㲥ѭ»·µÄḬ̈߳²È«±êÖ¾ + // ½Å±¾Æô¶¯Ê±µ÷Óà void Start() { + // ³õʼ»¯UDP¿Í»§¶Ë²¢ÆôÓù㲥 udpBroadcaster = new UdpClient(); udpBroadcaster.EnableBroadcast = true; - broadcastThread = new Thread(BroadcastIP); + // Æô¶¯ÐÂÏß³ÌÒԹ㲥±¾µØIP + broadcastThread = new Thread(() => BroadcastIP(cts.Token)); broadcastThread.Start(); Debug.Log("ÏÔʾ¶ËÕýÔڹ㲥IP..."); } - private void BroadcastIP() + // ¶¨ÆÚ¹ã²¥±¾µØIPµØÖ· + private void BroadcastIP(CancellationToken token) { + // ¶¨Òå¹ã²¥¶Ëµã£¨IP: 255.255.255.255£¬¶Ë¿Ú: 9999£© IPEndPoint endPoint = new IPEndPoint(IPAddress.Broadcast, 9999); - string localIP = GetLocalIPAddress(); + string localIP = GetLocalIPAddress(); // »ñÈ¡±¾µØIPv4µØÖ· - while (isRunning) + // ÔÚδȡÏûµÄÇé¿öϳÖÐø¹ã²¥ + while (!token.IsCancellationRequested && isRunning) { - byte[] data = Encoding.UTF8.GetBytes(localIP); - udpBroadcaster.Send(data, data.Length, endPoint); - Thread.Sleep(1000); + try + { + // ½«IPµØÖ·×ª»»Îª×Ö½Ú²¢Í¨¹ýUDP·¢ËÍ + byte[] data = Encoding.UTF8.GetBytes(localIP); + udpBroadcaster.Send(data, data.Length, endPoint); + Thread.Sleep(2000); // ÿ2Ãë¹ã²¥Ò»´Î£¬¼õÉÙÍøÂç¸ºÔØ + } + catch (Exception ex) + { + Debug.LogError($"¹ã²¥´íÎó: {ex.Message}"); + } } } + // »ñÈ¡±¾»úµÄIPv4µØÖ· private string GetLocalIPAddress() { - string localIP = "127.0.0.1"; + string localIP = "127.0.0.1"; // Èç¹ûδÕÒµ½ÓÐЧIP£¬Ôò»ØÍ˵½±¾µØ»Ø»·µØÖ· foreach (var ip in Dns.GetHostEntry(Dns.GetHostName()).AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { - localIP = ip.ToString(); + localIP = ip.ToString(); // ʹÓÃÕÒµ½µÄµÚÒ»¸öIPv4µØÖ· break; } } return localIP; } + // Ó¦ÓóÌÐòÍ˳öʱÇåÀí×ÊÔ´ private void OnApplicationQuit() { - isRunning = false; - udpBroadcaster?.Close(); + isRunning = false; // ֪ͨ¹ã²¥Ñ­»·Í£Ö¹ + cts.Cancel(); // ÇëÇóÏß³ÌÈ¡Ïû + udpBroadcaster?.Close(); // ¹Ø±ÕUDP¿Í»§¶Ë + if (broadcastThread != null && broadcastThread.IsAlive) + { + broadcastThread.Join(1000); // µÈ´ýÏ߳̽áÊø£¬³¬Ê±1Ãë + } } -} +} \ No newline at end of file diff --git a/Assets/Scripts/DisplayServer.cs b/Assets/Scripts/DisplayServer.cs index f01c91f..bb6bf25 100644 --- a/Assets/Scripts/DisplayServer.cs +++ b/Assets/Scripts/DisplayServer.cs @@ -4,106 +4,191 @@ using System.Net; using System.Text; using System.Threading; using System.Collections.Generic; +using System; public class DisplayServer : MonoBehaviour { - private TcpListener listener; - private Thread listenThread; - private bool isRunning = true; + private TcpListener listener; // ÓÃÓÚ½ÓÊܿͻ§¶ËÁ¬½ÓµÄTCP¼àÌýÆ÷ + private Thread listenThread; // ÓÃÓÚ½ÓÊܿͻ§¶ËÁ¬½ÓµÄÏß³Ì + private CancellationTokenSource listenCts = new CancellationTokenSource(); // ¿ØÖÆÏß³ÌÈ¡Ïû + private volatile bool isRunning = true; // Ḭ̈߳²È«µÄ·þÎñÆ÷Ñ­»·±êÖ¾ + private NetworkStream clientStream; // µ±Ç°¿Í»§¶ËµÄÍøÂçÁ÷£¬ÓÃÓÚ·¢ËÍÏûÏ¢ - public Transform background; + public Transform background; // UIÒ³ÃæµÄ¸¸¼¶±ä»» [System.Serializable] public class PageModel { - public string pageName; - public GameObject model; // Ä£ÐÍÉϹÒÔØ ModelController + public string pageName; // Ò³ÃæÃû³Æ + public GameObject model; // ÓëÒ³Ãæ¹ØÁªµÄÄ£ÐÍ£¨¹ÒÔØModelController£© } - public List pageModels = new List(); + public List pageModels = new List(); // Ò³Ãæ-Ä£ÐÍÓ³ÉäÁбí - private string latestMsg = ""; - private string currentPage = ""; + private readonly Queue messageQueue = new Queue(); // Ḭ̈߳²È«µÄÏûÏ¢¶ÓÁÐ + private readonly object queueLock = new object(); // ÏûÏ¢¶ÓÁзÃÎÊËø + private string currentPage = ""; // ¸ú×Ùµ±Ç°ÏÔʾµÄÒ³Ãæ + private Dictionary pageModelCache; // Ò³Ãæ-Ä£ÐÍÓ³ÉäµÄ»º´æ + + // ½Å±¾Æô¶¯Ê±µ÷Óà void Start() { + // ÉèÖÃÏÔʾ¶Ë·Ö±æÂÊΪ 3328x1352 Screen.SetResolution(3328, 1352, false); + // ³õʼ»¯Ò³Ãæ-Ä£ÐÍ»º´æÒÔ¼Ó¿ì²éÕÒ + pageModelCache = new Dictionary(); + foreach (var pm in pageModels) + { + if (!string.IsNullOrEmpty(pm.pageName) && pm.model != null) + { + pageModelCache[pm.pageName] = pm; + } + } + + // ÔÚ¶Ë¿Ú8888ÉÏÆô¶¯TCP¼àÌý listener = new TcpListener(IPAddress.Any, 8888); listener.Start(); - listenThread = new Thread(ListenForClients); + // Æô¶¯Ïß³ÌÒÔ¼àÌý¿Í»§¶ËÁ¬½Ó + listenThread = new Thread(() => ListenForClients(listenCts.Token)); listenThread.Start(); Debug.Log("ÏÔʾ¶Ë·þÎñÆ÷ÒÑÆô¶¯£¬µÈ´ý´¥Ãþ¶ËÁ¬½Ó..."); + // ÏÔʾ³õÊ¼Ò³Ãæ ShowPage("Ê×Ò³"); } - private void ListenForClients() + // ¼àÌý´«ÈëµÄTCP¿Í»§¶ËÁ¬½Ó + private void ListenForClients(CancellationToken token) { - while (isRunning) + while (!token.IsCancellationRequested && isRunning) { - TcpClient client = listener.AcceptTcpClient(); - Debug.Log("´¥Ãþ¶ËÒÑÁ¬½Ó£¡"); - Thread clientThread = new Thread(HandleClientComm); - clientThread.Start(client); + try + { + TcpClient client = listener.AcceptTcpClient(); + Debug.Log("´¥Ãþ¶ËÒÑÁ¬½Ó£¡"); + clientStream = client.GetStream(); // ±£´æ¿Í»§¶ËÁ÷ÒÔ·¢ËÍÏûÏ¢ + // Ϊÿ¸ö¿Í»§¶ËÆô¶¯ÐÂÏ̴߳¦ÀíͨÐÅ + Thread clientThread = new Thread(() => HandleClientComm(client, token)); + clientThread.Start(); + } + catch (Exception ex) + { + Debug.LogError($"½ÓÊܿͻ§¶ËÁ¬½Ó´íÎó: {ex.Message}"); + } } } - private void HandleClientComm(object clientObj) + // ´¦ÀíÓëµ¥¸ö¿Í»§¶ËµÄͨÐÅ + private void HandleClientComm(TcpClient tcpClient, CancellationToken token) { - TcpClient tcpClient = (TcpClient)clientObj; - NetworkStream clientStream = tcpClient.GetStream(); - + NetworkStream stream = tcpClient.GetStream(); byte[] message = new byte[4096]; int bytesRead; - while (isRunning) + // ÔÚδȡÏû»òδ¶Ï¿ªÁ¬½ÓµÄÇé¿öϳÖÐø¶ÁÈ¡ + while (!token.IsCancellationRequested && isRunning) { - try { bytesRead = clientStream.Read(message, 0, 4096); } - catch { break; } - - if (bytesRead == 0) break; - - string data = Encoding.UTF8.GetString(message, 0, bytesRead); - latestMsg = data; - } - - tcpClient.Close(); - } - - private void Update() - { - if (string.IsNullOrEmpty(latestMsg)) return; - - if (latestMsg.StartsWith("Page:")) - { - string pageName = latestMsg.Replace("Page:", ""); - ShowPage(pageName); - } - else if (latestMsg.StartsWith("Model:")) // ¸Ä³É¸ù¾ÝÄ£ÐÍÃû²¥·Å¶¯»­ - { - string modelName = latestMsg.Replace("Model:", ""); - PlayModelAnimation(modelName); - } - else if (latestMsg.StartsWith("Progress:")) - { - if (float.TryParse(latestMsg.Replace("Progress:", ""), out float progress)) + try { - SetAnimationProgress(progress); + bytesRead = stream.Read(message, 0, 4096); + if (bytesRead == 0) break; // ¿Í»§¶Ë¶Ï¿ªÁ¬½Ó + + string data = Encoding.UTF8.GetString(message, 0, bytesRead); + lock (queueLock) + { + messageQueue.Enqueue(data); // ½«ÏûÏ¢¼ÓÈë¶ÓÁÐÒÔ¹©´¦Àí + } + } + catch (Exception ex) + { + Debug.LogError($"¶ÁÈ¡¿Í»§¶ËÏûÏ¢´íÎó: {ex.Message}"); + break; } } - latestMsg = ""; + // ÇåÀí¿Í»§¶Ë×ÊÔ´ + stream.Close(); + tcpClient.Close(); + clientStream = null; // Çå¿Õ¿Í»§¶ËÁ÷ + Debug.Log("¿Í»§¶Ë¶Ï¿ªÁ¬½Ó"); } + // ÔÚÖ÷Ïß³ÌÖд¦ÀíÅŶӵÄÏûÏ¢²¢·¢ËͶ¯»­½ø¶È + private void Update() + { + // ´¦Àí½ÓÊÕµ½µÄÏûÏ¢ + string msg = null; + lock (queueLock) + { + if (messageQueue.Count > 0) + { + msg = messageQueue.Dequeue(); // »ñÈ¡ÏÂÒ»ÌõÏûÏ¢ + } + } + + if (!string.IsNullOrEmpty(msg)) + { + Debug.Log($"ÊÕµ½ÏûÏ¢: {msg}"); + if (msg.StartsWith("Page:")) + { + string pageName = msg.Replace("Page:", ""); + ShowPage(pageName); + } + else if (msg.StartsWith("Model:")) + { + string modelName = msg.Replace("Model:", ""); + PlayModelAnimation(modelName); + } + else if (msg.StartsWith("Progress:")) + { + if (float.TryParse(msg.Replace("Progress:", ""), out float progress)) + { + SetAnimationProgress(progress); + Debug.Log($"´¦Àí½ø¶ÈÏûÏ¢: Progress:{progress:F2}"); + } + } + } + + // ÿ֡·¢ËͶ¯»­½ø¶Èµ½¿Í»§¶Ë + if (clientStream != null && clientStream.CanWrite) + { + if (pageModelCache.TryGetValue(currentPage, out PageModel pm) && pm != null && pm.model != null) + { + ModelController mc = pm.model.GetComponent(); + if (mc != null) + { + float progress = mc.GetAnimationProgress(); + try + { + string progressMsg = $"Progress:{progress:F2}"; + byte[] data = Encoding.UTF8.GetBytes(progressMsg); + clientStream.Write(data, 0, data.Length); + Debug.Log($"·¢ËͶ¯»­½ø¶È: {progressMsg}"); + } + catch (Exception ex) + { + Debug.LogError($"·¢ËͶ¯»­½ø¶Èʧ°Ü: {ex.Message}"); + clientStream = null; // ±ê¼ÇÁ÷ʧЧ + } + } + } + } + } + + // Çл»¼¤»îµÄUIÒ³Ãæ²¢¸üÐÂÄ£ÐÍ private void ShowPage(string pageName) { foreach (Transform child in background) - child.gameObject.SetActive(child.name == pageName); + { + child.gameObject.SetActive(child.name == pageName); // ½ö¼¤»îÄ¿±êÒ³Ãæ + } currentPage = pageName; + // ¸üÐÂÄ£ÐͿɼûÐÔ²¢ÖØÖö¯»­ foreach (var pageModel in pageModels) { if (pageModel.model != null) @@ -112,34 +197,60 @@ public class DisplayServer : MonoBehaviour pageModel.model.SetActive(isActive); ModelController mc = pageModel.model.GetComponent(); - if (mc != null) mc.ResetAnimation(); + if (mc != null) + { + mc.ResetAnimation(); + Debug.Log($"Ä£ÐÍ {pageModel.model.name} ÖØÖã¬Ò³Ãæ: {pageName}"); + } } } + Debug.Log($"ÏÔʾ¶ËÇл»µ½Ò³Ãæ: {pageName}"); } + // Ϊָ¶¨Ä£ÐͲ¥·Å¶¯»­ private void PlayModelAnimation(string modelName) { PageModel pm = pageModels.Find(p => p.model != null && p.model.name == modelName); if (pm != null) { ModelController mc = pm.model.GetComponent(); - if (mc != null) mc.PlayAnimation(); // ²¥·ÅÄ£ÐÍĬÈ϶¯»­ + if (mc != null) + { + mc.PlayAnimation(); + Debug.Log($"²¥·ÅÄ£ÐͶ¯»­: {modelName}"); + } } } + // ÉèÖõ±Ç°Ò³ÃæÄ£Ð͵͝»­½ø¶È private void SetAnimationProgress(float progress) { - PageModel pm = pageModels.Find(p => p.pageName == currentPage); - if (pm != null && pm.model != null) + if (pageModelCache.TryGetValue(currentPage, out PageModel pm) && pm != null && pm.model != null) { ModelController mc = pm.model.GetComponent(); - if (mc != null) mc.SetAnimationProgress(progress); + if (mc != null) + { + mc.SetAnimationProgress(progress); + Debug.Log($"ÉèÖÃÄ£ÐÍ {pm.model.name} ½ø¶È: {progress:F2}"); + } + } + else + { + Debug.LogWarning($"δÕÒµ½Ò³Ãæ {currentPage} µÄÄ£ÐÍ»òModelController"); } } + // Ó¦ÓóÌÐòÍ˳öʱÇåÀí×ÊÔ´ private void OnApplicationQuit() { isRunning = false; + listenCts.Cancel(); listener.Stop(); + clientStream?.Close(); + + if (listenThread != null && listenThread.IsAlive) + { + listenThread.Join(1000); // µÈ´ýÏ߳̽áÊø + } } -} +} \ No newline at end of file diff --git a/Assets/Scripts/ModelController.cs b/Assets/Scripts/ModelController.cs index 8053919..3b166ae 100644 --- a/Assets/Scripts/ModelController.cs +++ b/Assets/Scripts/ModelController.cs @@ -1,76 +1,150 @@ using UnityEngine; +using System.Collections.Generic; public class ModelController : MonoBehaviour { - private Animator animator; - private string currentAnim = ""; - private bool isPlaying = false; + private Animator animator; // ¿ØÖƶ¯»­µÄAnimator×é¼þ + private string currentAnim = ""; // ¸ú×Ùµ±Ç°²¥·ÅµÄ¶¯»­ + private bool isPlaying = false; // ¸ú×Ù¶¯»­²¥·Å״̬ [Header("ĬÈ϶¯»­×´Ì¬Ãû³Æ")] - public string defaultAnimName = "Idle"; + public string defaultAnimName = "Idle"; // ĬÈ϶¯»­×´Ì¬Ãû³Æ + private Dictionary stateHashes = new Dictionary(); // ¶¯»­×´Ì¬¹þÏ£»º´æ + + // ½Å±¾³õʼ»¯Ê±µ÷Óà void Awake() { animator = GetComponent(); + // »º´æÄ¬È϶¯»­×´Ì¬µÄ¹þÏ£ÖµÒÔÌá¸ßÐÔÄÜ + if (!string.IsNullOrEmpty(defaultAnimName)) + { + stateHashes[defaultAnimName] = Animator.StringToHash(defaultAnimName); + } + } + + // ÔÚUpdateÖиüж¯»­×´Ì¬ + void Update() + { + if (isPlaying && animator != null && !string.IsNullOrEmpty(currentAnim)) + { + AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0); + if (stateInfo.IsName(currentAnim) && stateInfo.normalizedTime >= 1f) + { + // ¶¯»­²¥·ÅÍê³É£¬ÔÝÍ£²¢±ê¼Ç + animator.enabled = false; + isPlaying = false; + Debug.Log($"¶¯»­ {currentAnim} ²¥·ÅÍê³É£¬ÔÝÍ£"); + } + } } /// - /// ²¥·ÅĬÈ϶¯»­£¬´Ó0¿ªÊ¼ + /// ´ÓÍ·²¥·ÅĬÈ϶¯»­ /// public void PlayAnimation() { if (animator == null || string.IsNullOrEmpty(defaultAnimName)) return; if (!AnimatorHasState(defaultAnimName)) { - Debug.LogWarning($"Animator Éϲ»´æÔÚ״̬: {defaultAnimName}"); + Debug.LogWarning($"AnimatorÉϲ»´æÔÚ״̬: {defaultAnimName}"); return; } currentAnim = defaultAnimName; animator.enabled = true; - animator.Play(currentAnim, 0, 0f); - animator.Update(0f); - isPlaying = true; + animator.Play(currentAnim, 0, 0f); // ´ÓÍ·²¥·Å¶¯»­ + animator.Update(0f); // Ç¿ÖÆÁ¢¼´¸üР+ isPlaying = true; // ±ê¼Ç¶¯»­ÕýÔÚ²¥·Å + Debug.Log($"¿ªÊ¼²¥·Å¶¯»­: {currentAnim}"); } /// - /// ÉèÖö¯»­½ø¶È 0~1 + /// ÉèÖö¯»­½ø¶È£¨0µ½1£© /// public void SetAnimationProgress(float normalizedTime) { - if (animator == null || string.IsNullOrEmpty(currentAnim)) return; + if (animator == null || string.IsNullOrEmpty(defaultAnimName)) return; if (!gameObject.activeSelf) return; + // È·±£currentAnimÒÑÉèÖà + if (string.IsNullOrEmpty(currentAnim)) + { + currentAnim = defaultAnimName; + Debug.Log($"ÉèÖö¯»­½ø¶Èǰ³õʼ»¯currentAnim: {currentAnim}"); + } + + if (!AnimatorHasState(currentAnim)) + { + Debug.LogWarning($"AnimatorÉϲ»´æÔÚ״̬: {currentAnim}"); + return; + } + animator.enabled = true; - animator.Play(currentAnim, 0, Mathf.Clamp01(normalizedTime)); - animator.Update(0f); - animator.enabled = false; - isPlaying = false; + float clampedTime = Mathf.Clamp01(normalizedTime); + animator.Play(currentAnim, 0, clampedTime); // ÉèÖö¯»­µ½Ö¸¶¨Ê±¼ä + animator.Update(0f); // Ç¿ÖÆÁ¢¼´¸üР+ animator.enabled = false; // ÔÝÍ£¶¯»­ + isPlaying = false; // ±ê¼Ç¶¯»­ÔÝÍ£ + Debug.Log($"ÉèÖö¯»­ {currentAnim} ½ø¶È: {clampedTime:F2}"); } /// - /// Ò³ÃæÇл»»ò¸´Î»Ê±µ÷Óà + /// ÖØÖö¯»­µ½³õʼ״̬ /// public void ResetAnimation() { if (animator == null) return; if (!gameObject.activeSelf) return; + string animToReset = !string.IsNullOrEmpty(defaultAnimName) ? defaultAnimName : ""; + if (string.IsNullOrEmpty(animToReset)) return; + + currentAnim = animToReset; // È·±£currentAnimÒÑÉèÖà animator.enabled = true; - animator.Play(currentAnim != "" ? currentAnim : defaultAnimName, 0, 0f); - animator.Update(0f); - animator.enabled = false; - currentAnim = ""; - isPlaying = false; + animator.Play(currentAnim, 0, 0f); // ÖØÖõ½¿ªÊ¼ + animator.Update(0f); // Ç¿ÖÆÁ¢¼´¸üР+ animator.enabled = false; // ÔÝÍ£¶¯»­ + isPlaying = false; // ±ê¼Ç¶¯»­ÔÝÍ£ + Debug.Log($"ÖØÖö¯»­: {currentAnim}"); } + /// + /// »ñÈ¡µ±Ç°¶¯»­µÄ±ê×¼»¯Ê±¼ä£¨0µ½1£© + /// + /// µ±Ç°¶¯»­½ø¶È£¬ÈôÎÞ¶¯»­Ôò·µ»Ø0 + public float GetAnimationProgress() + { + if (animator == null || string.IsNullOrEmpty(currentAnim) || !gameObject.activeSelf) + { + return 0f; + } + + if (!AnimatorHasState(currentAnim)) + { + return 0f; + } + + AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0); + if (stateInfo.IsName(currentAnim)) + { + float progress = Mathf.Clamp01(stateInfo.normalizedTime % 1f); + Debug.Log($"»ñÈ¡¶¯»­ {currentAnim} ½ø¶È: {progress:F2}"); + return progress; + } + return 0f; + } + + // ¼ì²éÖ¸¶¨µÄ¶¯»­×´Ì¬ÊÇ·ñ´æÔÚÓÚAnimatorÖÐ private bool AnimatorHasState(string stateName) { - for (int i = 0; i < animator.layerCount; i++) + if (stateHashes.TryGetValue(stateName, out int hash)) { - if (animator.HasState(i, Animator.StringToHash(stateName))) - return true; + for (int i = 0; i < animator.layerCount; i++) + { + if (animator.HasState(i, hash)) return true; + } } return false; } -} +} \ No newline at end of file diff --git a/Assets/Scripts/TouchClient.cs b/Assets/Scripts/TouchClient.cs index baf1deb..2401243 100644 --- a/Assets/Scripts/TouchClient.cs +++ b/Assets/Scripts/TouchClient.cs @@ -1,112 +1,273 @@ -using UnityEngine; -using UnityEngine.UI; -using System.Net.Sockets; +using System; +using System.Collections.Generic; using System.Net; +using System.Net.Sockets; using System.Text; using System.Threading; +using UnityEngine; +using UnityEngine.UI; public class TouchClient : MonoBehaviour { - private TcpClient client; - private NetworkStream stream; - private bool isConnected = false; + private TcpClient client; // ÓÃÓÚÓëÏÔʾ¶ËͨÐŵÄTCP¿Í»§¶Ë + private NetworkStream stream; // ÓÃÓÚ·¢ËÍ/½ÓÊÕÊý¾ÝµÄÁ÷ + private volatile bool isConnected = false; // Ḭ̈߳²È«µÄÁ¬½Ó״̬±êÖ¾ - private UdpClient udpListener; - private Thread udpThread; + private UdpClient udpListener; // ÓÃÓÚ½ÓÊչ㲥IPµÄUDP¿Í»§¶Ë + private Thread udpThread; // ¼àÌý¹ã²¥µÄÏß³Ì + private CancellationTokenSource udpCts = new CancellationTokenSource(); // ¿ØÖÆUDPÏß³ÌÈ¡Ïû - public Transform background; - private string currentPage = "Ê×Ò³"; + private Thread receiveThread; // ½ÓÊÕ·þÎñÆ÷ÏûÏ¢µÄÏß³Ì + private CancellationTokenSource receiveCts = new CancellationTokenSource(); // ¿ØÖƽÓÊÕÏß³ÌÈ¡Ïû + public Transform background; // UIÒ³ÃæµÄ¸¸¼¶±ä»» + private string currentPage = "Ê×Ò³"; // ¸ú×Ùµ±Ç°ÏÔʾµÄÒ³Ãæ + + private readonly Queue progressQueue = new Queue(); // Ḭ̈߳²È«µÄ½ø¶È¶ÓÁÐ + private readonly object queueLock = new object(); // ½ø¶È¶ÓÁзÃÎÊËø + private bool isDraggingSlider = false; // ±ê¼ÇÊÇ·ñÕýÔÚÍ϶¯Slider + + // ½Å±¾Æô¶¯Ê±µ÷Óà void Start() { + // ÉèÖô¥Ãþ¿ØÖƶ˷ֱæÂÊΪ 1920x1080 Screen.SetResolution(1920, 1080, false); + // ÔÚ¶Ë¿Ú9999Éϳõʼ»¯UDP¼àÌý udpListener = new UdpClient(9999); - udpThread = new Thread(ListenForBroadcast); + udpThread = new Thread(() => ListenForBroadcast(udpCts.Token)); udpThread.Start(); Debug.Log("´¥Ãþ¶ËµÈ´ýÏÔʾ¶Ë¹ã²¥..."); + // ÏÔʾ³õÊ¼Ò³Ãæ ShowPage("Ê×Ò³"); } - private void ListenForBroadcast() + // ¼àÌýUDP¹ã²¥ÒÔ·¢ÏÖÏÔʾ¶ËIP + private void ListenForBroadcast(CancellationToken token) { IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 9999); - while (!isConnected) + // ÔÚδÁ¬½Ó»òδȡÏûµÄÇé¿öϳÖÐø¼àÌý + while (!isConnected && !token.IsCancellationRequested) { - byte[] data = udpListener.Receive(ref endPoint); - string serverIp = Encoding.UTF8.GetString(data); + try + { + // ½ÓÊչ㲥Êý¾Ý + byte[] data = udpListener.Receive(ref endPoint); + string serverIp = Encoding.UTF8.GetString(data); - Debug.Log("·¢ÏÖÏÔʾ¶ËIP: " + serverIp); - ConnectToServer(serverIp, 8888); + Debug.Log("·¢ÏÖÏÔʾ¶ËIP: " + serverIp); + ConnectToServer(serverIp, 8888); // ³¢ÊÔÁ¬½Óµ½·þÎñÆ÷ + } + catch (Exception ex) + { + Debug.LogError($"UDP½ÓÊÕ´íÎó: {ex.Message}"); + Thread.Sleep(1000); // ±ÜÃâ¿ìËÙÖØÊÔ + } } } + // ͨ¹ýTCPÁ¬½Óµ½ÏÔʾ¶Ë·þÎñÆ÷ private void ConnectToServer(string ip, int port) { try { client = new TcpClient(); - client.Connect(ip, port); + client.Connect(ip, port); // Á¬½Óµ½·þÎñÆ÷ stream = client.GetStream(); isConnected = true; + udpCts.Cancel(); // Á¬½Ó³É¹¦ºóÍ£Ö¹UDP¼àÌýÏß³Ì + udpListener?.Close(); // ¹Ø±ÕUDP¼àÌýÆ÷ Debug.Log("´¥Ãþ¶ËÒÑÁ¬½Óµ½ÏÔʾ¶Ë: " + ip); + + // Æô¶¯½ÓÊÕÏß³ÌÒÔ´¦Àí·þÎñÆ÷ÏûÏ¢ + receiveThread = new Thread(() => ReceiveMessages(receiveCts.Token)); + receiveThread.Start(); } - catch + catch (Exception ex) { - Debug.Log("Á¬½ÓÏÔʾ¶Ëʧ°Ü"); + Debug.LogError($"Á¬½ÓÏÔʾ¶Ëʧ°Ü: {ex.Message}"); } } + // ½ÓÊÕ·þÎñÆ÷·¢Ë͵ÄÏûÏ¢ + private void ReceiveMessages(CancellationToken token) + { + byte[] message = new byte[4096]; + int bytesRead; + + while (!token.IsCancellationRequested && isConnected) + { + try + { + bytesRead = stream.Read(message, 0, 4096); + if (bytesRead == 0) break; // ·þÎñÆ÷¶Ï¿ªÁ¬½Ó + + string data = Encoding.UTF8.GetString(message, 0, bytesRead); + if (data.StartsWith("Progress:") && float.TryParse(data.Replace("Progress:", ""), out float progress)) + { + lock (queueLock) + { + progressQueue.Clear(); // Çå¿Õ¶ÓÁÐÒÔÈ·±£×îнø¶È + progressQueue.Enqueue(progress); // ½«½ø¶È¼ÓÈë¶ÓÁÐ + Debug.Log($"ÊÕµ½½ø¶È: {progress:F2}"); + } + } + } + catch (Exception ex) + { + Debug.LogError($"½ÓÊÕ·þÎñÆ÷ÏûÏ¢´íÎó: {ex.Message}"); + isConnected = false; + break; + } + } + } + + // ÏòÏÔʾ¶Ë·þÎñÆ÷·¢ËÍÏûÏ¢ private void SendMessageToServer(string msg) { if (isConnected && stream != null) { - byte[] data = Encoding.UTF8.GetBytes(msg); - stream.Write(data, 0, data.Length); - Debug.Log("·¢ËÍÖ¸Áî: " + msg); + try + { + byte[] data = Encoding.UTF8.GetBytes(msg); + stream.Write(data, 0, data.Length); + Debug.Log("·¢ËÍÖ¸Áî: " + msg); + } + catch (Exception ex) + { + Debug.LogError($"·¢ËÍÏûϢʧ°Ü: {ex.Message}"); + isConnected = false; // ±ê¼ÇÁ¬½ÓʧЧ + } } } + // Ò³Ãæ°´Å¥µã»÷ʱµ÷Óà public void OnButtonClick_Page(string pageName) { - ShowPage(pageName); - SendMessageToServer("Page:" + pageName); + ShowPage(pageName); // Çл»µ½Ö¸¶¨Ò³Ãæ + SendMessageToServer("Page:" + pageName); // ֪ͨ·þÎñÆ÷ } + // Ä£ÐͲ¥·Å°´Å¥µã»÷ʱµ÷Óà public void OnButtonClick_PlayModel(string modelName) { - SendMessageToServer("Model:" + modelName); + SendMessageToServer("Model:" + modelName); // ֪ͨ·þÎñÆ÷²¥·ÅÄ£ÐÍ } - public void OnButtonClick_Anim(string animName) - { - SendMessageToServer("Anim:" + animName); - } - - // Slider °ó¶¨µÄ·½·¨ + // »¬¿éÖµ¸Ä±äʱµ÷Óà public void OnSliderChanged(Slider slider) { - float progress = slider.value; // 0-100 - SendMessageToServer("Progress:" + progress.ToString("F2")); + isDraggingSlider = true; // ±ê¼ÇÕýÔÚÍ϶¯ + float progress = slider.value / 100f; // ת»»Îª0-1 + SendMessageToServer("Progress:" + progress.ToString("F2")); // ·¢Ëͽø¶È + Debug.Log($"SliderÍ϶¯µ½: {progress:F2}"); } + // »¬¿éÍ϶¯½áÊøÊ±µ÷Óã¨ÐèÔÚInspectorÖа󶨣© + public void OnSliderEndDrag() + { + isDraggingSlider = false; // ½áÊøÍ϶¯ + Debug.Log("SliderÍ϶¯½áÊø"); + } + + // »ñÈ¡µ±Ç°Ò³ÃæµÄSlider×é¼þ + private Slider GetCurrentPageSlider() + { + if (background == null || currentPage == "Ê×Ò³") return null; + + Transform pageTransform = background.Find(currentPage); + if (pageTransform != null) + { + Slider slider = pageTransform.GetComponentInChildren(); + if (slider != null) + { + if (!slider.interactable) + { + slider.interactable = true; // È·±£Slider¿É½»»¥ + Debug.Log($"ÆôÓÃSlider½»»¥: {currentPage}"); + } + return slider; + } + Debug.LogWarning($"δÔÚÒ³Ãæ {currentPage} ÕÒµ½Slider"); + return null; + } + Debug.LogWarning($"δÕÒµ½Ò³Ãæ {currentPage}"); + return null; + } + + // Çл»¼¤»îµÄUIÒ³Ãæ private void ShowPage(string pageName) { foreach (Transform child in background) { - child.gameObject.SetActive(child.name == pageName); + child.gameObject.SetActive(child.name == pageName); // ½ö¼¤»îÄ¿±êÒ³Ãæ } currentPage = pageName; - Debug.Log($"Çл»µ½Ò³Ã棺{pageName}"); + + // Çå¿Õ½ø¶È¶ÓÁÐÒÔ±ÜÃâ¾ÉÒ³ÃæÊý¾Ý¸ÉÈÅ + lock (queueLock) + { + progressQueue.Clear(); + } + + // ³õʼ»¯µ±Ç°Ò³ÃæµÄSlider + Slider slider = GetCurrentPageSlider(); + if (slider != null) + { + slider.value = 0f; // ÖØÖÃSliderµ½0 + slider.interactable = true; // È·±£¿É½»»¥ + // °ó¶¨OnValueChangedʼþ + slider.onValueChanged.RemoveAllListeners(); + slider.onValueChanged.AddListener((value) => OnSliderChanged(slider)); + Debug.Log($"³õʼ»¯Slider: {pageName}, Öµ: {slider.value}"); + } + + Debug.Log($"Çл»µ½Ò³Ãæ: {pageName}, Slider {(slider != null ? "ÕÒµ½" : "δÕÒµ½")}"); } + // ÔÚÖ÷Ïß³ÌÖиüÐÂSlider½ø¶È + private void Update() + { + if (isDraggingSlider) return; // Í϶¯Ê±ºöÂÔ·þÎñÆ÷½ø¶È + + float progress = 0f; + lock (queueLock) + { + if (progressQueue.Count > 0) + { + progress = progressQueue.Dequeue(); // »ñÈ¡×îнø¶È + } + } + + if (progress >= 0f) + { + Slider slider = GetCurrentPageSlider(); + if (slider != null) + { + slider.value = progress * 100f; // ¸üÐÂSliderÖµ£¨0-100£© + Debug.Log($"¸üÐÂSlider½ø¶È: {progress:F2}, SliderÖµ: {slider.value}"); + } + } + } + + // Ó¦ÓóÌÐòÍ˳öʱÇåÀí×ÊÔ´ private void OnApplicationQuit() { - udpListener?.Close(); - stream?.Close(); - client?.Close(); + udpCts.Cancel(); // ֪ͨUDPÏß³ÌÍ£Ö¹ + receiveCts.Cancel(); // ֪ͨ½ÓÊÕÏß³ÌÍ£Ö¹ + if (udpThread != null && udpThread.IsAlive) + { + udpThread.Join(1000); // µÈ´ýUDPÏ߳̽áÊø + } + if (receiveThread != null && receiveThread.IsAlive) + { + receiveThread.Join(1000); // µÈ´ý½ÓÊÕÏ߳̽áÊø + } + udpListener?.Close(); // ¹Ø±ÕUDP¼àÌýÆ÷ + stream?.Close(); // ¹Ø±ÕTCPÁ÷ + client?.Close(); // ¹Ø±ÕTCP¿Í»§¶Ë } -} +} \ No newline at end of file diff --git a/Assets/部件结构展示/整体结构展示.controller b/Assets/部件结构展示/整体结构展示.controller index 88dc366..a6aac2f 100644 --- a/Assets/部件结构展示/整体结构展示.controller +++ b/Assets/部件结构展示/整体结构展示.controller @@ -11,7 +11,7 @@ AnimatorStateMachine: m_ChildStates: - serializedVersion: 1 m_State: {fileID: 3642894306514449799} - m_Position: {x: 200, y: 0, z: 0} + m_Position: {x: 280, y: 70, z: 0} m_ChildStateMachines: [] m_AnyStateTransitions: [] m_EntryTransitions: [] diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 6786458..e7de178 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -5,10 +5,10 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: - - enabled: 1 + - enabled: 0 path: Assets/Scenes/DisplayScene.unity guid: 9fc0d4010bbf28b4594072e72b8655ab - - enabled: 0 + - enabled: 1 path: Assets/Scenes/ControlScene.unity guid: 02ef5fc1c6d30b4418b28a537c837315 m_configObjects: {} diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index 52ff818..4cf705a 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -6,13 +6,16 @@ EditorUserSettings: serializedVersion: 4 m_ConfigSettings: RecentlyUsedSceneGuid-0: - value: 5303510050530a0a0e58087140210b44474f1a78742973637a2a4560b5b3656d + value: 5b08575357065d085f0c587114725c44154e4e2e297f72347a7c4e31e4b66661 flags: 0 RecentlyUsedSceneGuid-1: - value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a + value: 54035756510d5a0c095f0d7414760b4446154b782e7b7063752a1b62e7b5363b flags: 0 RecentlyUsedSceneGuid-2: - value: 5b08575357065d085f0c587114725c44154e4e2e297f72347a7c4e31e4b66661 + value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a + flags: 0 + RecentlyUsedSceneGuid-3: + value: 5303510050530a0a0e58087140210b44474f1a78742973637a2a4560b5b3656d flags: 0 vcSharedLogLevel: value: 0d5e400f0650 diff --git a/UserSettings/Layouts/default-2021.dwlt b/UserSettings/Layouts/default-2021.dwlt index eae1ad2..5307226 100644 --- a/UserSettings/Layouts/default-2021.dwlt +++ b/UserSettings/Layouts/default-2021.dwlt @@ -19,7 +19,7 @@ MonoBehaviour: width: 1536 height: 772.8 m_ShowMode: 4 - m_Title: Project + m_Title: Scene m_RootView: {fileID: 2} m_MinSize: {x: 875, y: 300} m_MaxSize: {x: 10000, y: 10000} @@ -99,7 +99,7 @@ MonoBehaviour: m_MinSize: {x: 300, y: 200} m_MaxSize: {x: 24288, y: 16192} vertical: 0 - controlID: 52 + controlID: 58 --- !u!114 &5 MonoBehaviour: m_ObjectHideFlags: 52 @@ -131,23 +131,25 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 1 m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} - m_Name: GameView + m_Name: SceneView m_EditorClassIdentifier: m_Children: [] m_Position: serializedVersion: 2 x: 0 y: 0 - width: 854.4 + width: 890.4 height: 722.8 - m_MinSize: {x: 200, y: 200} - m_MaxSize: {x: 4000, y: 4000} + m_MinSize: {x: 201, y: 221} + m_MaxSize: {x: 4001, y: 4021} m_ActualView: {fileID: 15} m_Panes: - - {fileID: 13} - {fileID: 15} - m_Selected: 1 - m_LastSelected: 0 + - {fileID: 17} + - {fileID: 12} + - {fileID: 11} + m_Selected: 0 + m_LastSelected: 1 --- !u!114 &7 MonoBehaviour: m_ObjectHideFlags: 52 @@ -165,14 +167,14 @@ MonoBehaviour: - {fileID: 10} m_Position: serializedVersion: 2 - x: 854.4 + x: 890.4 y: 0 - width: 327.19995 + width: 242.40002 height: 722.8 m_MinSize: {x: 100, y: 200} m_MaxSize: {x: 8096, y: 16192} vertical: 1 - controlID: 58 + controlID: 31 --- !u!114 &8 MonoBehaviour: m_ObjectHideFlags: 52 @@ -183,20 +185,20 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 1 m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} - m_Name: + m_Name: InspectorWindow m_EditorClassIdentifier: m_Children: [] m_Position: serializedVersion: 2 - x: 1181.6 + x: 1132.8 y: 0 - width: 354.40002 + width: 403.19995 height: 722.8 - m_MinSize: {x: 275, y: 50} - m_MaxSize: {x: 4000, y: 4000} - m_ActualView: {fileID: 11} + m_MinSize: {x: 276, y: 71} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 13} m_Panes: - - {fileID: 11} + - {fileID: 13} m_Selected: 0 m_LastSelected: 0 --- !u!114 &9 @@ -216,13 +218,13 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 327.19995 - height: 318.4 - m_MinSize: {x: 200, y: 200} - m_MaxSize: {x: 4000, y: 4000} - m_ActualView: {fileID: 14} + width: 242.40002 + height: 538.4 + m_MinSize: {x: 202, y: 221} + m_MaxSize: {x: 4002, y: 4021} + m_ActualView: {fileID: 16} m_Panes: - - {fileID: 14} + - {fileID: 16} m_Selected: 0 m_LastSelected: 0 --- !u!114 &10 @@ -235,23 +237,188 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 1 m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} - m_Name: + m_Name: ProjectBrowser m_EditorClassIdentifier: m_Children: [] m_Position: serializedVersion: 2 x: 0 - y: 318.4 - width: 327.19995 - height: 404.4 + y: 538.4 + width: 242.40002 + height: 184.39996 m_MinSize: {x: 232, y: 271} m_MaxSize: {x: 10002, y: 10021} - m_ActualView: {fileID: 12} + m_ActualView: {fileID: 14} m_Panes: - - {fileID: 12} + - {fileID: 14} m_Selected: 0 m_LastSelected: 0 --- !u!114 &11 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12071, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 100, y: 100} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Animation + m_Image: {fileID: -3237396543322336831, guid: 0000000000000000d000000000000000, type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 0 + y: 73.6 + width: 959 + height: 701.8 + m_ViewDataDictionary: {fileID: 0} + m_OverlayCanvas: + m_LastAppliedPresetName: Default + m_SaveData: [] + m_OverlaysVisible: 1 + m_LockTracker: + m_IsLocked: 0 + m_LastSelectedObjectID: 1946270 +--- !u!114 &12 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12914, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 100, y: 100} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Animator + m_Image: {fileID: 1711060831702674872, guid: 0000000000000000d000000000000000, type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 0 + y: 73.6 + width: 1186.2 + height: 989.80005 + m_ViewDataDictionary: {fileID: 0} + m_OverlayCanvas: + m_LastAppliedPresetName: Default + m_SaveData: [] + m_OverlaysVisible: 1 + m_ViewTransforms: + m_KeySerializationHelper: + - {fileID: 7740452523822912909, guid: d309f9bd8867c9e4bbc65de948c10ba0, type: 2} + - {fileID: 9160858644863225337, guid: d24fb50d1b81f3d4fb77b59f298c6391, type: 2} + - {fileID: -5493858010228640296, guid: da2d18bdd63eddf4db4344988663132b, type: 2} + - {fileID: -5073058742846949024, guid: 9a5ed5f9dc25f9b498cfc53347cb4567, type: 2} + - {fileID: -2230655706508628860, guid: c06c13b013fc9334096e1edcfb15e759, type: 2} + m_ValueSerializationHelper: + - e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + - e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + - e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + - e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + - e00: 0.81218034 + e01: 0 + e02: 0 + e03: 88.79291 + e10: 0 + e11: 0.81218034 + e12: 0 + e13: 49.59546 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_PreviewAnimator: {fileID: 0} + m_AnimatorController: {fileID: 9100000, guid: da2d18bdd63eddf4db4344988663132b, type: 2} + m_BreadCrumbs: + - m_Target: {fileID: -5493858010228640296, guid: da2d18bdd63eddf4db4344988663132b, type: 2} + m_ScrollPosition: {x: 0, y: 0} + stateMachineGraph: {fileID: 0} + stateMachineGraphGUI: {fileID: 0} + blendTreeGraph: {fileID: 0} + blendTreeGraphGUI: {fileID: 0} + m_AutoLiveLink: 1 + m_MiniTool: 0 + m_LockTracker: + m_IsLocked: 0 + m_CurrentEditor: 0 + m_LayerEditor: + m_SelectedLayerIndex: 0 +--- !u!114 &13 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -271,9 +438,9 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 1181.6 + x: 1132.8 y: 73.6 - width: 353.40002 + width: 402.19995 height: 701.8 m_ViewDataDictionary: {fileID: 0} m_OverlayCanvas: @@ -293,7 +460,7 @@ MonoBehaviour: m_LockTracker: m_IsLocked: 0 m_PreviewWindow: {fileID: 0} ---- !u!114 &12 +--- !u!114 &14 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -313,10 +480,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 854.4 - y: 392 - width: 325.19995 - height: 383.4 + x: 890.4 + y: 612 + width: 240.40002 + height: 163.39996 m_ViewDataDictionary: {fileID: 0} m_OverlayCanvas: m_LastAppliedPresetName: Default @@ -333,7 +500,7 @@ MonoBehaviour: m_SkipHidden: 0 m_SearchArea: 1 m_Folders: - - Assets/Scripts + - Assets/Scenes m_Globs: [] m_OriginalText: m_FilterByTypeIntersection: 0 @@ -348,7 +515,7 @@ MonoBehaviour: scrollPos: {x: 0, y: 0} m_SelectedIDs: 7c780000 m_LastClickedID: 30844 - m_ExpandedIDs: 00000000da460100dc460100de460100e0460100e2460100e4460100 + m_ExpandedIDs: 0000000024ac010026ac010028ac01002aac01002cac01002eac010030ac0100 m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -373,10 +540,10 @@ MonoBehaviour: m_Icon: {fileID: 0} m_ResourceFile: m_AssetTreeState: - scrollPos: {x: 0, y: 58.600006} + scrollPos: {x: 0, y: 300} m_SelectedIDs: m_LastClickedID: 0 - m_ExpandedIDs: ffffffff00000000da460100dc460100de460100e0460100e2460100e4460100 + m_ExpandedIDs: ffffffff0000000024ac010026ac010028ac01002aac01002cac01002eac010030ac0100 m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -432,7 +599,7 @@ MonoBehaviour: m_GridSize: 64 m_SkipHiddenPackages: 0 m_DirectoriesAreaWidth: 115 ---- !u!114 &13 +--- !u!114 &15 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -454,7 +621,7 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 73.6 - width: 853.4 + width: 889.4 height: 701.8 m_ViewDataDictionary: {fileID: 0} m_OverlayCanvas: @@ -465,8 +632,8 @@ MonoBehaviour: floating: 0 collapsed: 0 displayed: 1 - snapOffset: {x: -100, y: -25.599976} - snapOffsetDelta: {x: 0, y: 0} + snapOffset: {x: -100, y: -25.600006} + snapOffsetDelta: {x: 0, y: 0.000030517578} snapCorner: 3 id: Tool Settings index: 0 @@ -476,9 +643,9 @@ MonoBehaviour: floating: 0 collapsed: 0 displayed: 1 - snapOffset: {x: -141, y: 149} + snapOffset: {x: -141, y: -199.79999} snapOffsetDelta: {x: 0, y: 0} - snapCorner: 1 + snapCorner: 3 id: unity-grid-and-snap-toolbar index: 1 layout: 1 @@ -702,9 +869,9 @@ MonoBehaviour: m_PlayAudio: 0 m_AudioPlay: 0 m_Position: - m_Target: {x: -32.778976, y: -9.8186455, z: 49.312233} + m_Target: {x: 1664, y: 676, z: 0} speed: 2 - m_Value: {x: -32.778976, y: -9.8186455, z: 49.312233} + m_Value: {x: 1663.9999, y: 675.99994, z: 0.0000059604645} m_RenderMode: 0 m_CameraMode: drawMode: 0 @@ -751,20 +918,20 @@ MonoBehaviour: m_GridAxis: 1 m_gridOpacity: 0.5 m_Rotation: - m_Target: {x: 0.33473206, y: 0.41149613, z: -0.16586047, w: 0.8314923} + m_Target: {x: 0.0725394, y: -0.011645896, z: 0.00085166015, w: 0.99730253} speed: 2 - m_Value: {x: 0.33468792, y: 0.4114419, z: -0.16583861, w: 0.8313827} + m_Value: {x: -0.072539404, y: 0.011645896, z: -0.00085166015, w: -0.99730253} m_Size: - m_Target: 65.2069 + m_Target: 1564.3491 speed: 2 - m_Value: 65.2069 + m_Value: 1638.0619 m_Ortho: - m_Target: 1 + m_Target: 0 speed: 2 - m_Value: 1 + m_Value: 0 m_CameraSettings: - m_Speed: 0.8259 - m_SpeedNormalized: 0.41 + m_Speed: 0.7662 + m_SpeedNormalized: 0.38 m_SpeedMin: 0.01 m_SpeedMax: 2 m_EasingEnabled: 1 @@ -775,14 +942,14 @@ MonoBehaviour: m_FarClip: 10000 m_DynamicClip: 1 m_OcclusionCulling: 0 - m_LastSceneViewRotation: {x: -0.015598819, y: -0.0035844787, z: -0.00010052163, w: 0.99997914} - m_LastSceneViewOrtho: 1 + m_LastSceneViewRotation: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226} + m_LastSceneViewOrtho: 0 m_ReplacementShader: {fileID: 0} m_ReplacementString: m_SceneVisActive: 1 m_LastLockedObject: {fileID: 0} m_ViewIsLockedToObject: 0 ---- !u!114 &14 +--- !u!114 &16 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -802,10 +969,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 854.4 + x: 890.4 y: 73.6 - width: 325.19995 - height: 297.4 + width: 240.40002 + height: 517.4 m_ViewDataDictionary: {fileID: 0} m_OverlayCanvas: m_LastAppliedPresetName: Default @@ -814,9 +981,9 @@ MonoBehaviour: m_SceneHierarchy: m_TreeViewState: scrollPos: {x: 0, y: 0} - m_SelectedIDs: ae490000 - m_LastClickedID: 0 - m_ExpandedIDs: 34fbfffff257000024580000 + m_SelectedIDs: 9eb00100 + m_LastClickedID: 110750 + m_ExpandedIDs: 8e3affff08fbffff m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -840,7 +1007,7 @@ MonoBehaviour: m_IsLocked: 0 m_CurrentSortingName: TransformSorting m_WindowGUID: 733c28ef5d2030949b73c3d6246d5565 ---- !u!114 &15 +--- !u!114 &17 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -862,7 +1029,7 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 73.6 - width: 853.4 + width: 889.4 height: 701.8 m_ViewDataDictionary: {fileID: 0} m_OverlayCanvas: @@ -913,10 +1080,10 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 21 - width: 853.4 + width: 889.4 height: 680.8 - m_Scale: {x: 0.32053787, y: 0.32053787} - m_Translation: {x: 426.70004, y: 340.4} + m_Scale: {x: 0.33405948, y: 0.33405948} + m_Translation: {x: 444.7, y: 340.4} m_MarginLeft: 0 m_MarginRight: 0 m_MarginTop: 0 @@ -924,12 +1091,12 @@ MonoBehaviour: m_LastShownAreaInsideMargins: serializedVersion: 2 x: -1331.2001 - y: -1061.965 + y: -1018.9802 width: 2662.4001 - height: 2123.93 + height: 2037.9604 m_MinimalGUI: 1 - m_defaultScale: 0.32053787 - m_LastWindowPixelSize: {x: 1066.75, y: 877.25} + m_defaultScale: 0.33405948 + m_LastWindowPixelSize: {x: 1111.75, y: 877.25} m_ClearInEditMode: 1 m_NoCameraWarning: 1 m_LowResolutionForAspectRatios: 00000000000000000000