UI基本完成

This commit is contained in:
XgC2961 2025-08-30 15:33:51 +08:00
parent c7d2ecea3d
commit 1dd92333ae
8 changed files with 9733 additions and 9180 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,47 +1,50 @@
using UnityEngine;
using System.Net.Sockets;
using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System;
using UnityEngine;
public class BroadcastServer : MonoBehaviour
{
private UdpClient udpBroadcaster; // 用于广播本地IP的UDP客户端
private Thread broadcastThread; // 运行广播循环的线程
private CancellationTokenSource cts = new CancellationTokenSource(); // 控制线程取消
private volatile bool isRunning = true; // 控制广播循环的线程安全标志
private UdpClient udpClient; // 用于发送广播的UDP客户端
private Thread broadcastThread; // 广播线程
private volatile bool isRunning = true; // 线程安全的运行标志
// 脚本启动时调用
void Start()
{
// 初始化UDP客户端并启用广播
udpBroadcaster = new UdpClient();
udpBroadcaster.EnableBroadcast = true;
udpClient = new UdpClient();
udpClient.EnableBroadcast = true;
// 启动新线程以广播本地IP
broadcastThread = new Thread(() => BroadcastIP(cts.Token));
// 启动广播线程
broadcastThread = new Thread(BroadcastIP);
broadcastThread.Start();
Debug.Log("显示端正在广播IP...");
Debug.Log("广播服务器已启动");
}
// 定期广播本地IP地址
private void BroadcastIP(CancellationToken token)
// 广播显示端服务器的IP地址
private void BroadcastIP()
{
// 定义广播端点IP: 255.255.255.255,端口: 9999
IPEndPoint endPoint = new IPEndPoint(IPAddress.Broadcast, 9999);
string localIP = GetLocalIPAddress(); // 获取本地IPv4地址
string localIP = GetLocalIPAddress();
if (string.IsNullOrEmpty(localIP))
{
Debug.LogError("无法获取本地IP地址");
return;
}
// 在未取消的情况下持续广播
while (!token.IsCancellationRequested && isRunning)
string message = $"ServerIP:{localIP}";
byte[] data = Encoding.UTF8.GetBytes(message);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Broadcast, 8887);
while (isRunning)
{
try
{
// 将IP地址转换为字节并通过UDP发送
byte[] data = Encoding.UTF8.GetBytes(localIP);
udpBroadcaster.Send(data, data.Length, endPoint);
Thread.Sleep(2000); // 每2秒广播一次减少网络负载
udpClient.Send(data, data.Length, endPoint);
Debug.Log($"广播IP: {message}");
Thread.Sleep(1000); // 每秒广播一次
}
catch (Exception ex)
{
@ -50,30 +53,40 @@ public class BroadcastServer : MonoBehaviour
}
}
// 获取本机的IPv4地址
// 获取本地IP地址
private string GetLocalIPAddress()
{
string localIP = "127.0.0.1"; // 如果未找到有效IP则回退到本地回环地址
foreach (var ip in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
try
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
foreach (var networkInterface in NetworkInterface.GetAllNetworkInterfaces())
{
localIP = ip.ToString(); // 使用找到的第一个IPv4地址
break;
if (networkInterface.OperationalStatus == OperationalStatus.Up)
{
foreach (var unicastIPAddress in networkInterface.GetIPProperties().UnicastAddresses)
{
if (unicastIPAddress.Address.AddressFamily == AddressFamily.InterNetwork)
{
return unicastIPAddress.Address.ToString();
}
}
}
}
}
return localIP;
catch (Exception ex)
{
Debug.LogError($"获取IP地址错误: {ex.Message}");
}
return "";
}
// 应用程序退出时清理资源
private void OnApplicationQuit()
{
isRunning = false; // 通知广播循环停止
cts.Cancel(); // 请求线程取消
udpBroadcaster?.Close(); // 关闭UDP客户端
isRunning = false;
udpClient?.Close();
if (broadcastThread != null && broadcastThread.IsAlive)
{
broadcastThread.Join(1000); // 等待线程结束超时1秒
broadcastThread.Join(1000); // 等待线程结束
}
}
}

View File

@ -5,6 +5,7 @@ using System.Text;
using System.Threading;
using System.Collections.Generic;
using System;
using UnityEngine.UI;
public class DisplayServer : MonoBehaviour
{
@ -35,6 +36,10 @@ public class DisplayServer : MonoBehaviour
private float sendInterval = 0.05f; // 进度发送间隔(秒)
private float lastSentProgress = 0f; // 记录上次发送的进度
[Header("Background Sprites")]
public Sprite textBackgroundSprite; // 有文字时的背景Sprite
public Sprite noTextBackgroundSprite; // 无文字时的背景Sprite
// 脚本启动时调用
void Start()
{
@ -167,6 +172,18 @@ public class DisplayServer : MonoBehaviour
isClientDragging = false; // 客户端拖动结束
Debug.Log("客户端Slider拖动结束");
}
else if (msg.StartsWith("TextPanel:"))
{
string command = msg.Replace("TextPanel:", "");
SetTextPanelVisibility(command == "Show");
Debug.Log($"处理文字面板消息: {msg}");
}
else if (msg.StartsWith("Background:"))
{
string command = msg.Replace("Background:", "");
SetBackgroundSprite(command == "Text");
Debug.Log($"处理背景消息: {msg}");
}
}
// 仅当动画播放且客户端未拖动时发送进度,且限制发送频率
@ -242,6 +259,11 @@ public class DisplayServer : MonoBehaviour
}
}
}
// 初始化文字面板为显示
SetTextPanelVisibility(true);
// 初始化背景为有文字背景
SetBackgroundSprite(true);
Debug.Log($"显示端切换到页面: {pageName}");
}
@ -292,6 +314,65 @@ public class DisplayServer : MonoBehaviour
}
}
// 设置当前页面文字面板的显隐
private void SetTextPanelVisibility(bool isVisible)
{
if (background == null || currentPage == "首页") return;
Transform pageTransform = background.Find(currentPage);
if (pageTransform != null)
{
Transform textPanel = pageTransform.Find("TextPanel");
if (textPanel != null)
{
textPanel.gameObject.SetActive(isVisible);
Debug.Log($"设置页面 {currentPage} 文字面板显隐: {isVisible}");
}
else
{
Debug.LogWarning($"未在页面 {currentPage} 找到TextPanel");
}
}
else
{
Debug.LogWarning($"未找到页面 {currentPage}");
}
}
// 设置当前页面背景的Sprite
private void SetBackgroundSprite(bool hasText)
{
if (background == null || currentPage == "首页") return;
Transform pageTransform = background.Find(currentPage);
if (pageTransform != null)
{
Transform backgroundTransform = pageTransform.Find("PageBackground");
if (backgroundTransform != null)
{
Image backgroundImage = backgroundTransform.GetComponent<Image>();
if (backgroundImage != null)
{
Sprite newSprite = hasText ? textBackgroundSprite : noTextBackgroundSprite;
backgroundImage.sprite = newSprite;
Debug.Log($"设置页面 {currentPage} 背景: {(newSprite != null ? newSprite.name : "null")}");
}
else
{
Debug.LogWarning($"页面 {currentPage} 的PageBackground未找到Image组件");
}
}
else
{
Debug.LogWarning($"未在页面 {currentPage} 找到PageBackground");
}
}
else
{
Debug.LogWarning($"未找到页面 {currentPage}");
}
}
// 处理动画结束事件
private void OnModelAnimationFinished()
{

View File

@ -1,190 +1,79 @@
using UnityEngine;
using System.Collections.Generic;
using System;
public class ModelController : MonoBehaviour
{
private Animator animator; // 控制动画的Animator组件
private string currentAnim = ""; // 跟踪当前播放的动画
private bool isPlaying = false; // 跟踪动画播放状态
private Animator animator; // 用于控制动画
public delegate void AnimationFinished(); // 动画结束事件
public event AnimationFinished OnAnimationFinished; // 动画结束事件
[Header("默认动画状态名称")]
public string defaultAnimName = "Take 001"; // 默认动画状态名称
private Dictionary<string, int> stateHashes = new Dictionary<string, int>(); // 动画状态哈希缓存
private float lastLoggedProgress = -1f; // 记录上次日志的进度值
private float lastWarningTime = 0f; // 记录上次警告日志时间
private const float warningInterval = 1f; // 警告日志间隔(秒)
// 动画结束事件
public event Action OnAnimationFinished;
// 脚本初始化时调用
void Awake()
// 脚本启动时调用
void Start()
{
animator = GetComponent<Animator>();
// 缓存默认动画状态的哈希值以提高性能
if (!string.IsNullOrEmpty(defaultAnimName))
if (animator == null)
{
stateHashes[defaultAnimName] = Animator.StringToHash(defaultAnimName);
Debug.LogError($"模型 {gameObject.name} 未找到Animator组件");
}
}
// 在Update中更新动画状态
void Update()
{
if (isPlaying && animator != null && !string.IsNullOrEmpty(currentAnim))
{
if (!animator.enabled)
{
animator.enabled = true; // 确保Animator启用
Debug.Log($"重新启用Animator: {currentAnim}");
}
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
if (stateInfo.IsName(currentAnim) && stateInfo.normalizedTime >= 1f)
{
// 动画播放完成,暂停并标记
animator.enabled = false;
isPlaying = false;
OnAnimationFinished?.Invoke(); // 通知动画结束
Debug.Log($"动画 {currentAnim} 播放完成,暂停");
}
}
}
/// <summary>
/// 从头播放默认动画
/// </summary>
// 播放动画
public void PlayAnimation()
{
if (animator == null || string.IsNullOrEmpty(defaultAnimName)) return;
if (!AnimatorHasState(defaultAnimName))
if (animator != null)
{
Debug.LogWarning($"Animator上不存在状态: {defaultAnimName}");
return;
animator.Play("Base Layer.AnimationName", 0, 0f); // 替换为实际动画名称
Debug.Log($"模型 {gameObject.name} 开始播放动画");
}
currentAnim = defaultAnimName;
animator.enabled = true;
animator.Play(currentAnim, 0, 0f); // 从头播放动画
animator.Update(0f); // 强制立即更新
isPlaying = true; // 标记动画正在播放
Debug.Log($"开始播放动画: {currentAnim}");
}
/// <summary>
/// 设置动画进度0到1
/// </summary>
public void SetAnimationProgress(float normalizedTime)
// 设置动画进度
public void SetAnimationProgress(float progress)
{
if (animator == null || string.IsNullOrEmpty(defaultAnimName)) return;
if (!gameObject.activeSelf) return;
// 确保currentAnim已设置
if (string.IsNullOrEmpty(currentAnim))
if (animator != null)
{
currentAnim = defaultAnimName;
Debug.Log($"设置动画进度前初始化currentAnim: {currentAnim}");
animator.Play("Base Layer.AnimationName", 0, progress); // 替换为实际动画名称
animator.speed = 0f; // 暂停动画以保持进度
Debug.Log($"模型 {gameObject.name} 设置动画进度: {progress:F2}");
}
if (!AnimatorHasState(currentAnim))
{
Debug.LogWarning($"Animator上不存在状态: {currentAnim}");
return;
}
// 停止播放状态
isPlaying = false;
animator.enabled = true;
float clampedTime = Mathf.Clamp01(normalizedTime);
animator.Play(currentAnim, 0, clampedTime); // 设置动画到指定时间
animator.Update(0f); // 强制立即更新
animator.enabled = false; // 暂停动画
Debug.Log($"设置动画 {currentAnim} 进度: {clampedTime:F2}");
}
/// <summary>
/// 重置动画到初始状态
/// </summary>
// 重置动画
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, 0, 0f); // 重置到开始
animator.Update(0f); // 强制立即更新
animator.enabled = false; // 暂停动画
isPlaying = false; // 标记动画暂停
Debug.Log($"重置动画: {currentAnim}");
if (animator != null)
{
animator.Play("Base Layer.AnimationName", 0, 0f); // 替换为实际动画名称
animator.speed = 1f; // 恢复正常播放速度
Debug.Log($"模型 {gameObject.name} 重置动画");
}
}
/// <summary>
/// 获取当前动画的标准化时间0到1
/// </summary>
/// <returns>当前动画进度若无动画则返回0</returns>
public float GetAnimationProgress()
// 检查动画是否正在播放
public bool IsPlayingAnimation()
{
if (animator == null || !animator.enabled || string.IsNullOrEmpty(currentAnim) || !gameObject.activeSelf)
if (animator != null)
{
if (Time.time - lastWarningTime >= warningInterval)
{
Debug.LogWarning($"无法获取动画进度: animator={animator}, enabled={animator?.enabled}, currentAnim={currentAnim}, active={gameObject.activeSelf}");
lastWarningTime = Time.time;
}
return 0f;
}
if (!AnimatorHasState(currentAnim))
{
if (Time.time - lastWarningTime >= warningInterval)
{
Debug.LogWarning($"Animator上不存在状态: {currentAnim}");
lastWarningTime = Time.time;
}
return 0f;
}
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
if (stateInfo.IsName(currentAnim))
{
float progress = Mathf.Clamp01(stateInfo.normalizedTime % 1f);
// 仅当进度变化超过0.01时记录日志
if (Mathf.Abs(progress - lastLoggedProgress) > 0.01f)
{
Debug.Log($"获取动画 {currentAnim} 进度: {progress:F2}");
lastLoggedProgress = progress;
}
return progress;
}
if (Time.time - lastWarningTime >= warningInterval)
{
Debug.LogWarning($"动画状态不匹配: currentAnim={currentAnim}, state={stateInfo.fullPathHash}");
lastWarningTime = Time.time;
}
return 0f;
}
// 检查指定的动画状态是否存在于Animator中
private bool AnimatorHasState(string stateName)
{
if (stateHashes.TryGetValue(stateName, out int hash))
{
for (int i = 0; i < animator.layerCount; i++)
{
if (animator.HasState(i, hash)) return true;
}
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
return stateInfo.normalizedTime < 1.0f && animator.speed > 0f;
}
return false;
}
// 获取动画播放状态
public bool IsPlayingAnimation()
// 获取当前动画进度
public float GetAnimationProgress()
{
return isPlaying;
if (animator != null)
{
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
return Mathf.Clamp01(stateInfo.normalizedTime);
}
return 0f;
}
// 动画结束时调用需在Animator中设置
public void OnAnimationEnd()
{
OnAnimationFinished?.Invoke();
Debug.Log($"模型 {gameObject.name} 动画播放完成");
}
}

View File

@ -4,6 +4,7 @@ using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
@ -28,6 +29,10 @@ public class TouchClient : MonoBehaviour
private bool isDraggingSlider = false; // 标记是否正在拖动Slider
private float lastSentProgress = 0f; // 记录最后发送的进度
[Header("Text Panel Toggle Sprites")]
public Sprite showSprite; // 显示状态的Sprite
public Sprite hideSprite; // 隐藏状态的Sprite
// 脚本启动时调用
void Start()
{
@ -207,6 +212,41 @@ public class TouchClient : MonoBehaviour
Debug.Log("Slider拖动结束");
}
// 文字面板Toggle状态改变时调用
public void OnTextPanelToggleChanged(Toggle toggle)
{
if (toggle == null) return;
bool isTextPanelVisible = toggle.isOn;
Image toggleImage = toggle.graphic as Image; // 使用Toggle的graphic字段
TextMeshProUGUI toggleText = toggle.GetComponentInChildren<TextMeshProUGUI>();
if (toggleImage != null)
{
toggleImage.sprite = isTextPanelVisible ? showSprite : hideSprite;
Debug.Log($"Toggle sprite 切换: {currentPage}, isOn={isTextPanelVisible}, sprite={(isTextPanelVisible ? showSprite : hideSprite).name}");
}
else
{
Debug.LogWarning($"Toggle {toggle.name} 未找到graphic Image组件");
}
if (toggleText != null)
{
toggleText.text = isTextPanelVisible ? "显示文字" : "隐藏文字";
Debug.Log($"Toggle 文本更新: {currentPage}, text={toggleText.text}");
}
else
{
Debug.LogWarning($"Toggle {toggle.name} 未找到TextMeshProUGUI组件");
}
// 发送显隐消息到显示端
string message = isTextPanelVisible ? "TextPanel:Show" : "TextPanel:Hide";
SendMessageToServer(message);
Debug.Log($"文字面板Toggle切换: {message}");
}
// 获取当前页面的Slider组件
private Slider GetCurrentPageSlider()
{
@ -232,6 +272,31 @@ public class TouchClient : MonoBehaviour
return null;
}
// 获取当前页面的TextPanelToggle组件
private Toggle GetCurrentPageTextPanelToggle()
{
if (background == null || currentPage == "首页") return null;
Transform pageTransform = background.Find(currentPage);
if (pageTransform != null)
{
Toggle toggle = pageTransform.GetComponentInChildren<Toggle>();
if (toggle != null)
{
if (!toggle.interactable)
{
toggle.interactable = true; // 确保Toggle可交互
Debug.Log($"启用TextPanelToggle交互: {currentPage}");
}
return toggle;
}
Debug.LogWarning($"未在页面 {currentPage} 找到TextPanelToggle");
return null;
}
Debug.LogWarning($"未找到页面 {currentPage}");
return null;
}
// 切换激活的UI页面
private void ShowPage(string pageName)
{
@ -264,7 +329,46 @@ public class TouchClient : MonoBehaviour
Debug.Log($"初始化Slider: {pageName}, 值: {slider.value}");
}
Debug.Log($"切换到页面: {pageName}, Slider {(slider != null ? "" : "")}");
// 初始化当前页面的TextPanelToggle
Toggle toggle = GetCurrentPageTextPanelToggle();
if (toggle != null)
{
// 临时禁用OnValueChanged以防止初始化触发
var onValueChanged = toggle.onValueChanged;
toggle.onValueChanged = new Toggle.ToggleEvent();
toggle.isOn = true; // 默认显示文字面板
toggle.interactable = true; // 确保可交互
// 更新Sprite和文本
Image toggleImage = toggle.graphic as Image; // 使用Toggle的graphic字段
TextMeshProUGUI toggleText = toggle.GetComponentInChildren<TextMeshProUGUI>();
if (toggleImage != null)
{
toggleImage.sprite = showSprite;
Debug.Log($"初始化Toggle sprite: {pageName}, sprite={showSprite.name}");
}
else
{
Debug.LogWarning($"Toggle {toggle.name} 未找到graphic Image组件");
}
if (toggleText != null)
{
toggleText.text = "显示文字";
Debug.Log($"初始化Toggle 文本: {pageName}, text={toggleText.text}");
}
else
{
Debug.LogWarning($"Toggle {toggle.name} 未找到TextMeshProUGUI组件");
}
// 恢复OnValueChanged并绑定
toggle.onValueChanged = onValueChanged;
toggle.onValueChanged.RemoveAllListeners();
toggle.onValueChanged.AddListener((value) => OnTextPanelToggleChanged(toggle));
// 发送初始显隐状态
SendMessageToServer("TextPanel:Show");
Debug.Log($"初始化TextPanelToggle: {pageName}, isOn: {toggle.isOn}");
}
Debug.Log($"切换到页面: {pageName}, Slider {(slider != null ? "" : "")}, TextPanelToggle {(toggle != null ? "" : "")}");
}
// 在主线程中更新Slider进度

View File

@ -12,10 +12,10 @@ EditorUserSettings:
value: 54035756510d5a0c095f0d7414760b4446154b782e7b7063752a1b62e7b5363b
flags: 0
RecentlyUsedSceneGuid-2:
value: 5303510050530a0a0e58087140210b44474f1a78742973637a2a4560b5b3656d
value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a
flags: 0
RecentlyUsedSceneGuid-3:
value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a
value: 5303510050530a0a0e58087140210b44474f1a78742973637a2a4560b5b3656d
flags: 0
vcSharedLogLevel:
value: 0d5e400f0650

View File

@ -99,7 +99,7 @@ MonoBehaviour:
m_MinSize: {x: 300, y: 200}
m_MaxSize: {x: 24288, y: 16192}
vertical: 0
controlID: 70
controlID: 17
--- !u!114 &5
MonoBehaviour:
m_ObjectHideFlags: 52
@ -138,7 +138,7 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 0
width: 890.4
width: 854.4
height: 722.8
m_MinSize: {x: 201, y: 221}
m_MaxSize: {x: 4001, y: 4021}
@ -167,14 +167,14 @@ MonoBehaviour:
- {fileID: 10}
m_Position:
serializedVersion: 2
x: 890.4
x: 854.4
y: 0
width: 242.40002
width: 278.40002
height: 722.8
m_MinSize: {x: 100, y: 200}
m_MaxSize: {x: 8096, y: 16192}
vertical: 1
controlID: 38
controlID: 69
--- !u!114 &8
MonoBehaviour:
m_ObjectHideFlags: 52
@ -218,7 +218,7 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 0
width: 242.40002
width: 278.40002
height: 400.8
m_MinSize: {x: 202, y: 221}
m_MaxSize: {x: 4002, y: 4021}
@ -244,7 +244,7 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 400.8
width: 242.40002
width: 278.40002
height: 322
m_MinSize: {x: 232, y: 271}
m_MaxSize: {x: 10002, y: 10021}
@ -284,7 +284,7 @@ MonoBehaviour:
m_OverlaysVisible: 1
m_LockTracker:
m_IsLocked: 0
m_LastSelectedObjectID: 656666
m_LastSelectedObjectID: 540690
--- !u!114 &12
MonoBehaviour:
m_ObjectHideFlags: 52
@ -307,8 +307,8 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 73.6
width: 1186.2
height: 989.80005
width: 853.4
height: 701.8
m_ViewDataDictionary: {fileID: 0}
m_OverlayCanvas:
m_LastAppliedPresetName: Default
@ -403,9 +403,9 @@ MonoBehaviour:
e32: 0
e33: 1
m_PreviewAnimator: {fileID: 0}
m_AnimatorController: {fileID: 9100000, guid: da2d18bdd63eddf4db4344988663132b, type: 2}
m_AnimatorController: {fileID: 9100000, guid: c06c13b013fc9334096e1edcfb15e759, type: 2}
m_BreadCrumbs:
- m_Target: {fileID: -5493858010228640296, guid: da2d18bdd63eddf4db4344988663132b, type: 2}
- m_Target: {fileID: -2230655706508628860, guid: c06c13b013fc9334096e1edcfb15e759, type: 2}
m_ScrollPosition: {x: 0, y: 0}
stateMachineGraph: {fileID: 0}
stateMachineGraphGUI: {fileID: 0}
@ -480,9 +480,9 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 890.4
x: 854.4
y: 474.4
width: 240.40002
width: 276.40002
height: 301
m_ViewDataDictionary: {fileID: 0}
m_OverlayCanvas:
@ -515,7 +515,7 @@ MonoBehaviour:
scrollPos: {x: 0, y: 0}
m_SelectedIDs: 7c780000
m_LastClickedID: 30844
m_ExpandedIDs: 00000000745d0000765d0000785d00007a5d00007c5d00007e5d0000805d0000
m_ExpandedIDs: 000000005cac01005eac010060ac010062ac010064ac010066ac010068ac01006aac01006cac01006eac010070ac0100
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@ -540,10 +540,10 @@ MonoBehaviour:
m_Icon: {fileID: 0}
m_ResourceFile:
m_AssetTreeState:
scrollPos: {x: 0, y: 0}
scrollPos: {x: 0, y: 465}
m_SelectedIDs:
m_LastClickedID: 0
m_ExpandedIDs: ffffffff00000000745d0000765d0000785d00007a5d00007c5d00007e5d0000805d0000
m_ExpandedIDs: ffffffff000000005cac01005eac010060ac010062ac010064ac010066ac010068ac01006aac01006cac01006eac010070ac0100beac0100
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@ -621,7 +621,7 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 73.6
width: 889.4
width: 853.4
height: 701.8
m_ViewDataDictionary: {fileID: 0}
m_OverlayCanvas:
@ -864,14 +864,14 @@ MonoBehaviour:
m_OverrideSceneCullingMask: 6917529027641081856
m_SceneIsLit: 1
m_SceneLighting: 1
m_2DMode: 0
m_2DMode: 1
m_isRotationLocked: 0
m_PlayAudio: 0
m_AudioPlay: 0
m_Position:
m_Target: {x: 1470.8665, y: 599.2432, z: -36.813965}
m_Target: {x: 941.18176, y: 582.5733, z: 9.363111}
speed: 2
m_Value: {x: 1470.8665, y: 599.2432, z: -36.813965}
m_Value: {x: 917.83325, y: 594.0318, z: 8.957989}
m_RenderMode: 0
m_CameraMode:
drawMode: 0
@ -900,17 +900,17 @@ MonoBehaviour:
m_Size: {x: 0, y: 0}
yGrid:
m_Fade:
m_Target: 1
m_Target: 0
speed: 2
m_Value: 1
m_Value: 0
m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4}
m_Pivot: {x: 0, y: 0, z: 0}
m_Size: {x: 1, y: 1}
zGrid:
m_Fade:
m_Target: 0
m_Target: 1
speed: 2
m_Value: 0
m_Value: 1
m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4}
m_Pivot: {x: 0, y: 0, z: 0}
m_Size: {x: 1, y: 1}
@ -918,17 +918,17 @@ MonoBehaviour:
m_GridAxis: 1
m_gridOpacity: 0.5
m_Rotation:
m_Target: {x: 0.015004154, y: 0.020719247, z: -0.00030632256, w: 0.9996792}
m_Target: {x: 0, y: 0, z: 0, w: 1}
speed: 2
m_Value: {x: 0.015004057, y: 0.020719113, z: -0.00030632058, w: 0.9996728}
m_Value: {x: 0, y: 0, z: 0, w: 1}
m_Size:
m_Target: 987.1142
m_Target: 859.76056
speed: 2
m_Value: 987.1142
m_Value: 900.2728
m_Ortho:
m_Target: 0
m_Target: 1
speed: 2
m_Value: 0
m_Value: 1
m_CameraSettings:
m_Speed: 0.7662
m_SpeedNormalized: 0.38
@ -969,9 +969,9 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 890.4
x: 854.4
y: 73.6
width: 240.40002
width: 276.40002
height: 379.8
m_ViewDataDictionary: {fileID: 0}
m_OverlayCanvas:
@ -980,10 +980,10 @@ MonoBehaviour:
m_OverlaysVisible: 1
m_SceneHierarchy:
m_TreeViewState:
scrollPos: {x: 0, y: 0}
scrollPos: {x: 0, y: 5.200012}
m_SelectedIDs:
m_LastClickedID: 0
m_ExpandedIDs: 9255feffe255feff2857feff7c5afeffcc5afeff165cfeff021ffffff420ffff4821ffff8a22ffff5624ffffc427ffff1428ffff5a29ffffa42cfffff42cffff3a2effffb031ffff0432ffff4e33ffff86f6ffffc2f7ffff12f8ffff54f9ffff08fbffff1271030070c9030022f60700804e080046040a001a070a00ae070a00b6070a00f8070a00
m_ExpandedIDs: 4228ffff08fbffff205900004c59000050590000605900006e590000865900008a59000096590000f2ad0100f6ad010030ae010040ae010014af0100b2af0100b6af0100ecaf010000b001002ab001004cb1010060b1010094b10100
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@ -1029,7 +1029,7 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 73.6
width: 889.4
width: 853.4
height: 701.8
m_ViewDataDictionary: {fileID: 0}
m_OverlayCanvas:
@ -1044,7 +1044,7 @@ MonoBehaviour:
m_ShowGizmos: 0
m_TargetDisplay: 0
m_ClearColor: {r: 0, g: 0, b: 0, a: 0}
m_TargetSize: {x: 3328, y: 1352}
m_TargetSize: {x: 1920, y: 1080}
m_TextureFilterMode: 0
m_TextureHideFlags: 61
m_RenderIMGUI: 1
@ -1053,16 +1053,16 @@ MonoBehaviour:
m_VSyncEnabled: 0
m_Gizmos: 0
m_Stats: 0
m_SelectedSizes: 08000000000000000000000012000000000000000000000000000000000000000000000000000000
m_SelectedSizes: 03000000000000000000000012000000000000000000000000000000000000000000000000000000
m_ZoomArea:
m_HRangeLocked: 0
m_VRangeLocked: 0
hZoomLockedByDefault: 0
vZoomLockedByDefault: 0
m_HBaseRangeMin: -1331.2001
m_HBaseRangeMax: 1331.2001
m_VBaseRangeMin: -540.8
m_VBaseRangeMax: 540.8
m_HBaseRangeMin: -768
m_HBaseRangeMax: 768
m_VBaseRangeMin: -432
m_VBaseRangeMax: 432
m_HAllowExceedBaseRangeMin: 1
m_HAllowExceedBaseRangeMax: 1
m_VAllowExceedBaseRangeMin: 1
@ -1071,7 +1071,7 @@ MonoBehaviour:
m_HSlider: 0
m_VSlider: 0
m_IgnoreScrollWheelUntilClicked: 0
m_EnableMouseInput: 0
m_EnableMouseInput: 1
m_EnableSliderZoomHorizontal: 0
m_EnableSliderZoomVertical: 0
m_UniformScale: 1
@ -1080,23 +1080,23 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 21
width: 889.4
width: 853.4
height: 680.8
m_Scale: {x: 0.33405948, y: 0.33405948}
m_Translation: {x: 444.7, y: 340.4}
m_Scale: {x: 0.555599, y: 0.555599}
m_Translation: {x: 426.7, y: 340.4}
m_MarginLeft: 0
m_MarginRight: 0
m_MarginTop: 0
m_MarginBottom: 0
m_LastShownAreaInsideMargins:
serializedVersion: 2
x: -1331.2001
y: -1018.9802
width: 2662.4001
height: 2037.9604
x: -768
y: -612.6721
width: 1536
height: 1225.3442
m_MinimalGUI: 1
m_defaultScale: 0.33405948
m_LastWindowPixelSize: {x: 1111.75, y: 877.25}
m_defaultScale: 0.555599
m_LastWindowPixelSize: {x: 1066.75, y: 877.25}
m_ClearInEditMode: 1
m_NoCameraWarning: 1
m_LowResolutionForAspectRatios: 00000000000000000000