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 方法删除子对象 } } }