unity 3D RPG高级教程(十二)

目录

声明

1.Update Main Dialogue 显示主对话窗口的内容

 2.OptionUI 创建选项内容

2.1调整 UI 显示问题及多次点按 Next 按钮问题

2.2

3.Quest Data 创建任务数据

4.TakeQuest 接受任务

5.Quest UI 创建任务 UI 面板

声明

本教程学习均来自U3D中文课堂麦扣老师

1.Update Main Dialogue 显示主对话窗口的内容

我们会在NPC的身上挂一个代码来控制它所播放的对话的内容是什么,这个脚本可以控制对话的信息,创建一个脚本Dialog Controller,其中引用的变量就是Dialog Data,

DialogueController:要实现的方法就是当我们的人物接近我们的NPC的时候,NPC周围我们创建了一个范围比较大一点的Capsule Collider,勾选为Trigger,让近距离的时候可以触发

public class DialogueController : MonoBehaviour
{
    public DialogueData_SO currentData;//拿到对话信息

    bool canTalk = false;//监控是否可以对话

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player") && currentData != null)//Player在附近 并且 有对话内容
        {
            canTalk = true;//可以对话
        }
    }

    private void Update()
    {
        if(canTalk && Input.GetMouseButtonDown(1))
        {
            OpenDialog();//打开对话窗口
        }
    }

    void OpenDialog()//打开对话窗口
    {
        //打开UI面版
        //传输对话内容信息
    }
}

怎么来实现这个功能呢?接下来创建UI的控制器,在Dialog Canvas上挂载一个代码来控制所以的Dialogue UI,然后也拿到下面所有的子物体的控制权,比如说Update我们的图片和文本,

DialogUI:

    [Header("Basic Elements")]//基本设置
    public Image icon;//图片

    public Text mainText;//文字

    public Button nextButton;//下一步按钮

    public GameObject dialoguePanel;//面板信息

 DialogUI:

    [Header("Data")]//数据信息
    public DialogueData_SO currentData;//当前对话信息
    int currentIndex = 0;//当前播放哪一条信息

    public void UpdateDialogData(DialogueData_SO data)//更新对话信息
    {
        currentData = data;//当前对话信息
        currentIndex = 0;//当前播放第0条信息
    }

DialogueController:

    void OpenDialog()//打开对话窗口
    {
        //打开UI面版
        //传输对话内容信息
        DialogUI.Instance.UpdateDialogData(currentData);
    }

  DialogUI:

    public void UpdateMainDialog(DialoguePiece piece)//更新主要对话窗口
    {
        dialoguePanel.SetActive(true);

        if(piece.image != null)
        {
            icon.enabled = true;
            icon.sprite = piece.image;//显示图片
        }
        else
        {
            icon.enabled = false;//不显示图片
        }

        mainText.text = "";
        mainText.text = piece.text;//传输文本
    }
}

DialogueController:

    void OpenDialog()//打开对话窗口
    {
        //打开UI面版
        //传输对话内容信息
        DialogUI.Instance.UpdateDialogData(currentData);//打开UI面版
        DialogUI.Instance.UpdateMainDialog(currentData.dialoguePieces[0]);//更新主要对话窗口
    }

显示按钮:默认NextBUtton是不启动的,只有对话框当中有多条对话并且当前这条对话不包含Option的,没有Option并且对话大于0才启动按钮继续播放下一句话

  DialogUI:

    public void UpdateMainDialog(DialoguePiece piece)//更新主要对话窗口
    {
        dialoguePanel.SetActive(true);

        if(piece.image != null)
        {
            icon.enabled = true;
            icon.sprite = piece.image;//显示图片
        }
        else
        {
            icon.enabled = false;//不显示图片
        }

        mainText.text = "";
        mainText.text = piece.text;//传输文本

        if(piece.options.Count == 0 && currentData.dialoguePieces.Count>0)//没有任何选项 且 对话块大于0
        {
            nextButton.gameObject.SetActive(true);//显示Next按钮
            currentIndex++;//播放序号+1
        }
        else
        {
            nextButton.gameObject.SetActive(false);//不显示Next按钮
        }
    }

为按钮添加函数方法:

  DialogUI:

    protected override void Awake()
    {
        base.Awake();
        nextButton.onClick.AddListener(ContinueDialog);//点击Next按钮继续下一条对话
    }

    void ContinueDialog()//继续下一条对话
    {
        if(currentIndex < currentData.dialoguePieces.Count)//有下一条对话
        {
            UpdateMainDialog(currentData.dialoguePieces[currentIndex]);//更新主要对话窗口
        }
        else
        {
            dialoguePanel.SetActive(false);//结束对话
        }
    }

在这里面我希望文字可以用打字的效果出来:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值