完成预览相关内容

This commit is contained in:
bob
2025-06-26 19:20:42 +08:00
parent 29d7836b66
commit 4febfadd56
12 changed files with 415 additions and 200 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4aada278b3594dc45ba07fdb730c48e7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ddc0489414991bb459b8b66b6f93e3db
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -45,6 +45,18 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 524c26f472e74fa1ad167db68e562324, type: 3} m_Script: {fileID: 11500000, guid: 524c26f472e74fa1ad167db68e562324, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
position: {x: 0.5, y: -0.25, z: 3}
rotation: {x: 336, y: 0, z: 0}
scale: {x: 20, y: 20, z: 20}
canZoom: 1
zoom: {x: 0, y: 0, z: 0}
canPan: 1
pan:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
hook: {fileID: 0} hook: {fileID: 0}
--- !u!1 &1711236338515461 --- !u!1 &1711236338515461
GameObject: GameObject:

View File

@@ -1,204 +1,372 @@
using System; using UnityEngine;
using System.Collections.Generic;
using System.Linq;
using UnityEditor; using UnityEditor;
using UnityEngine; using System.Collections.Generic;
using NBC;
using NBF;
namespace NBF public class RuntimePreviewEditor : EditorWindow
{ {
public class PreviewableAssetEditor : EditorWindow // 运行时实例引用
{ private GameObject runtimeInstance;
private List<GameObject> previewablePrefabs = new List<GameObject>(); private PreviewableAsset runtimePreviewableAsset;
private Vector2 scrollPosition;
private int selectedIndex = -1;
private GameObject selectedPrefab;
private Editor prefabEditor;
private SerializedObject serializedObject;
[MenuItem("Tools/Previewable Asset Editor")] // 预制体列表
public static void ShowWindow() private List<GameObject> prefabList = new List<GameObject>();
private int selectedPrefabIndex = -1;
private Vector2 scrollPosition;
// 预览控制
private bool isPreviewing = false;
private PreviewPanel _previewPanel;
[MenuItem("Tools/Runtime Preview Editor")]
public static void ShowWindow()
{
GetWindow<RuntimePreviewEditor>("Runtime Preview");
}
private void OnEnable()
{
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
}
private void OnDisable()
{
EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
ClearRuntimeInstance();
}
private void OnPlayModeStateChanged(PlayModeStateChange state)
{
if (state == PlayModeStateChange.ExitingPlayMode)
{ {
GetWindow<PreviewableAssetEditor>("Previewable Assets"); ClearRuntimeInstance();
isPreviewing = false;
}
}
private void RefreshPrefabList()
{
Debug.LogError("重新加载所有预制体==");
prefabList.Clear();
string[] guids = AssetDatabase.FindAssets("t:Prefab");
foreach (string guid in guids)
{
string path = AssetDatabase.GUIDToAssetPath(guid);
GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(path);
if (prefab.GetComponent<PreviewableAsset>() != null)
{
prefabList.Add(prefab);
}
}
}
private void OnGUI()
{
EditorGUILayout.BeginHorizontal();
// 左侧预制体列表
DrawPrefabList();
// 右侧预览和操作区域
DrawPreviewArea();
EditorGUILayout.EndHorizontal();
}
private void DrawPrefabList()
{
EditorGUILayout.BeginVertical(GUILayout.Width(250));
EditorGUILayout.LabelField("Available Prefabs", EditorStyles.boldLabel);
EditorGUILayout.Space();
scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
for (int i = 0; i < prefabList.Count; i++)
{
bool isSelected = i == selectedPrefabIndex;
if (GUILayout.Toggle(isSelected, prefabList[i].name, "Button"))
{
if (!isSelected)
{
selectedPrefabIndex = i;
if (Application.isPlaying)
{
LoadRuntimeInstance();
}
}
}
} }
private void OnEnable() EditorGUILayout.EndScrollView();
if (GUILayout.Button("Refresh List"))
{ {
RefreshPrefabList(); RefreshPrefabList();
} }
private void RefreshPrefabList() EditorGUILayout.EndVertical();
}
private void DrawPreviewArea()
{
EditorGUILayout.BeginVertical(GUILayout.ExpandWidth(true));
if (!Application.isPlaying)
{ {
previewablePrefabs.Clear(); EditorGUILayout.HelpBox("运行模式才可以编辑.", MessageType.Info);
// 查找项目中所有预制体
string[] guids = AssetDatabase.FindAssets("t:Prefab");
foreach (string guid in guids)
{
string path = AssetDatabase.GUIDToAssetPath(guid);
GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(path);
// 检查预制体是否有 PreviewableAsset 组件
if (prefab.GetComponent<PreviewableAsset>() != null)
{
previewablePrefabs.Add(prefab);
}
}
// 按名称排序
previewablePrefabs = previewablePrefabs.OrderBy(p => p.name).ToList();
}
private void OnGUI()
{
EditorGUILayout.BeginHorizontal();
// 左侧列表
DrawPrefabList();
// 右侧操作区域
DrawOperationArea();
EditorGUILayout.EndHorizontal();
}
private void DrawPrefabList()
{
EditorGUILayout.BeginVertical(GUILayout.Width(250));
EditorGUILayout.LabelField("Previewable Assets", EditorStyles.boldLabel);
EditorGUILayout.Space();
scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition, "box");
for (int i = 0; i < previewablePrefabs.Count; i++)
{
var prefab = previewablePrefabs[i];
bool isSelected = i == selectedIndex;
EditorGUILayout.BeginHorizontal();
// 使用 toggle 样式按钮来模拟选择
if (GUILayout.Toggle(isSelected, prefab.name, "Button", GUILayout.Height(20)))
{
if (!isSelected)
{
selectedIndex = i;
selectedPrefab = prefab;
CreatePrefabEditor();
}
}
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.EndScrollView();
// 刷新按钮
if (GUILayout.Button("Refresh List"))
{
RefreshPrefabList();
selectedIndex = -1;
selectedPrefab = null;
prefabEditor = null;
}
EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical();
return;
} }
private void DrawOperationArea() if (selectedPrefabIndex == -1)
{ {
EditorGUILayout.BeginVertical(GUILayout.ExpandWidth(true)); EditorGUILayout.HelpBox("未选中预制体", MessageType.Info);
EditorGUILayout.EndVertical();
return;
}
if (selectedPrefab == null) GUILayout.BeginHorizontal();
if (GUILayout.Button("上一个"))
{
if (selectedPrefabIndex > 0)
{ {
EditorGUILayout.HelpBox("Select a prefab from the list to edit its PreviewableAsset properties.", selectedPrefabIndex--;
MessageType.Info); RefreshRuntimeInstance();
// EnsureSelectionVisible();
} }
else }
GUILayout.Space(20);
if (GUILayout.Button("下一个"))
{
if (selectedPrefabIndex < prefabList.Count - 1)
{ {
EditorGUILayout.LabelField("Editing: " + selectedPrefab.name, EditorStyles.boldLabel); selectedPrefabIndex++;
EditorGUILayout.Space(); RefreshRuntimeInstance();
// EnsureSelectionVisible();
}
}
// 显示预制体预览 GUILayout.EndHorizontal();
if (prefabEditor != null)
var selectedPrefab = prefabList[selectedPrefabIndex];
EditorGUILayout.LabelField("当前预览: " + selectedPrefab.name, EditorStyles.boldLabel);
// 预览控制按钮
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button(isPreviewing ? "停止预览" : "开始预览"))
{
TogglePreview();
}
if (isPreviewing && GUILayout.Button("刷新实例"))
{
RefreshRuntimeInstance();
}
EditorGUILayout.EndHorizontal();
// 运行时实例预览和编辑
if (isPreviewing && runtimeInstance != null && runtimePreviewableAsset)
{
EditorGUILayout.Space();
EditorGUILayout.LabelField("Transform Properties", EditorStyles.boldLabel);
// 记录变化开始
EditorGUI.BeginChangeCheck();
// 编辑Transform
var newPosition = EditorGUILayout.Vector3Field("位置", runtimeInstance.transform.localPosition);
var newRotation = EditorGUILayout.Vector3Field("旋转", runtimeInstance.transform.localEulerAngles);
var newScale = EditorGUILayout.Vector3Field("形变", runtimeInstance.transform.localScale);
var canZoom = EditorGUILayout.Toggle("允许缩放", runtimePreviewableAsset.canZoom);
if (canZoom)
{
runtimePreviewableAsset.zoom = EditorGUILayout.Vector3Field("放大缩小配置", runtimePreviewableAsset.zoom);
}
var canPan = EditorGUILayout.Toggle("允许拖动", runtimePreviewableAsset.canPan);
if (canPan)
{
runtimePreviewableAsset.pan = EditorGUILayout.RectField("拖动配置", runtimePreviewableAsset.pan);
}
// 应用Transform修改
if (EditorGUI.EndChangeCheck())
{
runtimeInstance.transform.localPosition = newPosition;
runtimeInstance.transform.localEulerAngles = newRotation;
runtimeInstance.transform.localScale = newScale;
runtimePreviewableAsset.position = newPosition;
runtimePreviewableAsset.rotation = newRotation;
runtimePreviewableAsset.scale = newScale;
runtimePreviewableAsset.canZoom = canZoom;
runtimePreviewableAsset.canPan = canPan;
if (canZoom)
{ {
prefabEditor.OnPreviewGUI(GUILayoutUtility.GetRect(100, 100), EditorStyles.helpBox); if (!Mathf.Approximately(runtimeInstance.transform.localPosition.z,
} runtimePreviewableAsset.zoom.z))
EditorGUILayout.Space();
// 显示 PreviewableAsset 属性
var previewableAsset = selectedPrefab.GetComponent<PreviewableAsset>();
if (previewableAsset != null)
{
if (serializedObject == null || serializedObject.targetObject != previewableAsset)
{ {
serializedObject = new SerializedObject(previewableAsset); var pos = runtimeInstance.transform.localPosition;
} runtimeInstance.transform.localPosition = new Vector3(pos.x, pos.y, runtimePreviewableAsset.zoom.z);
serializedObject.Update();
// 自动绘制所有序列化字段
SerializedProperty prop = serializedObject.GetIterator();
bool enterChildren = true;
while (prop.NextVisible(enterChildren))
{
enterChildren = false;
if (prop.name == "m_Script") continue; // 跳过脚本引用
EditorGUILayout.PropertyField(prop, true);
}
serializedObject.ApplyModifiedProperties();
EditorGUILayout.Space();
// 保存按钮
if (GUILayout.Button("Save Changes", GUILayout.Height(30)))
{
SaveChanges();
} }
} }
else else
{ {
EditorGUILayout.HelpBox("Selected prefab no longer has a PreviewableAsset component.", runtimeInstance.transform.localPosition = Vector3.zero;
MessageType.Warning);
} }
} }
EditorGUILayout.EndVertical(); EditorGUILayout.Space();
}
private void CreatePrefabEditor() // 保存到预制体按钮
{ if (GUILayout.Button("保存到预制体", GUILayout.Height(30)))
if (prefabEditor != null)
{ {
DestroyImmediate(prefabEditor); SaveChangesToPrefab();
} }
prefabEditor = Editor.CreateEditor(selectedPrefab); if (GUILayout.Button("生成ICON", GUILayout.Height(30)))
}
private void SaveChanges()
{
if (selectedPrefab != null)
{ {
// 标记预制体为脏以便保存 // SaveChangesToPrefab();
EditorUtility.SetDirty(selectedPrefab);
// 保存预制体
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log("Prefab " + selectedPrefab.name + " saved successfully.");
} }
} }
private void OnDisable() EditorGUILayout.EndVertical();
}
private void TogglePreview()
{
isPreviewing = !isPreviewing;
if (isPreviewing)
{ {
if (prefabEditor != null) _previewPanel = UI.Inst.GetUI<PreviewPanel>();
if (_previewPanel == null)
{ {
DestroyImmediate(prefabEditor); isPreviewing = false;
Debug.LogError("显示UI面包未打开");
} }
} }
if (isPreviewing)
{
LoadRuntimeInstance();
}
else
{
ClearRuntimeInstance();
}
} }
private void LoadRuntimeInstance()
{
ClearRuntimeInstance();
if (selectedPrefabIndex == -1 || !Application.isPlaying) return;
var prefab = prefabList[selectedPrefabIndex];
// 调用自定义实例化方法
// runtimeInstance = Instantiate(prefab);
// runtimeInstance.hideFlags = HideFlags.DontSave;
if (_previewPanel == null) return;
runtimeInstance = _previewPanel.LoadModel(prefab);
runtimeInstance.hideFlags = HideFlags.DontSave;
if (runtimeInstance != null)
{
runtimePreviewableAsset = runtimeInstance.GetComponent<PreviewableAsset>();
Selection.activeGameObject = runtimeInstance;
}
}
private void RefreshRuntimeInstance()
{
if (selectedPrefabIndex == -1 || !Application.isPlaying) return;
ClearRuntimeInstance();
LoadRuntimeInstance();
}
private void SaveChangesToPrefab()
{
if (selectedPrefabIndex == -1 || runtimeInstance == null) return;
var prefab = prefabList[selectedPrefabIndex];
var previewableAsset = prefab.GetComponent<PreviewableAsset>();
if (previewableAsset && runtimePreviewableAsset)
{
previewableAsset.position = runtimeInstance.transform.localPosition;
previewableAsset.rotation = runtimeInstance.transform.localEulerAngles;
previewableAsset.scale = runtimeInstance.transform.localScale;
previewableAsset.canPan = runtimePreviewableAsset.canPan;
previewableAsset.canZoom = runtimePreviewableAsset.canZoom;
previewableAsset.zoom = runtimePreviewableAsset.zoom;
previewableAsset.pan = runtimePreviewableAsset.pan;
}
EditorUtility.SetDirty(prefab);
AssetDatabase.Refresh();
// // 默认实现 - 直接修改预制体
// PrefabUtility.SaveAsPrefabAsset(runtimeInstance, AssetDatabase.GetAssetPath(prefab));
// AssetDatabase.Refresh();
Debug.Log("Changes saved to prefab: " + prefab.name);
}
private void ClearRuntimeInstance()
{
if (runtimeInstance != null)
{
if (Application.isPlaying)
{
Destroy(runtimeInstance);
}
else
{
DestroyImmediate(runtimeInstance);
}
}
runtimeInstance = null;
runtimePreviewableAsset = null;
}
// // 确保选中项在可视区域内
// private void EnsureSelectionVisible()
// {
// // 计算选中项的大概位置
// float itemHeight = 24; // 每个列表项的大约高度
// float visibleHeight = position.height - 100; // 可视区域的大约高度
//
// // 计算选中项应该在的滚动位置范围
// float targetMin = selectedPrefabIndex * itemHeight;
// float targetMax = targetMin + itemHeight;
//
// // 调整滚动位置
// if (scrollPosition.y > targetMin)
// {
// scrollPosition.y = targetMin;
// }
// else if (scrollPosition.y + visibleHeight < targetMax)
// {
// scrollPosition.y = targetMax - visibleHeight;
// }
//
// // 重绘界面
// Repaint();
// }
} }

View File

@@ -3,37 +3,17 @@ using UnityEngine;
namespace NBF namespace NBF
{ {
/// <summary>
/// 模型拉近拉远配置
/// </summary>
[Serializable]
public class ModelZoomConfig
{
[Tooltip("是否可以放大缩小")] public bool canZoom;
[Tooltip("默认值")] public float zoom;
[Tooltip("最小值")] public float zoomMin;
[Tooltip("最大值")] public float zoomMax;
}
/// <summary>
/// 模型平移配置
/// </summary>
[Serializable]
public class ModelPanConfig
{
[Tooltip("是否可以平移")] public bool canPan;
[Tooltip("水平可移动值")] public float x = 0;
[Tooltip("垂直可移动值")] public float y = 0;
}
/// <summary> /// <summary>
/// 可以3D预览的资产 /// 可以3D预览的资产
/// </summary> /// </summary>
public class PreviewableAsset : MonoBehaviour public class PreviewableAsset : MonoBehaviour
{ {
[Tooltip("放大缩小配置")] public ModelZoomConfig zoom; [Tooltip("默认位置")] public Vector3 position;
[Tooltip("平移配置")] public ModelPanConfig pan;
[Tooltip("默认旋转")] public Vector3 rotation; [Tooltip("默认旋转")] public Vector3 rotation;
[Tooltip("默认形变")] public Vector3 scale; [Tooltip("默认形变")] public Vector3 scale;
[Tooltip("是否可以放大缩小")] public bool canZoom;
[Tooltip("放大缩小配置")] public Vector3 zoom;
[Tooltip("是否可以平移")] public bool canPan;
[Tooltip("平移配置")] public Rect pan;
} }
} }

View File

@@ -140,7 +140,8 @@ namespace NBF
// UI.Inst.OpenUI<FishingShopPanel>(); // UI.Inst.OpenUI<FishingShopPanel>();
LoadData(); LoadData();
UI.Inst.OpenUI<CommonTopPanel>(); UI.Inst.OpenUI<CommonTopPanel>();
UI.Inst.OpenUI<FishingPanel>(); // UI.Inst.OpenUI<FishingPanel>();
UI.Inst.OpenUI<PreviewPanel>();
// Fishing.Inst.Go(1); // Fishing.Inst.Go(1);
// UI.Inst.OpenUI<SettingPanel>(); // UI.Inst.OpenUI<SettingPanel>();
// UI.Inst.OpenUI<HomePanel>(); // UI.Inst.OpenUI<HomePanel>();

View File

@@ -17,6 +17,8 @@ namespace NBF
private SwipeGesture _swipeGesture; private SwipeGesture _swipeGesture;
private bool _focus; private bool _focus;
private Vector3 _zoomLimit;
private Rect _panLimit;
private void OnInited() private void OnInited()
{ {
@@ -39,17 +41,21 @@ namespace NBF
/// </summary> /// </summary>
/// <param name="configId"></param> /// <param name="configId"></param>
public void LoadAsset(int configId) public void LoadAsset(int configId)
{
//Assets/Resources/gfx/hooks/berserk_hooks/clas_20421_20446/clas_20423.prefab
//Assets/Resources/gfx/rods/syberia/bolo_10021/bolo_10021_LB400.prefab
//"Role/test"
var prefab = Resources.Load("gfx/hooks/berserk_hooks/clas_20421_20446/clas_20423");
SetModel((GameObject)Object.Instantiate(prefab));
}
public void SetModel(GameObject model)
{ {
if (_renderImage == null) if (_renderImage == null)
{ {
_renderImage = new ModelRenderImage(ModelHolder.asGraph); _renderImage = new ModelRenderImage(ModelHolder.asGraph);
} }
//Assets/Resources/gfx/hooks/berserk_hooks/clas_20421_20446/clas_20423.prefab
//Assets/Resources/gfx/rods/syberia/bolo_10021/bolo_10021_LB400.prefab
//"Role/test"
var prefab = Resources.Load("gfx/hooks/berserk_hooks/clas_20421_20446/clas_20423");
var model = ((GameObject)Object.Instantiate(prefab));
var ccdIk = model.GetComponent<CCDIK>(); var ccdIk = model.GetComponent<CCDIK>();
if (ccdIk != null) if (ccdIk != null)
{ {
@@ -69,19 +75,25 @@ namespace NBF
} }
_renderImage.modelRoot.localScale = new Vector3(200, 200, 200);
_renderImage.SetModel(model); _renderImage.SetModel(model);
_renderImage.modelRoot.localScale = Vector3.one;
var previewableAsset = model.GetComponent<PreviewableAsset>(); var previewableAsset = model.GetComponent<PreviewableAsset>();
if (previewableAsset != null) if (previewableAsset != null)
{ {
_renderImage.modelRoot.localPosition = new Vector3(0, 0, previewableAsset.zoom.zoom); _zoomLimit = previewableAsset.zoom;
_renderImage.modelRoot.localRotation = Quaternion.Euler(previewableAsset.rotation); _panLimit = previewableAsset.pan;
model.transform.localPosition = previewableAsset.position;
model.transform.localScale = previewableAsset.scale;
model.transform.localRotation = Quaternion.Euler(previewableAsset.rotation);
} }
else else
{ {
_renderImage.modelRoot.localPosition = new Vector3(0, 0, 3); _zoomLimit = Vector3.zero;
_renderImage.modelRoot.localRotation = Quaternion.Euler(Vector3.zero); _panLimit = Rect.zero;
model.transform.localPosition = previewableAsset.position;
model.transform.localScale = Vector3.one;
model.transform.localRotation = Quaternion.Euler(Vector3.zero);
} }
} }
@@ -166,7 +178,17 @@ namespace NBF
private void SetZoom(float delta) private void SetZoom(float delta)
{ {
var pos = _renderImage.modelRoot.localPosition; var pos = _renderImage.modelRoot.localPosition;
_renderImage.modelRoot.localPosition = new Vector3(pos.x, pos.y, pos.z + delta); var targetZ = pos.z + delta;
if (targetZ < _zoomLimit.x)
{
targetZ = _zoomLimit.x;
}
else if (targetZ > _zoomLimit.y)
{
targetZ = _zoomLimit.y;
}
_renderImage.modelRoot.localPosition = new Vector3(pos.x, pos.y, targetZ);
} }
#endregion #endregion

View File

@@ -9,6 +9,15 @@ namespace NBF
{ {
public override string UIPackName => "Tools"; public override string UIPackName => "Tools";
public override string UIResName => "PreviewPanel"; public override string UIResName => "PreviewPanel";
public GameObject Instance { get; private set; }
public GameObject LoadModel(GameObject prefab)
{
Instance = Object.Instantiate(prefab);
Debug.LogError($"预制体:{prefab.name} 实例={Instance}");
Model.SetModel(Instance);
return Instance;
}
} }
} }

View File

@@ -4,6 +4,11 @@
<component id="n0_isao" name="n0" src="8hy8la" fileName="Com/Back/Back1.xml" pkg="6hgkvlau" xy="0,-4"> <component id="n0_isao" name="n0" src="8hy8la" fileName="Com/Back/Back1.xml" pkg="6hgkvlau" xy="0,-4">
<relation target="" sidePair="width-width,height-height%"/> <relation target="" sidePair="width-width,height-height%"/>
</component> </component>
<component id="n1_isao" name="Model" src="5dtxm9" fileName="Com/ModelTexture.xml" pkg="6hgkvlau" xy="451,152"/> <graph id="n3_isao" name="n3" xy="157,174" size="620,620" type="rect" lineSize="10" lineColor="#ff8bf3ff" fillColor="#00ffffff">
<relation target="" sidePair="center-center,middle-middle"/>
</graph>
<component id="n1_isao" name="Model" src="5dtxm9" fileName="Com/ModelTexture.xml" pkg="6hgkvlau" xy="168,184">
<relation target="" sidePair="center-center,middle-middle"/>
</component>
</displayList> </displayList>
</component> </component>

View File

@@ -3,5 +3,5 @@
<resources> <resources>
<component id="isao0" name="PreviewPanel.xml" path="/" exported="true"/> <component id="isao0" name="PreviewPanel.xml" path="/" exported="true"/>
</resources> </resources>
<publish name="" genCode="true"/> <publish name="" path="../Assets/Resources/Fgui/Tools" packageCount="2" genCode="true"/>
</packageDescription> </packageDescription>

View File

@@ -11,13 +11,16 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIMGUIContainer_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb4f75f0eb2d14004826911645c6175d61fbe00_003F49_003F22dd7281_003FIMGUIContainer_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIMGUIContainer_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb4f75f0eb2d14004826911645c6175d61fbe00_003F49_003F22dd7281_003FIMGUIContainer_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AKeyCode_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F021f30a9a92b48ce98ae6b39956dd76a1df600_003Fd1_003F01a95d3a_003FKeyCode_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AKeyCode_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F021f30a9a92b48ce98ae6b39956dd76a1df600_003Fd1_003F01a95d3a_003FKeyCode_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Fbob_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F314938d17f3848e8ac683e11b27f62ee46ae00_003Fe8_003F01e5a04a_003FList_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Fbob_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F314938d17f3848e8ac683e11b27f62ee46ae00_003Fe8_003F01e5a04a_003FList_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AObject_002Ecs_002Fl_003AC_0021_003FUsers_003Fbob_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F021f30a9a92b48ce98ae6b39956dd76a1df600_003F35_003F4c34802c_003FObject_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APhysics_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F03ef825315384b1cab81c4b53eb03d922ac00_003Fc6_003F12ad2f00_003FPhysics_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APhysics_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F03ef825315384b1cab81c4b53eb03d922ac00_003Fc6_003F12ad2f00_003FPhysics_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARect_002Ecs_002Fl_003AC_0021_003FUsers_003Fbob_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F021f30a9a92b48ce98ae6b39956dd76a1df600_003F42_003F3681f1e8_003FRect_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARenderChain_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb4f75f0eb2d14004826911645c6175d61fbe00_003Fde_003Fedac53d9_003FRenderChain_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARenderChain_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb4f75f0eb2d14004826911645c6175d61fbe00_003Fde_003Fedac53d9_003FRenderChain_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AResolution_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F021f30a9a92b48ce98ae6b39956dd76a1df600_003F7f_003F84f3bf4d_003FResolution_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AResolution_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F021f30a9a92b48ce98ae6b39956dd76a1df600_003F7f_003F84f3bf4d_003FResolution_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARigidbody_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F03ef825315384b1cab81c4b53eb03d922ac00_003Fb7_003F46515be2_003FRigidbody_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARigidbody_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F03ef825315384b1cab81c4b53eb03d922ac00_003Fb7_003F46515be2_003FRigidbody_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASphereCollider_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F03ef825315384b1cab81c4b53eb03d922ac00_003F31_003F871dbbe1_003FSphereCollider_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASphereCollider_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F03ef825315384b1cab81c4b53eb03d922ac00_003F31_003F871dbbe1_003FSphereCollider_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASystemLanguage_002Ecs_002Fl_003AC_0021_003FUsers_003Fbob_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F021f30a9a92b48ce98ae6b39956dd76a1df600_003F90_003F0e6861e6_003FSystemLanguage_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASystemLanguage_002Ecs_002Fl_003AC_0021_003FUsers_003Fbob_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F021f30a9a92b48ce98ae6b39956dd76a1df600_003F90_003F0e6861e6_003FSystemLanguage_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AVector2Int_002Ecs_002Fl_003AC_0021_003FUsers_003Fbob_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F021f30a9a92b48ce98ae6b39956dd76a1df600_003F23_003F52710087_003FVector2Int_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AVector2Int_002Ecs_002Fl_003AC_0021_003FUsers_003Fbob_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F021f30a9a92b48ce98ae6b39956dd76a1df600_003F23_003F52710087_003FVector2Int_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AVector4_002Ecs_002Fl_003AC_0021_003FUsers_003Fbob_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F021f30a9a92b48ce98ae6b39956dd76a1df600_003F15_003F15f07947_003FVector4_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AVoid_002Ecs_002Fl_003AC_0021_003FUsers_003Fbob_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F314938d17f3848e8ac683e11b27f62ee46ae00_003F6f_003F6fe2b5e6_003FVoid_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AVoid_002Ecs_002Fl_003AC_0021_003FUsers_003Fbob_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F314938d17f3848e8ac683e11b27f62ee46ae00_003F6f_003F6fe2b5e6_003FVoid_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
</wpf:ResourceDictionary> </wpf:ResourceDictionary>