Unity 剧情类游戏基础脚本

本文主要用于给新人提供实现剧情类游戏的基本思路。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

然后是一个很重要的

[System.Serializable]

它的作用是使得在检查器窗口来看到我i们自己创建的类从而实现在检查器直接进行故事剧情的书写(当然如果你写个脚本通过excle 表进行写也行)

然后写一个剧情数据类

    public class StoryData
    {
        public string story;//故事文本
        public string[] choicestory;//选择的故事文本;
        public int[] nextindices;// 下一段剧情的索引数据;
    }

然后是 故事控制类

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StoryController : MonoBehaviour
{
    public void OnChoiceMade(int index)
    {
        switch (index) // 根据索引判断玩家做出了什么选择
        {
            case 1: // 如果玩家选择了第一个选项
                Debug.Log("You chose to 1"); // 输出日志信息
                break;
            case 2: // 如果玩家选择了第二个选项
                Debug.Log("You chose to 2"); // 输出日志信息
                break;
            case 3: // 如果玩家选择了第三个选项
                Debug.Log("You chose to 3"); // 输出日志信息
                break;
            case 4: // 如果玩家选择了第四个选项
                Debug.Log("You chose to 4."); // 输出日志信息
                break;
            default:
                break;
        }
    }
}

他的作用是报错了方便查找同时 还可以写其他功能实现扩展。

 接下来是剧情展示类

讲一下思路

 

public class StoryDisplay : MonoBehaviour
{
    public StoryData[] storyDatas; // 剧情数据数组
    public Text storyText; // 显示故事文本的UI组件
    public Button[] choiceButtons; // 显示选择按钮的UI组件数组

    private int currentIndex = 0; // 当前剧情索引

    private StoryController storyController; // 剧情控制器

    void Start()
    {
        storyController = FindObjectOfType<StoryController>(); // 查找场景中唯一存在的StoryController组件
        Refresh(); // 刷新界面
    
    }

    void Refresh()
    {
        if (currentIndex >= 0 && currentIndex < storyDatas.Length) // 如果当前索引有效
        {
            StoryData data = storyDatas[currentIndex]; // 获取当前段落对应的数据对象

            storyText.text = data.storyText; // 显示故事文本

            for (int i = 0; i < choiceButtons.Length; i++) // 遍历所有按钮
            {
                Button button = choiceButtons[i];
                if (i < data.choiceTexts.Length) // 如果有对应的选择文本
                {
                    button.gameObject.SetActive(true); // 激活按钮

                    button.GetComponentInChildren<Text>().text = data.choiceTexts[i]; // 显示选择文本在按钮上

                    int nextIndex = data.nextIndices[i];

                    button.onClick.RemoveAllListeners();

                    button.onClick.AddListener(() => OnClickChoiceButton(nextIndex));
                }
                else
                {
                    button.gameObject.SetActive(false);
                }
            }
        }
        else
        {
            storyText.text = "The End.";
        }
    }

    void OnClickChoiceButton(int nextIndex)
    {
        currentIndex = nextIndex; // 更新当前索引
        storyController.OnChoiceMade(currentIndex); // 通知剧情控制器玩家做出了选择
        Refresh(); // 刷新界面
    }
}

为什么发文助手总说让我提供代码 我这不都已经发了一堆了么。。。。。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小户爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值