using UnityEngine; using AibisDream.FixSystem; using Cinemachine; using AibisDream.Framework; using AibisDream.MiniGame.Language; using System.Collections.Generic; namespace AibisDream { /// /// 表达系统管理器(粒子表达系统) /// public class ExpressionManager : MonoBehaviour { [Header("系统组件")] [SerializeField] private GameObject expressionView; // 内部组件引用(自动查找) private LanguageParticleManager particleManager; [Header("默认配置")] [SerializeField] private List defaultAnxietyPhrases = new List { "我好怕", "怎么办", "不行", "好难", "做不到" }; [SerializeField] private string defaultTargetSentence = "这是一个测试示例"; void Start() { // 注册到系统字典 FixSystemCenter.SystemDic.Register(this); // 查找并初始化表达视图 if (expressionView == null) { expressionView = transform.Find("Expression View")?.gameObject; } if (expressionView != null) { expressionView.SetActive(false); } // 查找粒子管理器 if (particleManager == null) { particleManager = GetComponentInChildren(true); } // 注册相机 var virtualCam = transform.Find("Expression Camera")?.GetComponent(); if (virtualCam != null) { CameraKit.Instance.RegisterCamera(CameraEnum.Expression, virtualCam); } var virtualCam2 = transform.Find("Expression Deep Camera")?.GetComponent(); if (virtualCam2 != null) { CameraKit.Instance.RegisterCamera(CameraEnum.ExpressionDeep, virtualCam2); } } /// /// 打开表达视图(只显示美术背景,不启动粒子系统) /// public void OpenView() { if (expressionView != null) { expressionView.SetActive(true); } } /// /// 启动粒子系统(在打开视图后调用,通常通过 Yarn 对话控制) /// /// 焦虑短句列表(非目标字符会随机组成这些短句) /// 目标句子 /// 完成时触发的对话节点名称(可选) public void StartSystem(List anxietyPhrases, string targetSentence, string completionNodeName = null) { if (particleManager != null) { // 使用传入的配置,如果没有则使用默认配置 var phrases = anxietyPhrases ?? defaultAnxietyPhrases; var sentence = targetSentence ?? defaultTargetSentence; particleManager.InitializeSystem(phrases, sentence, completionNodeName); } } /// /// 启动粒子系统(字符串数组版本,方便 Yarn 调用) /// public void StartSystem(string[] anxietyPhrases, string targetSentence, string completionNodeName = null) { List phrasesList = anxietyPhrases != null ? new List(anxietyPhrases) : null; StartSystem(phrasesList, targetSentence, completionNodeName); } /// /// 关闭表达系统 /// public void CloseView() { if (expressionView != null) { expressionView.SetActive(false); } if (particleManager != null) { particleManager.StopSystem(); } } /// /// 重置系统(保持当前配置) /// public void ResetSystem(bool playEntranceEffect = true) { if (particleManager != null) { particleManager.ResetGame(playEntranceEffect); } } private void OnDestroy() { CameraKit.Instance?.UnRegisterCamera(CameraEnum.Expression); CameraKit.Instance?.UnRegisterCamera(CameraEnum.ExpressionDeep); } } }