96 lines
3.2 KiB
C#
96 lines
3.2 KiB
C#
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>();
|
|
spriteRenderer.sprite = Resources.Load<Sprite>("DefaultImage"); // 加载默认图片
|
|
spriteRenderer.color = Color.white; // 设置默认颜色
|
|
}
|
|
|
|
// 创建动画节点
|
|
private void CreateAnimationNode(GameObject nodeObject)
|
|
{
|
|
// 添加 Animator 组件表示动画
|
|
var animator = nodeObject.AddComponent<Animator>();
|
|
animator.runtimeAnimatorController =
|
|
Resources.Load<RuntimeAnimatorController>("DefaultAnimation"); // 加载默认动画控制器
|
|
}
|
|
|
|
private void DeleteAllChildren()
|
|
{
|
|
// 获取当前对象的 Transform
|
|
var parentTransform = transform;
|
|
|
|
// 删除所有子对象
|
|
foreach (Transform child in parentTransform) Destroy(child.gameObject); // 使用 Destroy 方法删除子对象
|
|
}
|
|
}
|
|
} |