using System; using System.Collections.Generic; using Cysharp.Threading.Tasks; using Sirenix.OdinInspector; using UnityEngine; using XNode; namespace Stary.Evo.StoryEditor { /// /// 剧本自然段 /// [Serializable, CreateNodeMenu("创建剧本自然段", order = 5)] public class ScriptParagraphNode : FlowNode { /// /// 名称 /// (仅供辨识,不起实际作用) /// [BoxGroup("Info", order:10, showLabel:false)] [LabelText("名称"),LabelWidth(30)] public string displayName; /// /// 字幕 /// [BoxGroup("Info")] [LabelText("字幕"),LabelWidth(30)] public Sprite caption; /// /// 语音 /// [BoxGroup("Info")] [LabelText("音频"),LabelWidth(30)] public AudioClip audio; /// /// 创建新的剧本段落节点 /// /// 所在的块 /// 节点名称 /// 节点位置 /// 节点前部连接 /// 节点后部连接 /// 字幕 /// 音频 public static ScriptParagraphNode Create(NodeGraph graph, string name = null, Vector2 position = default, List prePorts = null, List nextPorts = null, Sprite caption = null, AudioClip audio = null) { // 创建节点 var node = Create(graph,name,position, prePorts, nextPorts); if (node == null) return null; // 设置变量 node.caption = caption; node.audio = audio; return node; } protected override void Init() { base.Init(); UpdateName(); } private void OnValidate() { if (graph == null) { Debug.LogWarning($"项目中存在幽灵节点:{name}"); return; } UpdateName(); } /// /// 更新名称 /// private void UpdateName() { if (string.IsNullOrEmpty(displayName)) { displayName = graph.name + "_para"; } name = displayName; } public new async UniTask Export() { var node = new ScriptParagraphNodeData(await base.Export()); var sGraph = (ScriptGraph)graph; // 记录音频资源地址 if (audio) node.audioPath = await sGraph.Loader.Save(audio,sGraph.packageID); // 记录字幕资源地址 if (caption) node.captionPath = await sGraph.Loader.Save(caption,sGraph.packageID); return node; } } }