From a07c4a2bc15e8126318b62bc015bc0d835be914d Mon Sep 17 00:00:00 2001 From: m0_75251201 Date: Mon, 14 Jul 2025 11:42:02 +0800 Subject: [PATCH] =?UTF-8?q?(client)=20feat:=E5=AE=9E=E7=8E=B0=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E7=94=9F=E6=88=90=E6=B8=B2=E6=9F=93=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client/Assets/Scenes/Test.unity | 17 +++- Client/Assets/Scripts/Entity/Character.cs | 96 +++++++++++++++++++ .../Assets/Scripts/Entity/Character.cs.meta | 2 + Client/Assets/Scripts/Test/TestDefine.cs | 2 +- 4 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 Client/Assets/Scripts/Entity/Character.cs create mode 100644 Client/Assets/Scripts/Entity/Character.cs.meta diff --git a/Client/Assets/Scenes/Test.unity b/Client/Assets/Scenes/Test.unity index bcfa585..cdafdf0 100644 --- a/Client/Assets/Scenes/Test.unity +++ b/Client/Assets/Scenes/Test.unity @@ -479,6 +479,7 @@ Transform: serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalPosition: {x: 0, y: 0, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -660,8 +661,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1485465861} + - component: {fileID: 1485465862} m_Layer: 0 - m_Name: CatGirl + m_Name: Character m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -682,6 +684,18 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1485465862 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1485465860} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 757576bb4354ac54da09868e1be02eec, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -691,3 +705,4 @@ SceneRoots: - {fileID: 613797070} - {fileID: 912467178} - {fileID: 1485465861} + - {fileID: 1485465861} diff --git a/Client/Assets/Scripts/Entity/Character.cs b/Client/Assets/Scripts/Entity/Character.cs new file mode 100644 index 0000000..51dd66f --- /dev/null +++ b/Client/Assets/Scripts/Entity/Character.cs @@ -0,0 +1,96 @@ +using System; +using System.Linq; +using Data; +using UnityEngine; + +namespace Entity +{ + public class Character : MonoBehaviour + { + private void Start() + { + if (Managers.DefineManager.Instance.defines.TryGetValue("DrawingOrderDef",out var typeDict)) + { + GenerateDrawNode(typeDict.Values?.FirstOrDefault()as DrawingOrderDef); + } + } + + public void Init(CharacterDef def) + { + + if (def == null) + return; + GenerateDrawNode(def.GetDrawingOrder(Orientation.Down)); + } + + // 生成图片或动画节点 + private void GenerateDrawNode(DrawingOrderDef def) + { + // Debug.Log(def); + // 删除现有子节点 + DeleteAllChildren(); + + // 生成根节点下的所有节点 + foreach (var nodeDef in def.drawNodes) GenerateNode(nodeDef, transform); // 在当前节点下生成 + } + + // 递归生成节点 + private void GenerateNode(DrawNodeDef nodeDef, Transform parent) + { + // Debug.Log(nodeDef.nodeName); + // 创建新的 GameObject 表示节点 + var nodeObject = new GameObject(nodeDef.nodeName); + + // 设置父节点 + nodeObject.transform.SetParent(parent, false); + + // 根据节点类型生成不同的内容 + switch (nodeDef.drawNodeType) + { + case DrawNodeType.Image: + CreateImageNode(nodeObject); + break; + + case DrawNodeType.Animation: + CreateAnimationNode(nodeObject); + break; + + default: + Debug.LogWarning($"Unsupported node type: {nodeDef.drawNodeType}"); + break; + } + + // 递归生成子节点 + if (nodeDef.children != null && nodeDef.children.Count > 0) + foreach (var childNodeDef in nodeDef.children) + GenerateNode(childNodeDef, nodeObject.transform); // 在当前节点下生成子节点 + } + + // 创建图片节点 + private void CreateImageNode(GameObject nodeObject) + { + // 添加 SpriteRenderer 组件表示图片 + var spriteRenderer = nodeObject.AddComponent(); + spriteRenderer.sprite = Resources.Load("DefaultImage"); // 加载默认图片 + spriteRenderer.color = Color.white; // 设置默认颜色 + } + + // 创建动画节点 + private void CreateAnimationNode(GameObject nodeObject) + { + // 添加 Animator 组件表示动画 + var animator = nodeObject.AddComponent(); + animator.runtimeAnimatorController = + Resources.Load("DefaultAnimation"); // 加载默认动画控制器 + } + + private void DeleteAllChildren() + { + // 获取当前对象的 Transform + var parentTransform = transform; + + // 删除所有子对象 + foreach (Transform child in parentTransform) Destroy(child.gameObject); // 使用 Destroy 方法删除子对象 + } + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Entity/Character.cs.meta b/Client/Assets/Scripts/Entity/Character.cs.meta new file mode 100644 index 0000000..20578c1 --- /dev/null +++ b/Client/Assets/Scripts/Entity/Character.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 757576bb4354ac54da09868e1be02eec \ No newline at end of file diff --git a/Client/Assets/Scripts/Test/TestDefine.cs b/Client/Assets/Scripts/Test/TestDefine.cs index d3730f4..1f9b464 100644 --- a/Client/Assets/Scripts/Test/TestDefine.cs +++ b/Client/Assets/Scripts/Test/TestDefine.cs @@ -7,7 +7,7 @@ namespace Test public class TestDefine : MonoBehaviour { // Start is called once before the first execution of Update after the MonoBehaviour is created - void Start() + void Awake() { Managers.DefineManager.Instance.Init(); Debug.Log(Managers.DefineManager.Instance);