From 8cd8aa31da4c2e099569d20a1d552d45687f0b71 Mon Sep 17 00:00:00 2001 From: keshaohong <740612340@qq.com> Date: Sun, 28 Jun 2026 16:40:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B7=A5=E5=85=B7=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unity/Assets/Editor.meta | 8 + unity/Assets/Editor/ElementsAligner.cs | 229 ++++++++++++++++++ unity/Assets/Editor/ElementsAligner.cs.meta | 11 + unity/Assets/Editor/SceneElementsYSorter.cs | 150 ++++++++++++ .../Editor/SceneElementsYSorter.cs.meta | 11 + unity/Assets/Editor/YSortBatchAdder.cs | 150 ++++++++++++ unity/Assets/Editor/YSortBatchAdder.cs.meta | 11 + unity/Assets/Editor/YSortDebugger.cs | 131 ++++++++++ unity/Assets/Editor/YSortDebugger.cs.meta | 11 + unity/Assets/Editor/YSortEditorWindow.cs | 173 +++++++++++++ unity/Assets/Editor/YSortEditorWindow.cs.meta | 11 + unity/Assets/Scenes/res/prefab.meta | 8 + unity/Assets/Scenes/res/prefab/cloud1.prefab | 90 +++++++ .../Scenes/res/prefab/cloud1.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/cloud2.prefab | 90 +++++++ .../Scenes/res/prefab/cloud2.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/grass 0.prefab | 90 +++++++ .../Scenes/res/prefab/grass 0.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/grass 1.prefab | 90 +++++++ .../Scenes/res/prefab/grass 1.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/grass2.prefab | 90 +++++++ .../Scenes/res/prefab/grass2.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/grass3.prefab | 90 +++++++ .../Scenes/res/prefab/grass3.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/groot1.prefab | 90 +++++++ .../Scenes/res/prefab/groot1.prefab.meta | 7 + .../Assets/Scenes/res/prefab/mountain1.prefab | 90 +++++++ .../Scenes/res/prefab/mountain1.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/stone1.prefab | 90 +++++++ .../Scenes/res/prefab/stone1.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/stone2.prefab | 90 +++++++ .../Scenes/res/prefab/stone2.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/stone3.prefab | 90 +++++++ .../Scenes/res/prefab/stone3.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/tree1.prefab | 90 +++++++ .../Scenes/res/prefab/tree1.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/tree2.prefab | 90 +++++++ .../Scenes/res/prefab/tree2.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/tree3.prefab | 90 +++++++ .../Scenes/res/prefab/tree3.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/tree4.prefab | 90 +++++++ .../Scenes/res/prefab/tree4.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/tree5.prefab | 90 +++++++ .../Scenes/res/prefab/tree5.prefab.meta | 7 + unity/Assets/Scenes/res/prefab/tree6.prefab | 90 +++++++ .../Scenes/res/prefab/tree6.prefab.meta | 7 + unity/Assets/camera/YSorter.cs | 22 +- 47 files changed, 2563 insertions(+), 12 deletions(-) create mode 100644 unity/Assets/Editor.meta create mode 100644 unity/Assets/Editor/ElementsAligner.cs create mode 100644 unity/Assets/Editor/ElementsAligner.cs.meta create mode 100644 unity/Assets/Editor/SceneElementsYSorter.cs create mode 100644 unity/Assets/Editor/SceneElementsYSorter.cs.meta create mode 100644 unity/Assets/Editor/YSortBatchAdder.cs create mode 100644 unity/Assets/Editor/YSortBatchAdder.cs.meta create mode 100644 unity/Assets/Editor/YSortDebugger.cs create mode 100644 unity/Assets/Editor/YSortDebugger.cs.meta create mode 100644 unity/Assets/Editor/YSortEditorWindow.cs create mode 100644 unity/Assets/Editor/YSortEditorWindow.cs.meta create mode 100644 unity/Assets/Scenes/res/prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/cloud1.prefab create mode 100644 unity/Assets/Scenes/res/prefab/cloud1.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/cloud2.prefab create mode 100644 unity/Assets/Scenes/res/prefab/cloud2.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/grass 0.prefab create mode 100644 unity/Assets/Scenes/res/prefab/grass 0.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/grass 1.prefab create mode 100644 unity/Assets/Scenes/res/prefab/grass 1.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/grass2.prefab create mode 100644 unity/Assets/Scenes/res/prefab/grass2.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/grass3.prefab create mode 100644 unity/Assets/Scenes/res/prefab/grass3.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/groot1.prefab create mode 100644 unity/Assets/Scenes/res/prefab/groot1.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/mountain1.prefab create mode 100644 unity/Assets/Scenes/res/prefab/mountain1.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/stone1.prefab create mode 100644 unity/Assets/Scenes/res/prefab/stone1.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/stone2.prefab create mode 100644 unity/Assets/Scenes/res/prefab/stone2.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/stone3.prefab create mode 100644 unity/Assets/Scenes/res/prefab/stone3.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/tree1.prefab create mode 100644 unity/Assets/Scenes/res/prefab/tree1.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/tree2.prefab create mode 100644 unity/Assets/Scenes/res/prefab/tree2.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/tree3.prefab create mode 100644 unity/Assets/Scenes/res/prefab/tree3.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/tree4.prefab create mode 100644 unity/Assets/Scenes/res/prefab/tree4.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/tree5.prefab create mode 100644 unity/Assets/Scenes/res/prefab/tree5.prefab.meta create mode 100644 unity/Assets/Scenes/res/prefab/tree6.prefab create mode 100644 unity/Assets/Scenes/res/prefab/tree6.prefab.meta diff --git a/unity/Assets/Editor.meta b/unity/Assets/Editor.meta new file mode 100644 index 0000000..41c8230 --- /dev/null +++ b/unity/Assets/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: B35M4XmvASlCoiCqqevhf9PzxguX4ZL8m73Mtl7Ay8Y2uHQi63PdPwo= +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Editor/ElementsAligner.cs b/unity/Assets/Editor/ElementsAligner.cs new file mode 100644 index 0000000..51a68cc --- /dev/null +++ b/unity/Assets/Editor/ElementsAligner.cs @@ -0,0 +1,229 @@ +using UnityEngine; +using UnityEditor; + +/// +/// Elements底对齐工具 - 将Elements下所有物体底对齐到Y=0平面 +/// +public class ElementsAligner : Editor +{ + [MenuItem("Tools/Elements/底对齐到地面 (Y=0)")] + public static void AlignElementsToGround() + { + GameObject elements = GameObject.Find("Elements"); + + if (elements == null) + { + EditorUtility.DisplayDialog("错误", "找不到场景中的 'Elements' 物体", "确定"); + return; + } + + int count = 0; + Undo.SetCurrentGroupName("Align Elements to Ground"); + + for (int i = 0; i < elements.transform.childCount; i++) + { + Transform child = elements.transform.GetChild(i); + + // 记录到Undo栈 + Undo.RecordObject(child, $"Align {child.name}"); + + // 获取物体的包围盒 + Bounds bounds = GetObjectBounds(child); + + if (bounds.size == Vector3.zero) + { + Debug.LogWarning($"跳过 {child.name} - 无法计算包围盒"); + continue; + } + + // 计算需要移动的距离:让物体底部对齐到Y=0 + float bottomY = bounds.min.y; + Vector3 newPosition = child.position; + newPosition.y = child.position.y - bottomY; + + child.position = newPosition; + + count++; + Debug.Log($"✓ 对齐 {child.name}: 底部Y从 {bottomY:F3} 到 0"); + } + + if (count > 0) + { + UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( + UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() + ); + + EditorUtility.DisplayDialog("完成", $"已对齐 {count} 个物体到地面 (Y=0)", "确定"); + Debug.Log($"完成!对齐了 {count} 个物体"); + } + } + + [MenuItem("Tools/Elements/底对齐到指定高度")] + public static void AlignElementsToCustomHeight() + { + string input = EditorInputDialog.Show("对齐到指定高度", "请输入目标Y坐标:", "0"); + + if (input == null) return; // 用户取消 + + if (!float.TryParse(input, out float targetY)) + { + EditorUtility.DisplayDialog("错误", "请输入有效的数字", "确定"); + return; + } + + GameObject elements = GameObject.Find("Elements"); + + if (elements == null) + { + EditorUtility.DisplayDialog("错误", "找不到场景中的 'Elements' 物体", "确定"); + return; + } + + int count = 0; + Undo.SetCurrentGroupName("Align Elements to Custom Height"); + + for (int i = 0; i < elements.transform.childCount; i++) + { + Transform child = elements.transform.GetChild(i); + Undo.RecordObject(child, $"Align {child.name}"); + + Bounds bounds = GetObjectBounds(child); + + if (bounds.size == Vector3.zero) + { + Debug.LogWarning($"跳过 {child.name} - 无法计算包围盒"); + continue; + } + + float bottomY = bounds.min.y; + Vector3 newPosition = child.position; + newPosition.y = child.position.y - bottomY + targetY; + + child.position = newPosition; + + count++; + Debug.Log($"✓ 对齐 {child.name}: 底部Y从 {bottomY:F3} 到 {targetY:F3}"); + } + + if (count > 0) + { + UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( + UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() + ); + + EditorUtility.DisplayDialog("完成", $"已对齐 {count} 个物体到 Y={targetY}", "确定"); + } + } + + /// + /// 获取物体的世界空间包围盒(包括所有子物体和渲染器) + /// + private static Bounds GetObjectBounds(Transform obj) + { + Renderer[] renderers = obj.GetComponentsInChildren(); + + if (renderers.Length == 0) + { + // 如果没有渲染器,使用碰撞体或transform位置 + Collider[] colliders = obj.GetComponentsInChildren(); + if (colliders.Length > 0) + { + Bounds bounds = colliders[0].bounds; + for (int i = 1; i < colliders.Length; i++) + { + bounds.Encapsulate(colliders[i].bounds); + } + return bounds; + } + + // 都没有,返回以物体为中心的小包围盒 + return new Bounds(obj.position, Vector3.one * 0.1f); + } + + // 使用第一个渲染器初始化 + Bounds result = renderers[0].bounds; + + // 合并所有渲染器的包围盒 + for (int i = 1; i < renderers.Length; i++) + { + result.Encapsulate(renderers[i].bounds); + } + + return result; + } +} + +/// +/// 简单的输入对话框(用于自定义高度) +/// +public class EditorInputDialog : EditorWindow +{ + private string _title; + private string _message; + private string _inputText; + private bool _confirmed = false; + + public static string Show(string title, string message, string defaultValue) + { + EditorInputDialog window = CreateInstance(); + window.titleContent = new GUIContent(title); + window._title = title; + window._message = message; + window._inputText = defaultValue; + window._confirmed = false; + window.minSize = new Vector2(300, 120); + window.maxSize = new Vector2(300, 120); + window.ShowModal(); + + return window._confirmed ? window._inputText : null; + } + + private void OnGUI() + { + GUILayout.Space(10); + GUILayout.Label(_message, EditorStyles.wordWrappedLabel); + GUILayout.Space(5); + + GUI.SetNextControlName("InputField"); + _inputText = GUILayout.TextField(_inputText); + + if (Event.current.type == EventType.Repaint && GUI.GetNameOfFocusedControl() != "InputField") + { + EditorGUI.FocusTextInControl("InputField"); + } + + // 支持回车确认 + if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return) + { + _confirmed = true; + Close(); + Event.current.Use(); + } + + // 支持ESC取消 + if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Escape) + { + _confirmed = false; + Close(); + Event.current.Use(); + } + + GUILayout.Space(10); + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("确定", GUILayout.Width(80))) + { + _confirmed = true; + Close(); + } + + if (GUILayout.Button("取消", GUILayout.Width(80))) + { + _confirmed = false; + Close(); + } + + GUILayout.EndHorizontal(); + } +} diff --git a/unity/Assets/Editor/ElementsAligner.cs.meta b/unity/Assets/Editor/ElementsAligner.cs.meta new file mode 100644 index 0000000..a834695 --- /dev/null +++ b/unity/Assets/Editor/ElementsAligner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: DC5L4SmvAikxYp2FEhg5gm08qf2yJAfGzXIwjRrErdh5PGIXksqhon4= +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Editor/SceneElementsYSorter.cs b/unity/Assets/Editor/SceneElementsYSorter.cs new file mode 100644 index 0000000..002127e --- /dev/null +++ b/unity/Assets/Editor/SceneElementsYSorter.cs @@ -0,0 +1,150 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +/// +/// 场景Elements Y-Sort添加工具 +/// +public class SceneElementsYSorter : Editor +{ + [MenuItem("Tools/Y-Sort/给Test场景Elements添加YSorter")] + public static void AddYSorterToTestSceneElements() + { + // 查找场景中的Elements物体 + GameObject elements = GameObject.Find("Elements"); + + if (elements == null) + { + EditorUtility.DisplayDialog("错误", "找不到场景中的 'Elements' 物体", "确定"); + return; + } + + Transform elementsTransform = elements.transform; + int count = 0; + List processedObjects = new List(); + + // 遍历所有直接子物体 + for (int i = 0; i < elementsTransform.childCount; i++) + { + Transform child = elementsTransform.GetChild(i); + + // 检查是否已有YSorter + if (child.GetComponent() != null) + { + Debug.Log($"跳过 {child.name} - 已有YSorter"); + continue; + } + + // 添加YSorter组件 + YSorter ySorter = child.gameObject.AddComponent(); + + // 根据物体名称设置baseSortingOrder + int baseOrder = DetermineBaseOrder(child.name); + + // 通过SerializedObject设置 + SerializedObject so = new SerializedObject(ySorter); + SerializedProperty prop = so.FindProperty("baseSortingOrder"); + if (prop != null) + { + prop.intValue = baseOrder; + so.ApplyModifiedProperties(); + } + + // 标记场景已修改 + EditorUtility.SetDirty(child.gameObject); + + count++; + processedObjects.Add($"{child.name} (baseSortingOrder: {baseOrder})"); + Debug.Log($"✓ 已添加 YSorter 到 {child.name} (baseSortingOrder: {baseOrder})"); + } + + // 保存场景 + if (count > 0) + { + UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( + UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() + ); + + EditorUtility.DisplayDialog( + "完成", + $"已给 {count} 个物体添加YSorter\n\n" + + string.Join("\n", processedObjects), + "确定" + ); + } + else + { + EditorUtility.DisplayDialog("提示", "所有物体都已有YSorter", "确定"); + } + } + + [MenuItem("Tools/Y-Sort/给选中物体添加YSorter")] + public static void AddYSorterToSelected() + { + if (Selection.gameObjects.Length == 0) + { + EditorUtility.DisplayDialog("提示", "请先选择物体", "确定"); + return; + } + + int count = 0; + foreach (GameObject go in Selection.gameObjects) + { + if (go.GetComponent() != null) + { + Debug.Log($"跳过 {go.name} - 已有YSorter"); + continue; + } + + YSorter ySorter = go.AddComponent(); + int baseOrder = DetermineBaseOrder(go.name); + + SerializedObject so = new SerializedObject(ySorter); + SerializedProperty prop = so.FindProperty("baseSortingOrder"); + if (prop != null) + { + prop.intValue = baseOrder; + so.ApplyModifiedProperties(); + } + + EditorUtility.SetDirty(go); + count++; + Debug.Log($"✓ 已添加 YSorter 到 {go.name} (baseSortingOrder: {baseOrder})"); + } + + if (count > 0) + { + UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( + UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() + ); + Debug.Log($"完成!给 {count} 个物体添加了YSorter"); + } + } + + private static int DetermineBaseOrder(string objectName) + { + string nameLower = objectName.ToLower(); + + if (nameLower.Contains("ground") || nameLower.Contains("floor")) + return 0; + if (nameLower.Contains("shadow")) + return 500; + if (nameLower.Contains("grass") || nameLower.Contains("flower") || + nameLower.Contains("leaf") || nameLower.Contains("leaves")) + return 800; + if (nameLower.Contains("rock") || nameLower.Contains("bamboo") || + nameLower.Contains("barrel") || nameLower.Contains("box") || + nameLower.Contains("log") || nameLower.Contains("board") || + nameLower.Contains("bush") || nameLower.Contains("bonfire") || + nameLower.Contains("candle") || nameLower.Contains("carcasses") || + nameLower.Contains("lotus") || nameLower.Contains("pedestal") || + nameLower.Contains("scarecrow") || nameLower.Contains("skeleton") || + nameLower.Contains("skull") || nameLower.Contains("spear") || + nameLower.Contains("statue") || nameLower.Contains("tent") || + nameLower.Contains("tenticles") || nameLower.Contains("wooden") || + nameLower.Contains("bag") || nameLower.Contains("house")) + return 1000; + + return 1000; + } +} diff --git a/unity/Assets/Editor/SceneElementsYSorter.cs.meta b/unity/Assets/Editor/SceneElementsYSorter.cs.meta new file mode 100644 index 0000000..4eb3265 --- /dev/null +++ b/unity/Assets/Editor/SceneElementsYSorter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: CXId5y+uBnMV5xxn04I7kiFCq2y/PqaiVVbHtE0aEpDF+ppBPLZ1ETI= +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Editor/YSortBatchAdder.cs b/unity/Assets/Editor/YSortBatchAdder.cs new file mode 100644 index 0000000..7112174 --- /dev/null +++ b/unity/Assets/Editor/YSortBatchAdder.cs @@ -0,0 +1,150 @@ +using UnityEngine; +using UnityEditor; +using System.IO; + +/// +/// Y-Sort 批量添加工具 +/// +/// 使用方法: +/// 1. 在Unity菜单栏点击 Tools -> Y-Sort -> 批量添加YSorter +/// 2. 会自动给Player、Enemy和所有场景预制体添加YSorter组件 +/// 3. 根据物体类型自动设置baseSortingOrder +/// +public class YSortBatchAdder : Editor +{ + [MenuItem("Tools/Y-Sort/批量添加YSorter到所有预制体")] + public static void AddYSorterToAllPrefabs() + { + string prefabFolder = "Assets/2.5D Engine/Prefabs"; + + if (!Directory.Exists(prefabFolder)) + { + Debug.LogError($"找不到预制体文件夹: {prefabFolder}"); + return; + } + + string[] prefabPaths = Directory.GetFiles(prefabFolder, "*.prefab", SearchOption.AllDirectories); + int count = 0; + + foreach (string path in prefabPaths) + { + string normalizedPath = path.Replace("\\", "/"); + GameObject prefab = AssetDatabase.LoadAssetAtPath(normalizedPath); + + if (prefab == null) continue; + + // 检查是否已经有YSorter + if (prefab.GetComponentInChildren() != null) + { + Debug.Log($"跳过 {prefab.name} - 已有YSorter"); + continue; + } + + // 根据预制体名称判断类型并设置baseSortingOrder + int baseOrder = DetermineBaseOrder(prefab.name); + + // 添加到根物体 + AddYSorterToPrefab(prefab, baseOrder); + count++; + + Debug.Log($"已添加 YSorter 到 {prefab.name} (baseSortingOrder: {baseOrder})"); + } + + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + + Debug.Log($"完成!共添加了 {count} 个YSorter"); + } + + [MenuItem("Tools/Y-Sort/添加YSorter到Player")] + public static void AddYSorterToPlayer() + { + string playerPath = "Assets/2.5D Engine/Player.prefab"; + GameObject player = AssetDatabase.LoadAssetAtPath(playerPath); + + if (player == null) + { + Debug.LogError($"找不到Player预制体: {playerPath}"); + return; + } + + AddYSorterToPrefab(player, 2000); // 角色层 + AssetDatabase.SaveAssets(); + Debug.Log("已添加YSorter到Player (baseSortingOrder: 2000)"); + } + + [MenuItem("Tools/Y-Sort/添加YSorter到Enemy")] + public static void AddYSorterToEnemy() + { + string enemyPath = "Assets/2.5D Engine/Enemy.prefab"; + GameObject enemy = AssetDatabase.LoadAssetAtPath(enemyPath); + + if (enemy == null) + { + Debug.LogError($"找不到Enemy预制体: {enemyPath}"); + return; + } + + AddYSorterToPrefab(enemy, 2000); // 角色层 + AssetDatabase.SaveAssets(); + Debug.Log("已添加YSorter到Enemy (baseSortingOrder: 2000)"); + } + + private static int DetermineBaseOrder(string prefabName) + { + string nameLower = prefabName.ToLower(); + + // 地面/地板类 + if (nameLower.Contains("ground") || nameLower.Contains("floor")) + return 0; + + // 阴影类 + if (nameLower.Contains("shadow")) + return 500; + + // 草、花、叶子等小物件 + if (nameLower.Contains("grass") || nameLower.Contains("flower") || + nameLower.Contains("leaf") || nameLower.Contains("leaves")) + return 800; + + // 场景道具(树、石头、箱子、桶等) + if (nameLower.Contains("rock") || nameLower.Contains("bamboo") || + nameLower.Contains("barrel") || nameLower.Contains("box") || + nameLower.Contains("log") || nameLower.Contains("board") || + nameLower.Contains("bush") || nameLower.Contains("bonfire") || + nameLower.Contains("candle") || nameLower.Contains("carcasses") || + nameLower.Contains("lotus") || nameLower.Contains("pedestal") || + nameLower.Contains("scarecrow") || nameLower.Contains("skeleton") || + nameLower.Contains("skull") || nameLower.Contains("spear") || + nameLower.Contains("statue") || nameLower.Contains("tent") || + nameLower.Contains("tenticles") || nameLower.Contains("wooden") || + nameLower.Contains("bag") || nameLower.Contains("house")) + return 1000; + + // 默认 + return 1000; + } + + private static void AddYSorterToPrefab(GameObject prefab, int baseSortingOrder) + { + // 使用PrefabUtility打开预制体进行编辑 + string prefabPath = AssetDatabase.GetAssetPath(prefab); + GameObject prefabRoot = PrefabUtility.LoadPrefabContents(prefabPath); + + // 添加YSorter组件到根物体 + YSorter ySorter = prefabRoot.AddComponent(); + + // 通过SerializedObject设置baseSortingOrder + SerializedObject so = new SerializedObject(ySorter); + SerializedProperty baseOrderProp = so.FindProperty("baseSortingOrder"); + if (baseOrderProp != null) + { + baseOrderProp.intValue = baseSortingOrder; + so.ApplyModifiedProperties(); + } + + // 保存预制体 + PrefabUtility.SaveAsPrefabAsset(prefabRoot, prefabPath); + PrefabUtility.UnloadPrefabContents(prefabRoot); + } +} diff --git a/unity/Assets/Editor/YSortBatchAdder.cs.meta b/unity/Assets/Editor/YSortBatchAdder.cs.meta new file mode 100644 index 0000000..0d4caa4 --- /dev/null +++ b/unity/Assets/Editor/YSortBatchAdder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: XHscsS34ASkUIqS5+NMIlnFVzhdiTT4OWMFKV5plXmzuXkQ9iGNU2EA= +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Editor/YSortDebugger.cs b/unity/Assets/Editor/YSortDebugger.cs new file mode 100644 index 0000000..ec13443 --- /dev/null +++ b/unity/Assets/Editor/YSortDebugger.cs @@ -0,0 +1,131 @@ +using UnityEngine; +using UnityEditor; + +/// +/// Y-Sort诊断工具 +/// +public class YSortDebugger : Editor +{ + [MenuItem("Tools/Y-Sort/诊断YSorter状态")] + public static void DebugYSorter() + { + // 查找场景中所有YSorter + YSorter[] allSorters = FindObjectsOfType(); + + if (allSorters.Length == 0) + { + EditorUtility.DisplayDialog("诊断结果", "场景中没有找到任何YSorter组件!\n\n请先使用菜单:\nTools → Y-Sort → 给Test场景Elements添加YSorter", "确定"); + return; + } + + string report = $"找到 {allSorters.Length} 个YSorter组件\n\n"; + report += "=== 详细信息 ===\n\n"; + + foreach (YSorter sorter in allSorters) + { + report += $"物体: {sorter.gameObject.name}\n"; + report += $" 位置: {sorter.transform.position}\n"; + + // 获取SpriteRenderer + SpriteRenderer sr = sorter.GetComponentInChildren(); + if (sr != null) + { + report += $" SpriteRenderer: {sr.name}\n"; + report += $" SortingLayer: {sr.sortingLayerName}\n"; + report += $" SortingOrder: {sr.sortingOrder}\n"; + } + else + { + report += $" SpriteRenderer: 未找到!\n"; + } + + report += "\n"; + } + + // 检查是否都在同一个SortingLayer + string[] layers = new string[allSorters.Length]; + for (int i = 0; i < allSorters.Length; i++) + { + SpriteRenderer sr = allSorters[i].GetComponentInChildren(); + if (sr != null) + layers[i] = sr.sortingLayerName; + } + + bool allSameLayer = true; + if (layers.Length > 0) + { + string firstLayer = layers[0]; + foreach (string layer in layers) + { + if (layer != firstLayer) + { + allSameLayer = false; + break; + } + } + } + + if (!allSameLayer) + { + report += "⚠️ 警告: 物体不在同一个SortingLayer!\n"; + report += "这可能导致排序不正确。\n"; + } + + Debug.Log(report); + EditorUtility.DisplayDialog("诊断完成", $"诊断信息已输出到控制台\n\n请查看Unity Console窗口", "确定"); + } + + [MenuItem("Tools/Y-Sort/测试YSorter计算")] + public static void TestYSorterCalculation() + { + GameObject selected = Selection.activeGameObject; + + if (selected == null) + { + EditorUtility.DisplayDialog("提示", "请先选择一个物体", "确定"); + return; + } + + YSorter sorter = selected.GetComponent(); + if (sorter == null) + { + EditorUtility.DisplayDialog("提示", $"选中的物体 {selected.name} 没有YSorter组件", "确定"); + return; + } + + // 通过反射获取私有字段 + var baseOrderField = typeof(YSorter).GetField("baseSortingOrder", + System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + var scaleFactorField = typeof(YSorter).GetField("scaleFactor", + System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + + int baseOrder = (int)baseOrderField.GetValue(sorter); + float scaleFactor = (float)scaleFactorField.GetValue(sorter); + + Vector3 pos = selected.transform.position; + int expectedOrder = baseOrder + Mathf.RoundToInt(pos.z * scaleFactor); + + SpriteRenderer sr = sorter.GetComponentInChildren(); + int actualOrder = sr != null ? sr.sortingOrder : -1; + + string msg = $"物体: {selected.name}\n"; + msg += $"位置: {pos}\n"; + msg += $"Z坐标: {pos.z:F3}\n"; + msg += $"baseSortingOrder: {baseOrder}\n"; + msg += $"scaleFactor: {scaleFactor}\n"; + msg += $"期望SortingOrder: {expectedOrder}\n"; + msg += $"实际SortingOrder: {actualOrder}\n\n"; + + if (expectedOrder == actualOrder) + { + msg += "✓ 排序正确"; + } + else + { + msg += "✗ 排序不匹配!"; + } + + EditorUtility.DisplayDialog("YSorter测试", msg, "确定"); + Debug.Log(msg); + } +} diff --git a/unity/Assets/Editor/YSortDebugger.cs.meta b/unity/Assets/Editor/YSortDebugger.cs.meta new file mode 100644 index 0000000..d2ed177 --- /dev/null +++ b/unity/Assets/Editor/YSortDebugger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: CSkWsXyqUSrgcqGVp1KhCflPlY95SPuT+0n6ZO4FNbzx7EhZFVzsyec= +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Editor/YSortEditorWindow.cs b/unity/Assets/Editor/YSortEditorWindow.cs new file mode 100644 index 0000000..fe1b355 --- /dev/null +++ b/unity/Assets/Editor/YSortEditorWindow.cs @@ -0,0 +1,173 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +/// +/// Y-Sort 批量添加工具 - EditorWindow版本 +/// +public class YSortEditorWindow : EditorWindow +{ + private Vector2 scrollPosition; + private List logMessages = new List(); + + [MenuItem("Tools/Y-Sort/Y-Sort管理工具")] + public static void ShowWindow() + { + GetWindow("Y-Sort管理工具"); + } + + private void OnGUI() + { + GUILayout.Label("Y-Sort批量添加", EditorStyles.boldLabel); + + GUILayout.Space(10); + + if (GUILayout.Button("添加YSorter到Player预制体", GUILayout.Height(30))) + { + AddToPlayer(); + } + + if (GUILayout.Button("添加YSorter到Enemy预制体", GUILayout.Height(30))) + { + AddToEnemy(); + } + + GUILayout.Space(10); + + if (GUILayout.Button("批量添加到所有场景预制体 (2.5D Engine/Prefabs)", GUILayout.Height(30))) + { + AddToAllPrefabs(); + } + + GUILayout.Space(10); + + if (GUILayout.Button("清除日志", GUILayout.Height(20))) + { + logMessages.Clear(); + Repaint(); + } + + GUILayout.Space(10); + GUILayout.Label("日志输出:", EditorStyles.boldLabel); + + scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.ExpandHeight(true)); + foreach (string msg in logMessages) + { + GUILayout.Label(msg); + } + GUILayout.EndScrollView(); + } + + private void AddLog(string msg) + { + logMessages.Add(msg); + Debug.Log(msg); + Repaint(); + } + + private void AddToPlayer() + { + string path = "Assets/2.5D Engine/Player.prefab"; + AddYSorterToPrefab(path, 2000, "Player"); + } + + private void AddToEnemy() + { + string path = "Assets/2.5D Engine/Enemy.prefab"; + AddYSorterToPrefab(path, 2000, "Enemy"); + } + + private void AddToAllPrefabs() + { + string folder = "Assets/2.5D Engine/Prefabs"; + string[] files = System.IO.Directory.GetFiles(folder, "*.prefab", System.IO.SearchOption.AllDirectories); + + int count = 0; + foreach (string file in files) + { + string normalizedPath = file.Replace("\\", "/"); + string prefabName = System.IO.Path.GetFileNameWithoutExtension(file); + int baseOrder = DetermineBaseOrder(prefabName); + + if (AddYSorterToPrefab(normalizedPath, baseOrder, prefabName)) + { + count++; + } + } + + AddLog($"完成!共添加了 {count} 个YSorter"); + } + + private bool AddYSorterToPrefab(string path, int baseSortingOrder, string displayName) + { + GameObject prefab = AssetDatabase.LoadAssetAtPath(path); + if (prefab == null) + { + AddLog($"错误: 找不到预制体 {displayName}"); + return false; + } + + // 检查是否已有YSorter + if (prefab.GetComponentInChildren() != null) + { + AddLog($"跳过 {displayName} - 已有YSorter"); + return false; + } + + // 打开预制体进行编辑 + string assetPath = AssetDatabase.GetAssetPath(prefab); + GameObject prefabRoot = PrefabUtility.LoadPrefabContents(assetPath); + + if (prefabRoot == null) + { + AddLog($"错误: 无法加载预制体内容 {displayName}"); + return false; + } + + // 添加YSorter组件 + YSorter ySorter = prefabRoot.AddComponent(); + + // 设置baseSortingOrder + SerializedObject so = new SerializedObject(ySorter); + SerializedProperty prop = so.FindProperty("baseSortingOrder"); + if (prop != null) + { + prop.intValue = baseSortingOrder; + so.ApplyModifiedProperties(); + } + + // 保存 + PrefabUtility.SaveAsPrefabAsset(prefabRoot, assetPath); + PrefabUtility.UnloadPrefabContents(prefabRoot); + + AddLog($"✓ 已添加 YSorter 到 {displayName} (baseSortingOrder: {baseSortingOrder})"); + return true; + } + + private int DetermineBaseOrder(string prefabName) + { + string nameLower = prefabName.ToLower(); + + if (nameLower.Contains("ground") || nameLower.Contains("floor")) + return 0; + if (nameLower.Contains("shadow")) + return 500; + if (nameLower.Contains("grass") || nameLower.Contains("flower") || + nameLower.Contains("leaf") || nameLower.Contains("leaves")) + return 800; + if (nameLower.Contains("rock") || nameLower.Contains("bamboo") || + nameLower.Contains("barrel") || nameLower.Contains("box") || + nameLower.Contains("log") || nameLower.Contains("board") || + nameLower.Contains("bush") || nameLower.Contains("bonfire") || + nameLower.Contains("candle") || nameLower.Contains("carcasses") || + nameLower.Contains("lotus") || nameLower.Contains("pedestal") || + nameLower.Contains("scarecrow") || nameLower.Contains("skeleton") || + nameLower.Contains("skull") || nameLower.Contains("spear") || + nameLower.Contains("statue") || nameLower.Contains("tent") || + nameLower.Contains("tenticles") || nameLower.Contains("wooden") || + nameLower.Contains("bag") || nameLower.Contains("house")) + return 1000; + + return 1000; + } +} diff --git a/unity/Assets/Editor/YSortEditorWindow.cs.meta b/unity/Assets/Editor/YSortEditorWindow.cs.meta new file mode 100644 index 0000000..2f32eed --- /dev/null +++ b/unity/Assets/Editor/YSortEditorWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: DHhNtyKoVXmD0PMFCorGxxPHUaBpiHhn0MMdJ4PaV2ygEFgYTD9bPtk= +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab.meta b/unity/Assets/Scenes/res/prefab.meta new file mode 100644 index 0000000..495abc9 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: D3kftiukUS/4k/2Q8ce4ciGO0lsjOQjcVNeonF0SHuvfRbX8pmgjnOE= +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/cloud1.prefab b/unity/Assets/Scenes/res/prefab/cloud1.prefab new file mode 100644 index 0000000..58b3ae5 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/cloud1.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &6899754420521126267 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 8451410411389343811} + - component: {fileID: 301522936781993068} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: cloud1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8451410411389343811 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6899754420521126267} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.55, y: 0, z: 2.72} + m_LocalScale: {x: 1.0488987, y: 1.0488987, z: 1.0488987} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &301522936781993068 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6899754420521126267} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 4277e7d03e5e19b40a79d382ef5e74ac, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/cloud1.prefab.meta b/unity/Assets/Scenes/res/prefab/cloud1.prefab.meta new file mode 100644 index 0000000..de6f54a --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/cloud1.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: DCgbsn6qV3NWblhH9eDoWZeKXUIcRWsrraAnEqo1V3jBktB2dtJrhrQ= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/cloud2.prefab b/unity/Assets/Scenes/res/prefab/cloud2.prefab new file mode 100644 index 0000000..2de0538 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/cloud2.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &6782446334086200893 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 7110582839246585995} + - component: {fileID: 7570130396318949430} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: cloud2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7110582839246585995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6782446334086200893} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.63, y: 0, z: 0.41} + m_LocalScale: {x: 0.801053, y: 0.801053, z: 0.801053} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &7570130396318949430 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6782446334086200893} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 7c028bc155e1b5b41b77afe8bb94c94a, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/cloud2.prefab.meta b/unity/Assets/Scenes/res/prefab/cloud2.prefab.meta new file mode 100644 index 0000000..5afdd7a --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/cloud2.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: WnpM4yikVHORl3yxClXx3/fRdx5CPL3H98xjV/tNLpOD9DroYJP0M4A= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/grass 0.prefab b/unity/Assets/Scenes/res/prefab/grass 0.prefab new file mode 100644 index 0000000..2aa655e --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/grass 0.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &7696693450942364149 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 2179621281765118607} + - component: {fileID: 2299446734983394694} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: grass 0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2179621281765118607 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7696693450942364149} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.046, y: 0, z: 0.521} + m_LocalScale: {x: 0.36089513, y: 0.36089513, z: 0.36089513} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &2299446734983394694 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7696693450942364149} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: bba6a8e6c2a4a54489f9943c76d92bc2, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/grass 0.prefab.meta b/unity/Assets/Scenes/res/prefab/grass 0.prefab.meta new file mode 100644 index 0000000..07a21e8 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/grass 0.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: Bi9Msij5UnlsrKHtyYxOFqM1M4x4x9pa942FO/dMti26rryEkqBFrug= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/grass 1.prefab b/unity/Assets/Scenes/res/prefab/grass 1.prefab new file mode 100644 index 0000000..667ccc6 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/grass 1.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &1510783889440113631 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 8589356904109289091} + - component: {fileID: 2426505977044019525} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: grass 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8589356904109289091 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510783889440113631} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.643, y: 0, z: -0.009} + m_LocalScale: {x: 0.36089513, y: 0.36089513, z: 0.36089513} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &2426505977044019525 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510783889440113631} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 12133eed98f4df042933673b1b98b8f7, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/grass 1.prefab.meta b/unity/Assets/Scenes/res/prefab/grass 1.prefab.meta new file mode 100644 index 0000000..ebc8ede --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/grass 1.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: DX0esSz8Wn92G57zKkzOcvmWPiOWqT3uouNAxBGEdg3r0dEhc/PYJBA= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/grass2.prefab b/unity/Assets/Scenes/res/prefab/grass2.prefab new file mode 100644 index 0000000..135ddc4 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/grass2.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &6924508940185839325 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 435539791518907074} + - component: {fileID: 6437640950120722543} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: grass2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &435539791518907074 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6924508940185839325} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.974, y: 0, z: -1.832} + m_LocalScale: {x: 0.36089513, y: 0.36089513, z: 0.36089513} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &6437640950120722543 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6924508940185839325} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: cf99a9d4aa5abf743a6768b519fabf93, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/grass2.prefab.meta b/unity/Assets/Scenes/res/prefab/grass2.prefab.meta new file mode 100644 index 0000000..f67a8e9 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/grass2.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: Cn8WtiupB3kYduuzywH91q2Xp05rvyZew69R33ooKE8/X7EprQORHkk= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/grass3.prefab b/unity/Assets/Scenes/res/prefab/grass3.prefab new file mode 100644 index 0000000..79c570c --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/grass3.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &3884524150454896205 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 8378786473050541634} + - component: {fileID: 9137289115742074288} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: grass3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8378786473050541634 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3884524150454896205} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.802, y: 0, z: -1.709} + m_LocalScale: {x: 0.36089513, y: 0.36089513, z: 0.36089513} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &9137289115742074288 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3884524150454896205} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: d2289c47948a3cc40bd1d82676391b50, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/grass3.prefab.meta b/unity/Assets/Scenes/res/prefab/grass3.prefab.meta new file mode 100644 index 0000000..bc51593 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/grass3.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: XXlOtCiuBnjUdt2Kq9ZG4cNopaJFFndOZoqsAG2cTHjvaoYzVK3sRf4= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/groot1.prefab b/unity/Assets/Scenes/res/prefab/groot1.prefab new file mode 100644 index 0000000..833d705 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/groot1.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &5235044032515574243 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 4188864920815214323} + - component: {fileID: 5581557466916058413} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: groot1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4188864920815214323 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5235044032515574243} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -3.1, y: 0, z: 1.23} + m_LocalScale: {x: 0.36089513, y: 0.36089513, z: 0.36089513} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &5581557466916058413 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5235044032515574243} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 43377e9070bef8a4bb51f528b32fb376, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/groot1.prefab.meta b/unity/Assets/Scenes/res/prefab/groot1.prefab.meta new file mode 100644 index 0000000..12d7e10 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/groot1.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: WXIYsSOtUXjXAaHFQ7ef/JHXV6tY3bPTuivlhSOoSz1FW2WcND64A30= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/mountain1.prefab b/unity/Assets/Scenes/res/prefab/mountain1.prefab new file mode 100644 index 0000000..2f98561 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/mountain1.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &8380685078329305787 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 7809526185620434870} + - component: {fileID: 7721999489890687923} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: mountain1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7809526185620434870 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8380685078329305787} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.84, y: -0.95, z: 8.9} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &7721999489890687923 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8380685078329305787} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 5f3da9f816344bb41a1366586c516f97, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/mountain1.prefab.meta b/unity/Assets/Scenes/res/prefab/mountain1.prefab.meta new file mode 100644 index 0000000..0cbdaf5 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/mountain1.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: W31JsCysVihFgFK5jyXWRE/xZLJa4gCpAgdH6z7Go00MluiAQrZFbkI= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/stone1.prefab b/unity/Assets/Scenes/res/prefab/stone1.prefab new file mode 100644 index 0000000..8e9caaa --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/stone1.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &3476531265109908029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 8166008526582623248} + - component: {fileID: 1965066501711944565} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: stone1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8166008526582623248 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3476531265109908029} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.08, y: 0, z: 1.1} + m_LocalScale: {x: 0.57574, y: 0.57574, z: 0.57574} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &1965066501711944565 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3476531265109908029} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: a2f5182c11de6794b961bc286acd72ea, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/stone1.prefab.meta b/unity/Assets/Scenes/res/prefab/stone1.prefab.meta new file mode 100644 index 0000000..5ce2c25 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/stone1.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: CHlOt3ukWi1i6kJsvgqH5VVjwcSKCJ7+MvoEkM80VGyPui6NZj2OocQ= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/stone2.prefab b/unity/Assets/Scenes/res/prefab/stone2.prefab new file mode 100644 index 0000000..7cb8141 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/stone2.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &1351762661552244276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 2950027222865506266} + - component: {fileID: 1839005253012669546} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: stone2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2950027222865506266 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1351762661552244276} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.98, y: 0, z: 0.67} + m_LocalScale: {x: 0.66412, y: 0.66412, z: 0.66412} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &1839005253012669546 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1351762661552244276} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 1c03c20b38891724eba7b9a59b31ad8c, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/stone2.prefab.meta b/unity/Assets/Scenes/res/prefab/stone2.prefab.meta new file mode 100644 index 0000000..8abb0b4 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/stone2.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: WikevXj5Vn9xvQufSaZH5Z80mYUa9Cod7NVPuCd/TrDP0IKRZcaspsY= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/stone3.prefab b/unity/Assets/Scenes/res/prefab/stone3.prefab new file mode 100644 index 0000000..3ea17e3 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/stone3.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &4554480444341205620 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 5814446477050245766} + - component: {fileID: 2822249517256151664} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: stone3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5814446477050245766 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4554480444341205620} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.08, y: 0, z: 3.68} + m_LocalScale: {x: 0.39253953, y: 0.39253953, z: 0.39253953} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &2822249517256151664 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4554480444341205620} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: a2f5182c11de6794b961bc286acd72ea, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/stone3.prefab.meta b/unity/Assets/Scenes/res/prefab/stone3.prefab.meta new file mode 100644 index 0000000..e6ea503 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/stone3.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: WXxNtH6rWy6/ov/uwUznhAFa8hntVi0B0G/lsk+Vo9oNpzLPCtLNF5I= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/tree1.prefab b/unity/Assets/Scenes/res/prefab/tree1.prefab new file mode 100644 index 0000000..300acfb --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree1.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &9005524927436853576 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 9074184311345145535} + - component: {fileID: 8365800432407204401} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: tree1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9074184311345145535 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9005524927436853576} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.66, y: -0.86, z: 2.95} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &8365800432407204401 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9005524927436853576} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 9e86f261a1e9198449b0ab7510a5eb98, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/tree1.prefab.meta b/unity/Assets/Scenes/res/prefab/tree1.prefab.meta new file mode 100644 index 0000000..7a7bd73 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree1.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: DXwb5i3+Bi/v9kopbapp7g55EdSJXiTL5vNT+w8rBwVb/fKTAht/y1g= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/tree2.prefab b/unity/Assets/Scenes/res/prefab/tree2.prefab new file mode 100644 index 0000000..a5c9458 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree2.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &4559668664270299361 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 227561119319166384} + - component: {fileID: 7487127873520759700} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: tree2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &227561119319166384 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4559668664270299361} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.93, y: 0, z: 4.97} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &7487127873520759700 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4559668664270299361} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 0f2c9d2b1f1f3c04791839fee7a95be6, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/tree2.prefab.meta b/unity/Assets/Scenes/res/prefab/tree2.prefab.meta new file mode 100644 index 0000000..9711857 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree2.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: Dn0YvCupB3MS7FhUUSq2K/TYQAAjUW5xKHvqeV8wuYDeMX0GWEV+nZw= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/tree3.prefab b/unity/Assets/Scenes/res/prefab/tree3.prefab new file mode 100644 index 0000000..f73277f --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree3.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &3595608659461799050 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 3692847375105459094} + - component: {fileID: 4817636465103828906} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: tree3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3692847375105459094 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3595608659461799050} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7.21, y: 0, z: -2.8} + m_LocalScale: {x: 1.0488987, y: 1.0488987, z: 1.0488987} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &4817636465103828906 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3595608659461799050} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 86763528f1ce12e4d8fffe200c928982, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/tree3.prefab.meta b/unity/Assets/Scenes/res/prefab/tree3.prefab.meta new file mode 100644 index 0000000..7643791 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree3.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: WXtOt377BSmGl6EfFqJZGIX7ZfLEELU2wPAKDsY2W8ZEdwriWWMrbSk= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/tree4.prefab b/unity/Assets/Scenes/res/prefab/tree4.prefab new file mode 100644 index 0000000..15c0532 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree4.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &3199746496630800269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 7680868130656722617} + - component: {fileID: 4350344337643160049} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: tree4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7680868130656722617 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3199746496630800269} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -3.26, y: -0.72, z: 3.7} + m_LocalScale: {x: 1.3033524, y: 1.3033524, z: 1.3033524} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &4350344337643160049 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3199746496630800269} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 233c1d1ca8a53fb4695d9142fd8b1b64, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/tree4.prefab.meta b/unity/Assets/Scenes/res/prefab/tree4.prefab.meta new file mode 100644 index 0000000..774f7ba --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree4.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: XH1NvCqpU3+Os7ABtsScSxsy0BfiXHNqjP3w6Mr6NtMEc3QEopEPex0= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/tree5.prefab b/unity/Assets/Scenes/res/prefab/tree5.prefab new file mode 100644 index 0000000..d0cbfd5 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree5.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &844430968537636174 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 190315813515404266} + - component: {fileID: 1216488727028827506} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: tree5 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &190315813515404266 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 844430968537636174} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -8.08, y: -1.02, z: -1.73} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &1216488727028827506 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 844430968537636174} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 9bf1f9d2c7fd7cd44895557e0279a45e, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/tree5.prefab.meta b/unity/Assets/Scenes/res/prefab/tree5.prefab.meta new file mode 100644 index 0000000..a1ce4b6 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree5.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: CnkavHj7Uy4MFPttv1ZmFbSmfLfzBBP8masu3pnZVBDRheLnRwZRIpw= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/Scenes/res/prefab/tree6.prefab b/unity/Assets/Scenes/res/prefab/tree6.prefab new file mode 100644 index 0000000..6fc262e --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree6.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!1 &5660061587620676623 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 111467382636961109} + - component: {fileID: 6348065243048491524} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: tree6 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &111467382636961109 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5660061587620676623} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.52, y: -1.02, z: -1.97} + m_LocalScale: {x: 0.75251, y: 0.75251, z: 0.75251} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &6348065243048491524 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5660061587620676623} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_virtualGeometry: 0 + m_virtualGeometryShadow: 0 + m_ShadingRate: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: be3236dea9f1e304da1a5e3a513dad5e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 9bf1f9d2c7fd7cd44895557e0279a45e, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.08, y: 8.65} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/unity/Assets/Scenes/res/prefab/tree6.prefab.meta b/unity/Assets/Scenes/res/prefab/tree6.prefab.meta new file mode 100644 index 0000000..c571dc4 --- /dev/null +++ b/unity/Assets/Scenes/res/prefab/tree6.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: DHxKtS/7UC+9NjkwabK51GtR+MGMZ7lfdxrwm0wsvwBmtZhKpH8NAsY= +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/camera/YSorter.cs b/unity/Assets/camera/YSorter.cs index 4485ccd..bcfd00a 100644 --- a/unity/Assets/camera/YSorter.cs +++ b/unity/Assets/camera/YSorter.cs @@ -1,29 +1,27 @@ using UnityEngine; /// -/// Y-Sort 排序器 —— 根据物体的Y坐标(世界空间)动态调整Sprite的sortingOrder。 +/// Y-Sort 排序器 —— 根据物体的Z坐标(世界空间)动态调整Sprite的sortingOrder。 /// /// 原理: -/// 在2.5D等距视角游戏中,Y坐标代表"前后"关系(Y越小=越远=越靠后)。 -/// 本脚本每帧根据物体的Y坐标计算sortingOrder,Y值越小排序值越小, -/// 这样后面的物体会被前面的物体遮挡,实现正确的前后遮挡关系。 +/// 在2.5D等距视角游戏中,摄像机从斜上方45°俯视,Z坐标代表"前后"关系。 +/// Z值越大(离相机越远=越靠前),sortingOrder越大,会遮挡Z值小的物体。 /// /// 用法: -/// 1. 挂到所有需要参与Y-Sort的Sprite物体上(玩家、敌人、树木、石头等) -/// 2. 设置 baseSortingOrder 区分不同类型的物体(如地面=0,角色=1000,UI=2000) +/// 1. 挂到所有需要参与排序的Sprite物体上(玩家、敌人、树木、石头等) +/// 2. 设置 baseSortingOrder 区分不同类型的物体(如地面=0,角色=1000) /// 3. 确保所有参与排序的Sprite在同一个Sorting Layer上 /// /// 注意: -/// - 本脚本假设摄像机从斜上方俯视(Y轴代表前后) +/// - 本脚本假设摄像机从斜上方俯视(Z轴代表前后) /// - 所有参与排序的物体必须在同一个Sorting Layer -/// - 建议给不同类型的物体设置不同的baseSortingOrder以避免冲突 /// public class YSorter : MonoBehaviour { [Tooltip("基础排序值,用于区分不同类型的物体(如地面=0,角色=1000)")] [SerializeField] private int baseSortingOrder = 0; - [Tooltip("Y坐标到sortingOrder的缩放系数(值越大,前后物体排序差异越明显)")] + [Tooltip("Z坐标到sortingOrder的缩放系数(值越大,前后物体排序差异越明显)")] [SerializeField] private float scaleFactor = 100f; [Tooltip("是否每帧更新(关闭则只在移动时更新,性能更好)")] @@ -56,9 +54,9 @@ public class YSorter : MonoBehaviour private void UpdateSortingOrder() { - // Y值越小(越远),sortingOrder越小 - // 使用负号是因为Unity中Y轴向上为正,但我们需要Y越小=越靠后 - int sortingOrder = baseSortingOrder - Mathf.RoundToInt(transform.position.y * scaleFactor); + // 直接使用Z坐标作为排序依据 + // Z值越大(离相机越远),sortingOrder越大 + int sortingOrder = baseSortingOrder + Mathf.RoundToInt(transform.position.z * scaleFactor); if (_spriteRenderer.sortingOrder != sortingOrder) {