You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:09:21