using Godot; public partial class StudentPortrait16Native : Node2D { /// /// 饰品精灵 /// private Sprite2D _accessory; /// /// 动画播放器 /// private AnimationPlayer _animationPlayer; /// /// 身体精灵 /// private Sprite2D _body; /// /// 眼睛精灵 /// private Sprite2D _eye; /// /// 发型精灵 /// private Sprite2D _hairstyle; // Called when the node enters the scene tree for the first time. public override void _Ready() { _animationPlayer = GetNodeOrNull("AnimationPlayer"); CacheSprites(); if (_animationPlayer != null) _animationPlayer.AnimationFinished += OnAnimationFinished; PlayAnimation("speak"); } /// /// 缓存精灵节点 /// private void CacheSprites() { // 缓存子节点引用,避免每帧查找 _body = GetNode("parts/body"); _hairstyle = GetNode("parts/hairstyle"); _eye = GetNode("parts/eye"); _accessory = GetNode("parts/accessory"); } /// /// 播放指定动画 /// /// 动画名称 private void PlayAnimation(string animationName) { if (_animationPlayer == null) return; if (_animationPlayer.CurrentAnimation != animationName) _animationPlayer.Play(animationName); } /// /// 动画结束回调 /// /// 动画名称 private void OnAnimationFinished(StringName animationName) { _animationPlayer?.Play(animationName); } // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(double delta) { } }