Unity中实现对话结束后自动跳转至其他游戏场景的方法
Unity 2D游戏开场对话结束自动跳转场景实现方案
核心触发点就在你现有DialogueManager的EndDialogue()方法——这个方法本身就是所有对话句子播放完毕后的回调入口,只要在这个位置接入场景加载逻辑,同时做可配置化处理,就能避免硬编码,适配不同对话的结束需求。
具体修改步骤
1. 引入场景管理依赖
所有涉及场景加载的脚本,都需要先引入场景管理命名空间,在DialogueManager顶部的引用区加一行:
using UnityEngine.SceneManagement;
2. 扩展Dialogue数据类,增加跳转配置字段
给对话数据类加可选的跳转配置,这样只有你标记了需要跳转的开场对话才会触发切场景,其他普通对话不受影响:
using System.Collections; using System.Collections.Generic; using UnityEngine; [System.Serializable] public class Dialogue { public string name; [TextArea(3, 10)] public string[] sentences; [Header("对话结束配置")] [Tooltip("对话播放完后要跳转的场景名,留空则不跳转")] public string targetSceneName; [Tooltip("对话结束后延迟多少秒跳转,填0则立即跳转")] public float loadDelay = 0f; }
3. 修改DialogueManager,接入跳转逻辑
修改对话管理器,在启动对话时缓存当前对话的跳转配置,对话结束时按配置执行加载:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; using UnityEngine.SceneManagement; public class DialogueManager : MonoBehaviour { public TextMeshProUGUI nameText; public TextMeshProUGUI dialogueText; private Queue<string> sentences; // 缓存当前对话的跳转配置 private string currentTargetScene; private float currentLoadDelay; void Start() { sentences = new Queue<string>(); } public void StartDialogue(Dialogue dialogue) { nameText.text = dialogue.name; // 缓存当前对话的跳转参数 currentTargetScene = dialogue.targetSceneName; currentLoadDelay = dialogue.loadDelay; sentences.Clear(); foreach (string sentence in dialogue.sentences) { sentences.Enqueue(sentence); } DisplayNextSentence(); } public void DisplayNextSentence() { if (sentences.Count == 0) { EndDialogue(); return; } string sentence = sentences.Dequeue(); dialogueText.text = sentence; } void EndDialogue() { Debug.Log("End of conversation."); // 配置了目标场景才执行跳转 if (!string.IsNullOrEmpty(currentTargetScene)) { // 用协程处理延迟加载 StartCoroutine(LoadTargetScene()); } } IEnumerator LoadTargetScene() { // 等待配置的延迟时间 yield return new WaitForSeconds(currentLoadDelay); // 加载目标场景 SceneManager.LoadScene(currentTargetScene); } }
DialogueTrigger脚本不需要做任何修改,保持原有逻辑即可。
配置注意事项
- 打开Unity编辑器的
File > Build Settings,把你的正式游戏开局场景拖到Scenes In Build列表里,否则场景加载会报错 - 选中开场对话对应的
Dialogue资产(就是你挂在DialogueTrigger上的那个对话配置),在Inspector里找到「对话结束配置」栏,填写正式开局场景的准确场景名(和你项目里场景文件的名字一致),需要延迟跳转就填延迟时间,不需要就保持0 - 如果你后续要加点击按键推进对话的逻辑,只要在输入检测的回调里调用
DisplayNextSentence()即可,不会影响结束时的跳转触发
内容的提问来源于stack exchange,提问作者Jaafar Ben Bouker
相关产品推荐
相关产品推荐

