add InputReader

#add
-ReadButton
-ReadOnce
-ReadInput
-ReadTog
This commit is contained in:
陈思海 2026-03-18 13:33:46 +08:00
parent ca4d33698f
commit 88af70ff61
4 changed files with 403 additions and 106 deletions

View File

@ -0,0 +1,221 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public static class InputActionReader
{
private readonly struct InputReadKey : IEquatable<InputReadKey>
{
public readonly string ActionName;
public readonly int OwnerId;
public readonly string OwnerKey;
public InputReadKey(string actionName, int ownerId)
{
ActionName = actionName ?? string.Empty;
OwnerId = ownerId;
OwnerKey = string.Empty;
}
public InputReadKey(string actionName, string ownerKey)
{
ActionName = actionName ?? string.Empty;
OwnerId = 0;
OwnerKey = ownerKey ?? string.Empty;
}
public bool Equals(InputReadKey other)
{
return OwnerId == other.OwnerId
&& string.Equals(ActionName, other.ActionName, StringComparison.Ordinal)
&& string.Equals(OwnerKey, other.OwnerKey, StringComparison.Ordinal);
}
public override bool Equals(object obj)
{
return obj is InputReadKey other && Equals(other);
}
public override int GetHashCode()
{
unchecked
{
int hashCode = 17;
hashCode = (hashCode * 31) + OwnerId;
hashCode = (hashCode * 31) + StringComparer.Ordinal.GetHashCode(ActionName);
hashCode = (hashCode * 31) + StringComparer.Ordinal.GetHashCode(OwnerKey);
return hashCode;
}
}
}
private static readonly HashSet<InputReadKey> PressedKeys = new();
private static readonly HashSet<InputReadKey> ToggledKeys = new();
public static T ReadValue<T>(string actionName) where T : struct
{
return ResolveAction(actionName).ReadValue<T>();
}
public static object ReadValue(string actionName)
{
return ResolveAction(actionName).ReadValueAsObject();
}
public static bool TryReadValue<T>(string actionName, out T value) where T : struct
{
InputAction inputAction = ResolveAction(actionName);
if (inputAction.IsPressed())
{
value = inputAction.ReadValue<T>();
return true;
}
value = default;
return false;
}
public static bool TryReadValue(string actionName, out object value)
{
InputAction inputAction = ResolveAction(actionName);
if (inputAction.IsPressed())
{
value = inputAction.ReadValueAsObject();
return true;
}
value = default;
return false;
}
public static bool TryReadValueOnce<T>(UnityEngine.Object owner, string actionName, out T value) where T : struct
{
if (owner == null)
{
value = default;
return false;
}
return TryReadValueOnceInternal(new InputReadKey(actionName, owner.GetInstanceID()), actionName, out value);
}
public static bool ReadButton(string actionName)
{
InputAction inputAction = ResolveAction(actionName);
if (inputAction.type == InputActionType.Button)
{
return Convert.ToBoolean(inputAction.ReadValueAsObject());
}
throw new NotSupportedException("[InputActionReader] The Input Action must be a button type.");
}
public static bool ReadButtonOnce(UnityEngine.Object owner, string actionName)
{
return owner != null && ReadButtonOnce(owner.GetInstanceID(), actionName);
}
public static bool ReadButtonOnce(int instanceID, string actionName)
{
return ReadButtonOnceInternal(new InputReadKey(actionName, instanceID), actionName);
}
public static bool ReadButtonOnce(string key, string actionName)
{
return ReadButtonOnceInternal(new InputReadKey(actionName, key), actionName);
}
public static bool ReadButtonToggle(UnityEngine.Object owner, string actionName)
{
return owner != null && ReadButtonToggle(owner.GetInstanceID(), actionName);
}
public static bool ReadButtonToggle(int instanceID, string actionName)
{
return ReadButtonToggleInternal(new InputReadKey(actionName, instanceID), actionName);
}
public static bool ReadButtonToggle(string key, string actionName)
{
return ReadButtonToggleInternal(new InputReadKey(actionName, key), actionName);
}
public static void ResetToggledButton(string key, string actionName)
{
ToggledKeys.Remove(new InputReadKey(actionName, key));
}
public static void ResetToggledButton(string actionName)
{
if (string.IsNullOrEmpty(actionName) || ToggledKeys.Count == 0)
{
return;
}
InputReadKey[] snapshot = new InputReadKey[ToggledKeys.Count];
ToggledKeys.CopyTo(snapshot);
for (int i = 0; i < snapshot.Length; i++)
{
if (string.Equals(snapshot[i].ActionName, actionName, StringComparison.Ordinal))
{
ToggledKeys.Remove(snapshot[i]);
}
}
}
public static void ResetToggledButtons()
{
ToggledKeys.Clear();
}
private static InputAction ResolveAction(string actionName)
{
return InputBindingManager.Action(actionName)
?? throw new InvalidOperationException($"[InputActionReader] Action '{actionName}' is not available.");
}
private static bool TryReadValueOnceInternal<T>(InputReadKey readKey, string actionName, out T value) where T : struct
{
InputAction inputAction = ResolveAction(actionName);
if (inputAction.IsPressed())
{
if (PressedKeys.Add(readKey))
{
value = inputAction.ReadValue<T>();
return true;
}
}
else
{
PressedKeys.Remove(readKey);
}
value = default;
return false;
}
private static bool ReadButtonOnceInternal(InputReadKey readKey, string actionName)
{
if (ReadButton(actionName))
{
return PressedKeys.Add(readKey);
}
PressedKeys.Remove(readKey);
return false;
}
private static bool ReadButtonToggleInternal(InputReadKey readKey, string actionName)
{
if (ReadButtonOnceInternal(readKey, actionName))
{
if (!ToggledKeys.Add(readKey))
{
ToggledKeys.Remove(readKey);
}
}
return ToggledKeys.Contains(readKey);
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b9368556ed4729ae618e0a19d3a7925b
timeCreated: 1773811724

View File

@ -1,8 +1,6 @@
using System; using System;
using System.IO; using System.IO;
using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine; using UnityEngine;
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
using AlicizaX; using AlicizaX;
@ -24,16 +22,15 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
public string fileName = "input_bindings.json"; public string fileName = "input_bindings.json";
public bool debugMode = false; public bool debugMode = false;
public Dictionary<string, ActionMap> actionMap = new Dictionary<string, ActionMap>();
public HashSet<RebindContext> preparedRebinds = new HashSet<RebindContext>();
internal InputActionRebindingExtensions.RebindingOperation rebindOperation; internal InputActionRebindingExtensions.RebindingOperation rebindOperation;
private bool isApplyPending = false; private bool isApplyPending = false;
private string defaultBindingsJson = string.Empty; private string defaultBindingsJson = string.Empty;
private string cachedSavePath; private string cachedSavePath;
private Dictionary<string, (ActionMap map, ActionMap.Action action)> actionLookup = new Dictionary<string, (ActionMap, ActionMap.Action)>(); private readonly Dictionary<string, ActionMap> actionMap = new(StringComparer.Ordinal);
private readonly HashSet<RebindContext> preparedRebinds = new();
// 用于替代 Rx.NET Subjects 的事件 private readonly Dictionary<string, (ActionMap map, ActionMap.Action action)> actionLookup = new(StringComparer.Ordinal);
private readonly Dictionary<Guid, (ActionMap map, ActionMap.Action action)> actionLookupById = new();
private readonly HashSet<string> ambiguousActionNames = new(StringComparer.Ordinal);
private event Action _onInputsInit; private event Action _onInputsInit;
public event Action OnInputsInit public event Action OnInputsInit
@ -59,6 +56,9 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
private bool isInputsInitialized = false; private bool isInputsInitialized = false;
public IReadOnlyDictionary<string, ActionMap> ActionMaps => actionMap;
public IReadOnlyCollection<RebindContext> PreparedRebinds => preparedRebinds;
public string SavePath public string SavePath
{ {
get get
@ -160,38 +160,48 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
private void BuildActionMap() private void BuildActionMap()
{ {
// 预分配已知容量以避免调整大小
int mapCount = actions.actionMaps.Count;
actionMap.Clear(); actionMap.Clear();
actionLookup.Clear(); actionLookup.Clear();
actionLookupById.Clear();
// 估算总操作数以便更好地分配内存 ambiguousActionNames.Clear();
int estimatedActionCount = 0;
foreach (var map in actions.actionMaps)
{
estimatedActionCount += map.actions.Count;
}
// 确保容量以避免重新哈希
if (actionMap.Count == 0)
{
actionMap = new Dictionary<string, ActionMap>(mapCount);
actionLookup = new Dictionary<string, (ActionMap, ActionMap.Action)>(estimatedActionCount);
}
foreach (var map in actions.actionMaps) foreach (var map in actions.actionMaps)
{ {
var actionMapObj = new ActionMap(map); var actionMapObj = new ActionMap(map);
actionMap.Add(map.name, actionMapObj); actionMap.Add(map.name, actionMapObj);
// 构建查找字典以实现 O(1) 操作访问
foreach (var actionPair in actionMapObj.actions) foreach (var actionPair in actionMapObj.actions)
{ {
actionLookup[actionPair.Key] = (actionMapObj, actionPair.Value); RegisterActionLookup(map.name, actionPair.Key, actionMapObj, actionPair.Value);
} }
} }
} }
private void RegisterActionLookup(string mapName, string actionName, ActionMap map, ActionMap.Action action)
{
actionLookupById[action.action.id] = (map, action);
actionLookup[$"{mapName}/{actionName}"] = (map, action);
if (ambiguousActionNames.Contains(actionName))
{
return;
}
if (actionLookup.TryGetValue(actionName, out var existing))
{
if (existing.action.action != action.action)
{
actionLookup.Remove(actionName);
ambiguousActionNames.Add(actionName);
Debug.LogWarning($"[InputBindingManager] Duplicate action name '{actionName}' detected. Use 'MapName/{actionName}' to resolve it.");
}
return;
}
actionLookup[actionName] = (map, action);
}
private void RefreshBindingPathsFromActions() private void RefreshBindingPathsFromActions()
{ {
foreach (var mapPair in actionMap.Values) foreach (var mapPair in actionMap.Values)
@ -346,16 +356,26 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
{ {
if (obj is not RebindContext other) return false; if (obj is not RebindContext other) return false;
if (action == null || other.action == null) return false; if (action == null || other.action == null) return false;
return action.name == other.action.name && bindingIndex == other.bindingIndex; return action.id == other.action.id && bindingIndex == other.bindingIndex;
} }
public override int GetHashCode() => (action?.name ?? string.Empty, bindingIndex).GetHashCode(); public override int GetHashCode()
{
unchecked
{
int hashCode = 17;
hashCode = (hashCode * 31) + (action != null ? action.id.GetHashCode() : 0);
hashCode = (hashCode * 31) + bindingIndex;
return hashCode;
}
}
public override string ToString() public override string ToString()
{ {
if (cachedToString == null && action != null) if (cachedToString == null && action != null)
{ {
cachedToString = $"{action.name}:{bindingIndex}"; string mapName = action.actionMap != null ? action.actionMap.name : "<no-map>";
cachedToString = $"{mapName}/{action.name}:{bindingIndex}";
} }
return cachedToString ?? "<null>"; return cachedToString ?? "<null>";
@ -374,15 +394,40 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
var instance = Instance; var instance = Instance;
if (instance == null) return null; if (instance == null) return null;
if (instance.actionLookup.TryGetValue(actionName, out var result)) if (TryGetAction(actionName, out InputAction action))
{ {
return result.action.action; return action;
}
if (instance.ambiguousActionNames.Contains(actionName))
{
Debug.LogError($"[InputBindingManager] Action name '{actionName}' is ambiguous. Use 'MapName/{actionName}' instead.");
return null;
} }
Debug.LogError($"[InputBindingManager] Could not find action '{actionName}'"); Debug.LogError($"[InputBindingManager] Could not find action '{actionName}'");
return null; return null;
} }
public static bool TryGetAction(string actionName, out InputAction action)
{
var instance = Instance;
if (instance == null || string.IsNullOrWhiteSpace(actionName))
{
action = null;
return false;
}
if (instance.actionLookup.TryGetValue(actionName, out var result))
{
action = result.action.action;
return true;
}
action = null;
return false;
}
/// <summary> /// <summary>
/// 开始重新绑定指定的输入操作 /// 开始重新绑定指定的输入操作
/// </summary> /// </summary>
@ -443,7 +488,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
} }
} }
var bp = GetBindingPath(ctx.action.name, ctx.bindingIndex); var bp = GetBindingPath(ctx.action, ctx.bindingIndex);
if (bp != null) if (bp != null)
{ {
bp.EffectivePath = (ctx.overridePath == NULL_BINDING) ? string.Empty : ctx.overridePath; bp.EffectivePath = (ctx.overridePath == NULL_BINDING) ? string.Empty : ctx.overridePath;
@ -607,11 +652,11 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
if (string.IsNullOrEmpty(context.overridePath)) if (string.IsNullOrEmpty(context.overridePath))
{ {
var bp = GetBindingPath(context.action.name, context.bindingIndex); var bp = GetBindingPath(context.action, context.bindingIndex);
if (bp != null) context.overridePath = bp.bindingPath; if (bp != null) context.overridePath = bp.bindingPath;
} }
var bindingPath = GetBindingPath(context.action.name, context.bindingIndex); var bindingPath = GetBindingPath(context.action, context.bindingIndex);
if (bindingPath == null) return; if (bindingPath == null) return;
if (bindingPath.EffectivePath != context.overridePath) if (bindingPath.EffectivePath != context.overridePath)
@ -695,17 +740,45 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
var instance = Instance; var instance = Instance;
if (instance == null) return null; if (instance == null) return null;
if (instance.actionLookup.TryGetValue(actionName, out var result)) if (instance.TryGetActionRecord(actionName, out var result)
&& result.action.bindings.TryGetValue(bindingIndex, out var binding))
{ {
if (result.action.bindings.TryGetValue(bindingIndex, out var binding)) return binding.bindingPath;
{
return binding.bindingPath;
}
} }
return null; return null;
} }
public static BindingPath GetBindingPath(InputAction action, int bindingIndex = 0)
{
var instance = Instance;
if (instance == null || action == null) return null;
if (instance.TryGetActionRecord(action, out var result)
&& result.action.bindings.TryGetValue(bindingIndex, out var binding))
{
return binding.bindingPath;
}
return null;
}
private bool TryGetActionRecord(string actionName, out (ActionMap map, ActionMap.Action action) result)
{
return actionLookup.TryGetValue(actionName, out result);
}
private bool TryGetActionRecord(InputAction action, out (ActionMap map, ActionMap.Action action) result)
{
if (action != null && actionLookupById.TryGetValue(action.id, out result))
{
return result.action.action == action;
}
result = default;
return false;
}
// 为键盘选择最佳绑定索引;如果 compositePartName != null 则查找部分 // 为键盘选择最佳绑定索引;如果 compositePartName != null 则查找部分
/// <summary> /// <summary>

View File

@ -14,16 +14,16 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_PixelRect: m_PixelRect:
serializedVersion: 2 serializedVersion: 2
x: -4 x: 0
y: 51 y: 43
width: 1920 width: 1920
height: 997 height: 997
m_ShowMode: 4 m_ShowMode: 4
m_Title: Project m_Title: Console
m_RootView: {fileID: 4} m_RootView: {fileID: 4}
m_MinSize: {x: 875, y: 300} m_MinSize: {x: 875, y: 300}
m_MaxSize: {x: 10000, y: 10000} m_MaxSize: {x: 10000, y: 10000}
m_Maximized: 0 m_Maximized: 1
--- !u!114 &2 --- !u!114 &2
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 52 m_ObjectHideFlags: 52
@ -34,23 +34,23 @@ MonoBehaviour:
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name: AnimatorControllerTool m_Name: GameView
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Children: [] m_Children: []
m_Position: m_Position:
serializedVersion: 2 serializedVersion: 2
x: 0 x: 0
y: 566 y: 566
width: 614 width: 338
height: 381 height: 381
m_MinSize: {x: 101, y: 121} m_MinSize: {x: 51, y: 71}
m_MaxSize: {x: 4001, y: 4021} m_MaxSize: {x: 4001, y: 4021}
m_ActualView: {fileID: 15} m_ActualView: {fileID: 14}
m_Panes: m_Panes:
- {fileID: 14} - {fileID: 14}
- {fileID: 15} - {fileID: 15}
m_Selected: 1 m_Selected: 0
m_LastSelected: 0 m_LastSelected: 1
--- !u!114 &3 --- !u!114 &3
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 52 m_ObjectHideFlags: 52
@ -70,12 +70,12 @@ MonoBehaviour:
serializedVersion: 2 serializedVersion: 2
x: 0 x: 0
y: 0 y: 0
width: 614 width: 338
height: 947 height: 947
m_MinSize: {x: 100, y: 100} m_MinSize: {x: 100, y: 100}
m_MaxSize: {x: 8096, y: 16192} m_MaxSize: {x: 8096, y: 16192}
vertical: 1 vertical: 1
controlID: 398 controlID: 18
draggingID: 0 draggingID: 0
--- !u!114 &4 --- !u!114 &4
MonoBehaviour: MonoBehaviour:
@ -174,7 +174,7 @@ MonoBehaviour:
m_MinSize: {x: 400, y: 100} m_MinSize: {x: 400, y: 100}
m_MaxSize: {x: 32384, y: 16192} m_MaxSize: {x: 32384, y: 16192}
vertical: 0 vertical: 0
controlID: 144 controlID: 142
draggingID: 0 draggingID: 0
--- !u!114 &8 --- !u!114 &8
MonoBehaviour: MonoBehaviour:
@ -193,7 +193,7 @@ MonoBehaviour:
serializedVersion: 2 serializedVersion: 2
x: 0 x: 0
y: 0 y: 0
width: 614 width: 338
height: 566 height: 566
m_MinSize: {x: 201, y: 221} m_MinSize: {x: 201, y: 221}
m_MaxSize: {x: 4001, y: 4021} m_MaxSize: {x: 4001, y: 4021}
@ -219,14 +219,14 @@ MonoBehaviour:
- {fileID: 11} - {fileID: 11}
m_Position: m_Position:
serializedVersion: 2 serializedVersion: 2
x: 614 x: 338
y: 0 y: 0
width: 363 width: 382
height: 947 height: 947
m_MinSize: {x: 100, y: 100} m_MinSize: {x: 100, y: 100}
m_MaxSize: {x: 8096, y: 16192} m_MaxSize: {x: 8096, y: 16192}
vertical: 1 vertical: 1
controlID: 73 controlID: 69
draggingID: 0 draggingID: 0
--- !u!114 &10 --- !u!114 &10
MonoBehaviour: MonoBehaviour:
@ -245,7 +245,7 @@ MonoBehaviour:
serializedVersion: 2 serializedVersion: 2
x: 0 x: 0
y: 0 y: 0
width: 363 width: 382
height: 409 height: 409
m_MinSize: {x: 202, y: 221} m_MinSize: {x: 202, y: 221}
m_MaxSize: {x: 4002, y: 4021} m_MaxSize: {x: 4002, y: 4021}
@ -271,7 +271,7 @@ MonoBehaviour:
serializedVersion: 2 serializedVersion: 2
x: 0 x: 0
y: 409 y: 409
width: 363 width: 382
height: 538 height: 538
m_MinSize: {x: 102, y: 121} m_MinSize: {x: 102, y: 121}
m_MaxSize: {x: 4002, y: 4021} m_MaxSize: {x: 4002, y: 4021}
@ -295,9 +295,9 @@ MonoBehaviour:
m_Children: [] m_Children: []
m_Position: m_Position:
serializedVersion: 2 serializedVersion: 2
x: 977 x: 720
y: 0 y: 0
width: 369 width: 416
height: 947 height: 947
m_MinSize: {x: 232, y: 271} m_MinSize: {x: 232, y: 271}
m_MaxSize: {x: 10002, y: 10021} m_MaxSize: {x: 10002, y: 10021}
@ -321,9 +321,9 @@ MonoBehaviour:
m_Children: [] m_Children: []
m_Position: m_Position:
serializedVersion: 2 serializedVersion: 2
x: 1346 x: 1136
y: 0 y: 0
width: 574 width: 784
height: 947 height: 947
m_MinSize: {x: 276, y: 71} m_MinSize: {x: 276, y: 71}
m_MaxSize: {x: 4001, y: 4021} m_MaxSize: {x: 4001, y: 4021}
@ -354,7 +354,7 @@ MonoBehaviour:
serializedVersion: 2 serializedVersion: 2
x: 0 x: 0
y: 639 y: 639
width: 496 width: 337
height: 360 height: 360
m_SerializedDataModeController: m_SerializedDataModeController:
m_DataMode: 0 m_DataMode: 0
@ -372,7 +372,7 @@ MonoBehaviour:
m_ShowGizmos: 0 m_ShowGizmos: 0
m_TargetDisplay: 0 m_TargetDisplay: 0
m_ClearColor: {r: 0, g: 0, b: 0, a: 0} m_ClearColor: {r: 0, g: 0, b: 0, a: 0}
m_TargetSize: {x: 2560, y: 1440} m_TargetSize: {x: 1920, y: 1080}
m_TextureFilterMode: 0 m_TextureFilterMode: 0
m_TextureHideFlags: 61 m_TextureHideFlags: 61
m_RenderIMGUI: 1 m_RenderIMGUI: 1
@ -381,16 +381,16 @@ MonoBehaviour:
m_VSyncEnabled: 0 m_VSyncEnabled: 0
m_Gizmos: 0 m_Gizmos: 0
m_Stats: 1 m_Stats: 1
m_SelectedSizes: 05000000000000000000000000000000000000000000000000000000000000000000000000000000 m_SelectedSizes: 03000000000000000000000000000000000000000000000000000000000000000000000000000000
m_ZoomArea: m_ZoomArea:
m_HRangeLocked: 0 m_HRangeLocked: 0
m_VRangeLocked: 0 m_VRangeLocked: 0
hZoomLockedByDefault: 0 hZoomLockedByDefault: 0
vZoomLockedByDefault: 0 vZoomLockedByDefault: 0
m_HBaseRangeMin: -1280 m_HBaseRangeMin: -960
m_HBaseRangeMax: 1280 m_HBaseRangeMax: 960
m_VBaseRangeMin: -720 m_VBaseRangeMin: -540
m_VBaseRangeMax: 720 m_VBaseRangeMax: 540
m_HAllowExceedBaseRangeMin: 1 m_HAllowExceedBaseRangeMin: 1
m_HAllowExceedBaseRangeMax: 1 m_HAllowExceedBaseRangeMax: 1
m_VAllowExceedBaseRangeMin: 1 m_VAllowExceedBaseRangeMin: 1
@ -408,23 +408,23 @@ MonoBehaviour:
serializedVersion: 2 serializedVersion: 2
x: 0 x: 0
y: 21 y: 21
width: 496 width: 337
height: 339 height: 339
m_Scale: {x: 0.19375, y: 0.19375} m_Scale: {x: 0.17552084, y: 0.17552084}
m_Translation: {x: 248, y: 169.5} m_Translation: {x: 168.5, y: 169.5}
m_MarginLeft: 0 m_MarginLeft: 0
m_MarginRight: 0 m_MarginRight: 0
m_MarginTop: 0 m_MarginTop: 0
m_MarginBottom: 0 m_MarginBottom: 0
m_LastShownAreaInsideMargins: m_LastShownAreaInsideMargins:
serializedVersion: 2 serializedVersion: 2
x: -1280 x: -960
y: -874.83875 y: -965.6973
width: 2560 width: 1920
height: 1749.6775 height: 1931.3947
m_MinimalGUI: 1 m_MinimalGUI: 1
m_defaultScale: 0.19375 m_defaultScale: 0.17552084
m_LastWindowPixelSize: {x: 496, y: 360} m_LastWindowPixelSize: {x: 337, y: 360}
m_ClearInEditMode: 1 m_ClearInEditMode: 1
m_NoCameraWarning: 1 m_NoCameraWarning: 1
m_LowResolutionForAspectRatios: 01000000000000000000 m_LowResolutionForAspectRatios: 01000000000000000000
@ -450,9 +450,9 @@ MonoBehaviour:
m_Tooltip: m_Tooltip:
m_Pos: m_Pos:
serializedVersion: 2 serializedVersion: 2
x: -4 x: 0
y: 647 y: 639
width: 613 width: 491
height: 360 height: 360
m_SerializedDataModeController: m_SerializedDataModeController:
m_DataMode: 0 m_DataMode: 0
@ -520,9 +520,9 @@ MonoBehaviour:
m_Tooltip: m_Tooltip:
m_Pos: m_Pos:
serializedVersion: 2 serializedVersion: 2
x: -4 x: 0
y: 81 y: 73
width: 613 width: 337
height: 545 height: 545
m_SerializedDataModeController: m_SerializedDataModeController:
m_DataMode: 0 m_DataMode: 0
@ -1114,7 +1114,7 @@ MonoBehaviour:
m_Rotation: m_Rotation:
m_Target: {x: -0.21037178, y: -0.10913931, z: 0.02363893, w: -0.97122556} m_Target: {x: -0.21037178, y: -0.10913931, z: 0.02363893, w: -0.97122556}
speed: 2 speed: 2
m_Value: {x: -0.21037178, y: -0.10913931, z: 0.023638932, w: -0.9712256} m_Value: {x: -0.2103712, y: -0.10913901, z: 0.023638865, w: -0.9712229}
m_Size: m_Size:
m_Target: 1.0281526 m_Target: 1.0281526
speed: 2 speed: 2
@ -1136,7 +1136,7 @@ MonoBehaviour:
m_FarClip: 10000 m_FarClip: 10000
m_DynamicClip: 1 m_DynamicClip: 1
m_OcclusionCulling: 0 m_OcclusionCulling: 0
m_LastSceneViewRotation: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226} m_LastSceneViewRotation: {x: -0.21037178, y: -0.10913931, z: 0.02363893, w: -0.97122556}
m_LastSceneViewOrtho: 0 m_LastSceneViewOrtho: 0
m_ReplacementShader: {fileID: 0} m_ReplacementShader: {fileID: 0}
m_ReplacementString: m_ReplacementString:
@ -1163,9 +1163,9 @@ MonoBehaviour:
m_Tooltip: m_Tooltip:
m_Pos: m_Pos:
serializedVersion: 2 serializedVersion: 2
x: 610 x: 338
y: 81 y: 73
width: 361 width: 380
height: 388 height: 388
m_SerializedDataModeController: m_SerializedDataModeController:
m_DataMode: 0 m_DataMode: 0
@ -1180,7 +1180,7 @@ MonoBehaviour:
m_SceneHierarchy: m_SceneHierarchy:
m_TreeViewState: m_TreeViewState:
scrollPos: {x: 0, y: 0} scrollPos: {x: 0, y: 0}
m_SelectedIDs: d6700000 m_SelectedIDs: 08700000
m_LastClickedID: 0 m_LastClickedID: 0
m_ExpandedIDs: 28fbffff m_ExpandedIDs: 28fbffff
m_RenameOverlay: m_RenameOverlay:
@ -1226,9 +1226,9 @@ MonoBehaviour:
m_Tooltip: m_Tooltip:
m_Pos: m_Pos:
serializedVersion: 2 serializedVersion: 2
x: 610 x: 338
y: 490 y: 482
width: 361 width: 380
height: 517 height: 517
m_SerializedDataModeController: m_SerializedDataModeController:
m_DataMode: 0 m_DataMode: 0
@ -1260,9 +1260,9 @@ MonoBehaviour:
m_Tooltip: m_Tooltip:
m_Pos: m_Pos:
serializedVersion: 2 serializedVersion: 2
x: 973 x: 720
y: 81 y: 73
width: 367 width: 414
height: 926 height: 926
m_SerializedDataModeController: m_SerializedDataModeController:
m_DataMode: 0 m_DataMode: 0
@ -1285,7 +1285,7 @@ MonoBehaviour:
m_SkipHidden: 0 m_SkipHidden: 0
m_SearchArea: 2 m_SearchArea: 2
m_Folders: m_Folders:
- Assets/Plugins/UnityEditorDarkMode - Assets/YooAsset
m_Globs: [] m_Globs: []
m_OriginalText: m_OriginalText:
m_ImportLogFlags: 0 m_ImportLogFlags: 0
@ -1301,7 +1301,7 @@ MonoBehaviour:
scrollPos: {x: 0, y: 0} scrollPos: {x: 0, y: 0}
m_SelectedIDs: e48c0000 m_SelectedIDs: e48c0000
m_LastClickedID: 36068 m_LastClickedID: 36068
m_ExpandedIDs: 000000007e0200008a0d0000786d00007a6d00007c6d00007e6d0000806d0000826d0000846d0000866d0000886d00008a6d00008c6d00008e6d0000906d0000926d0000946d0000966d0000986d00009a6d00009c6d00009e6d0000a06d0000a26d0000a46d0000a66d0000a86d0000aa6d0000ac6d0000ae6d0000b06d0000b26d0000b46d0000b66d0000b86d0000ba6d0000bc6d0000be6d0000c06d0000c26d0000c46d0000c66d0000c86d0000ca6d0000cc6d0000ce6d0000d06d0000d26d0000d46d0000d66d0000d86d0000da6d0000dc6d0000de6d0000e06d0000e26d0000e46d0000e66d0000e86d0000ea6d0000ec6d0000ee6d0000f06d0000f26d0000f46d0000 m_ExpandedIDs: 000000007e0200007c6d00007e6d0000806d0000826d0000846d0000866d0000886d00008a6d00008c6d00008e6d0000906d0000926d0000946d0000966d0000986d00009a6d00009c6d00009e6d0000a06d0000a26d0000a46d0000a66d0000a86d0000aa6d0000ac6d0000ae6d0000b06d0000b26d0000b46d0000b66d0000b86d0000ba6d0000bc6d0000be6d0000c06d0000c26d0000c46d0000c66d0000c86d0000ca6d0000cc6d0000ce6d0000d06d0000d26d0000d46d0000d66d0000d86d0000da6d0000dc6d0000de6d0000e06d0000e26d0000e46d0000e66d0000e86d0000ea6d0000ec6d0000ee6d0000f06d0000f26d0000f46d0000f66d0000f86d0000
m_RenameOverlay: m_RenameOverlay:
m_UserAcceptedRename: 0 m_UserAcceptedRename: 0
m_Name: m_Name:
@ -1329,21 +1329,21 @@ MonoBehaviour:
scrollPos: {x: 0, y: 0} scrollPos: {x: 0, y: 0}
m_SelectedIDs: m_SelectedIDs:
m_LastClickedID: 0 m_LastClickedID: 0
m_ExpandedIDs: ffffffff000000007e020000786d00007a6d00007c6d00007e6d0000806d0000826d0000846d0000866d0000886d00008a6d00008c6d00008e6d0000906d0000926d0000946d0000966d0000986d00009a6d00009c6d00009e6d0000a06d0000a26d0000a46d0000a66d0000a86d0000aa6d0000ac6d0000ae6d0000b06d0000b46d0000b66d0000b86d0000ba6d0000bc6d0000be6d0000c06d0000c26d0000c46d0000c66d0000c86d0000ca6d0000cc6d0000ce6d0000d06d0000d46d0000d66d0000d86d0000da6d0000dc6d0000de6d0000e06d0000e26d0000e66d0000e86d0000ea6d0000ec6d0000ee6d0000f06d0000f26d0000f46d0000f06f000008700000cc700000 m_ExpandedIDs: ffffffff000000007e0200008c0d0000166c00007c6d00007e6d0000806d0000826d0000846d0000866d0000886d00008a6d00008c6d00008e6d0000926d0000946d0000966d0000986d00009a6d00009c6d00009e6d0000a66d0000a86d0000aa6d0000ac6d0000ae6d0000b06d0000b26d0000b46d0000b66d0000b86d0000ba6d0000bc6d0000be6d0000c06d0000c26d0000c46d0000c66d0000c86d0000ca6d0000cc6d0000ce6d0000d06d0000d26d0000d86d0000da6d0000dc6d0000de6d0000e06d0000e26d0000e46d0000e66d0000e86d0000ea6d0000f06d0000f26d0000f66d0000cc6f0000587400006a7400006c740000707400007e74000098740000
m_RenameOverlay: m_RenameOverlay:
m_UserAcceptedRename: 0 m_UserAcceptedRename: 0
m_Name: m_Name: LocalizationTable
m_OriginalName: m_OriginalName: LocalizationTable
m_EditFieldRect: m_EditFieldRect:
serializedVersion: 2 serializedVersion: 2
x: 0 x: 0
y: 0 y: 0
width: 0 width: 0
height: 0 height: 0
m_UserData: 0 m_UserData: 27670
m_IsWaitingForDelay: 0 m_IsWaitingForDelay: 0
m_IsRenaming: 0 m_IsRenaming: 0
m_OriginalEventType: 11 m_OriginalEventType: 0
m_IsRenamingFilename: 1 m_IsRenamingFilename: 1
m_ClientGUIView: {fileID: 12} m_ClientGUIView: {fileID: 12}
m_SearchString: m_SearchString:
@ -1405,9 +1405,9 @@ MonoBehaviour:
m_Tooltip: m_Tooltip:
m_Pos: m_Pos:
serializedVersion: 2 serializedVersion: 2
x: 1342 x: 1136
y: 81 y: 73
width: 573 width: 783
height: 926 height: 926
m_SerializedDataModeController: m_SerializedDataModeController:
m_DataMode: 0 m_DataMode: 0