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

这篇教程详细介绍了在Unity 3D游戏中创建高级对话和任务系统的步骤。内容涵盖更新主对话窗口、创建选项UI、任务数据创建、接受任务和任务UI面板的建立。教程强调了对话的逻辑控制、选项生成、任务目标显示以及UI的适配和优化,旨在帮助开发者实现更加互动和丰富的游戏体验。
摘要由CSDN通过智能技术生成

目录

声明

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);//结束对话
        }
    }

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

 

DialogueUI: 

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

public class DialogUI : Singleton<DialogUI>
{
    [Header("Basic Elements")]//基本设置
    public Image icon;//图片

    public Text mainText;//文字

    public Button nextButton;//下一步按钮

    public GameObject dialoguePanel;//面板信息

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

    public void UpdateDialogData(DialogueData_SO data)//打开UI面版
    {
        currentData = data;//当前对话信息
        currentIndex = 0;//当前播放第0条信息
    }

    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);//结束对话
   
网传资源,如有侵权请联系/留言,资源过大上传乃是下载链接的ZIP文件。 目录: 1.1设计原则 d0 Q1 ?: \. V; J) v$ s 2.2单例(1)1 Z9 V$ \+ H7 T' u$ } 3.2单例(2) 4.2单例(3) 5.2单例(4) 6.3观察者模式和代理模式(1). z8 d6 d. Z% S 7.3观察者模式和代理模式(2); C. B/ {" F1 W/ C 8.3观察者模式和代理模式(3)$ Z( }% \4 M( L$ D- Y$ X3 M 9.4 中介者建造者模式(1)7 M+ {$ r, }: j3 y8 K- e8 W) _/ W9 O) z 10.4 中介者建造者模式(2)" T+ r( s4 V6 c5 u- K, p 11.4 中介者建造者模式(3) 12.4 中介者建造者模式(4)( j% Y# r8 @/ a4 q% [ 13.5门面,组合模式(1)" `9 c; V, \9 c3 O 14.5门面,组合模式(2) 15.5门面,组合模式(3)5 o6 J: f4 p/ Z9 v8 @7 c 16.1http www 封装(1) 17.1http www 封装(2) 18.1http www 封装(3)/ X, m# ^$ N$ ?5 l6 b 19.1http www 封装(4)" ~9 M3 I: S/ | 20.1http www 封装(5)" N& V; e5 s; B+ D; g$ j1 M 21.1http www 封装(6) 22.1http www 封装(7) 23.2音效模块封装(1)( P3 K6 n# @% q2 g 24.2音效模块封装(2)/ q3 C8 t4 `9 c0 x2 i! K) g! s 25.2音效模块封装(3); V0 M# o( L# q0 h/ t" K- K 26.2音效模块封装(4)/ K/ e. E, d, n9 B 27.2音效模块封装(5) 28.2音效模块封装(6)3 _. j2 V. M N3 c 29.2音效模块封装(7)) ~0 H! h% l. t! `- F 30.3UI 模块封装(1); \1 _3 ~9 N$ |% @* s 31.3UI 模块封装(2)" q; A/ `6 c1 Z3 v; U% P 32.3UI 模块封装(3)' j" P7 P! i' I4 B" G: g; | 33.3UI 模块封装(4) 34.3UI 模块封装(5) 35.3UI 模块封装(6)4 I q4 N* [+ }1 ` 36.3UI 模块封装(7) 37.4背包类UI封装(1)5 V; R' F2 Z2 N6 Z2 l 38.4背包类UI封装(2) 39.4背包类UI封装(3) 40.4背包类UI封装(4) 41.4背包类UI封装(5) 42.4背包类UI封装(5)# G9 ~) O, A) c# I2 R 43.5UI实例1- `8 J/ R) j) S) U 44.5UI实例2 45.5UI实例3( c; L5 @; c" a* r$ i' _' _ 46.6Easytouch 封装(1)4 ^7 z Z' p0 |5 E5 ^ 47.6Easytouch 封装(2)- U6 k7 a7 Z4 y# I) { 48.6Easytouch 封装(3) 49.6Easytouch 封装(4) 50.6Easytouch 封装(5)' w& ]1 F' O1 p6 w I 51.6Easytouch 封装(6)( B! K9 q3 }9 T0 c0 Z7 J7 f 52.7小地图 封装(1). k ^* ]1 W+ q 53.7小地图 封装(2) 54.8阴阳师画符实现(1). V5 y$ T- s3 l' V" r5 c+ S" e6 a 55.8阴阳师画符实现(2)4 [3 d& B3 ^. }+ S! J 56.8阴阳师画符实现(3)- S2 u) X" ~/ L% g 57.8阴阳师画符实现(4)$ B: G; A/ T2 L" [ 58.8阴阳师画符实现(5)+ I3 I7 U# I3 f% h4 y/ [: X8 N% I 59.8阴阳师画符实现(6) 60.9魔兽争霸3小地图实现(1) 61.9魔兽争霸3小地图实现(2)1 z! b. F. v4 e 62.9魔兽争霸3小地图实现(3)0 E3 r7 M# k1 U. X' ~1 [: [$ m 63.10有限状态机实现(1) 64.10有限状态机实现(2)' B1 Z& r. r# n 65.10有限状态机实现(3) 66.10有限状态机实现(4)& g+ n/ v6 s, l$ R; j 67.10有限状态机实现(5) 68.10有限状态机实现(6)& E" `$ K! |( a9 c 69.10有限状态机实现(7)+ Y2 p* a2 h& y4 h- Q& v& k( s 70.1矩形攻击(1) 71.1矩形攻击(2) 72.1矩形攻击(3)# n9 h& W1 I9 G, ~. a 73.2伞形 攻击 74.3实战框架搭建(1)# _, b) S8 |$ T& R+ z# u- j 75.3实战框架搭建(2) 76.3实战框架搭建(3) 77.4相机封装及easytouch(1) 78.4相机封装及easytouch(2) 79.4相机封装及easytouch(3)4 i! [: O' p7 K; ` 80.5玩家控制fsm(1)) @1 u2 u1 s* Y- v; g4 D8 k9 r' i$ W 81.5玩家控制fsm(2) 82.5玩家控制fsm(3)% A4 V6 A! j5 H, W2 b. x 83.5玩家控制fsm(4) 84.6玩家控制逻辑梳理 85.7Npc封装(1) 86.7Npc封装(2)7 f6 _6 Y6 y3 H/ H9 @ 87.7Npc封装(3) 88.7Npc封装(4)/ g# z) M: d% W( D. A4 B4 s+ ~ 89.8Npc与ui交互(1) 90.8Npc与ui交互(2) 91.8Npc与ui交互(3). Q% d7 o" k4 N& s6 s; P7 D1 A 92.8Npc与ui交互(4) 93.9Npc模块封装(1); I( S) ? J7 M4 G4 X 94.9Npc模块封装(2)4 n+ Z3 s6 ~* W5 b! o; F- k0 U 95.9Npc模块封装(3)
网传资源,如有侵权请联系/留言,资源过大上传乃是下载链接的ZIP文件。 目录: 1.Animal1 2.Animal2& ]9 p, D+ }, l6 e" U4 [+ F! R+ \4 I 3.Animal3 4.Animal4 5.Twist1+ T4 z* ?, N/ s$ ^* p* R 6.Twist2 7.Twist37 `* }8 p$ `6 y1 ^ 8.Twist4* o3 O) i) b6 X4 w5 U( l: M9 x 9.AssetBundle 原理1 10.AssetBundle 原理2 11.AssetBundle 原理3) _3 K- H5 u8 y# K. } 12.AssetBundle 原理4 13.AssetBundle初识1 14.AssetBundle初识2 15.AssetBundle初识3- c. d4 {3 z- Z3 y. P1 Y# M 16.byte操作1! p1 X1 p$ A& P o% J8 j- F! E" E 17.byte操作2$ {, e5 X* |2 y3 f: R 18.byte操作3 19.C#基础1. Z6 R8 o; w. I1 p$ i 20.C#基础2 21.C#基础3) B: I6 B! g/ A4 I$ {" X 22.C#基础41 V& X! B$ K' m# ^3 k# Z 23.oop1 24.oop2/ x! i8 b* a+ `* |# \7 e1 v 25.oop33 s) }. f3 d" d4 A5 h9 ]9 }: T8 { 26.oop4 27.方法调用1! Y' N, n, \+ y+ ~1 D, b7 {9 C 28.方法调用2 29.方法调用3 30.方法调用4 31.WWW1 32.WWW21 o! W# Q/ r& y7 z& K 33.WWW3, z4 u/ m B& s2 D0 j8 d4 Y 34.WWW4; Y" S6 M7 {6 q! a' e 35.贪吃蛇1# _6 O" {. y/ | 36.贪吃蛇2 37.贪吃蛇3 38.Buider1- @' a5 p7 H' y6 `/ K) R 39.Buider2' `. w5 j8 g8 q) W 40.Buider3 41.Buider4 42.CameraView1 43.CameraView2 44.CameraView3; b# }8 D) I4 J( O 45.Combine1 46.Combine25 L) `& E3 C# u2 ` 47.Combine3 48.设计模式01 49.设计模式02. }3 ~# Y' W A* L { 50.设计模式03 51.设计模式04 52.设计原则1 53.设计原则2 54.设计原则3 55.Frame01 56.Frame02 57.Frame03 58.Frame04 59.Frame056 m. o( _0 U9 T0 f8 t 60.Frame06 61.Frame07- u, ?- z" E7 l! q 62.Frame081 `# W$ g% p7 d* x. D 63.Frame099 ]/ l# D& S' _! l6 R( K4 h% V 64.LuaFrame010 p2 j* t+ c: C+ E' V 65.LuaFrame02* Y2 @# ?+ ]1 U' y @8 I: ^ 66.LuaFrame032 L: ]* ^, X4 o1 b1 P9 o" V 67.LuaFrame04 68.LuaFrame051 ?$ x3 B* \9 }+ B4 m, {9 U 69.LuaFrame06 70.LuaFrame07 71.Fsm1 72.Fsm2 73.Fsm30 e; n' F* t, z L4 U) K 74.Fsm4 75.lua01 76.lua02; h$ V% |, x2 S3 Z7 r 77.lua03 78.lua04 79.lua053 s/ q! c4 V1 a 80.lua06 81.lua07" q- j" }2 O( h- {/ b 82.tolua 使用1 83.tolua 使用25 ?7 L3 r/ X* p4 s' b* B 84.tolua1 85.tolua2 86.tolua3 87.UIEasyTouch1 88.UIEasyTouch2" a+ ~- \( u; f 89.UIEasyTouch3 m9 d( x1 d$ j3 }, j6 |; i 90.UIEasyTouch4% h) d% N! G! A% A% z; X 91.矩形攻击1 92.矩形攻击27 i6 z0 P, K3 I7 o3 d4 {: U 93.矩形攻击3 94.矩形攻击4! H7 w7 C" t1 U6 \) @ 95.矩形攻击5 96.TCP 沾包 拆包问题1/ t) X8 ?4 r% _! d1 a 97.TCP 沾包 拆包问题2 98.TCP 沾包 拆包问题39 A/ [; B/ H6 |1 _3 ]- K( K 99.TCP 沾包 拆包问题41 ~- }" G& k! a5 b 100.TCP 沾包 拆包问题5 101.tcp11 V) C2 ^" L3 i" P 102.tcp22 M. @1 }- P& h2 i4 H 103.tcp3 104.protobuffer1' o) E) N$ i" U/ m 105.protobuffer21 V" C9 y, F, ~3 n& H 106.protobuffer3 107.protobuffer4 108.UDP014 S8 r! X* {& o: i 109.UDP02 110.UDP032 b* _4 X% a; P. N" X. }' Y( }( B 111.UDP04 112.UDP05, g C8 F( M$ o$ D 113.UDP06& i. i- o( z8 h8 e' V3 }, J 114.UDP07 115.UDP086 ?4 S/ `! h# ]( s6 f$ N9 d 116.更新 M层 数据1 117.更新 M层 数据2 118.更新 M层 数据3: `- m) J7 D! X5 @. \) T 119.LitMap16 Q8 F' i, Q C2 M 120.LitMap21 ]3 u3 F6 z' X/ l* O5 u0 ~2 a 121.LitMap3) U) a& k; v8 x3 H8 ~9 z 122.LitMap47 d5 w1 |0 L) d1 u- c 123.Painter1* {7 f6 f% w0 d, V 124.Painter2 125.Painter3 126.Painter41 x0 {2 ?. F/ ~. s' @ 127.UIFrame01 128.UIFrame022 K- d6 D$ ^3 N3 f6 q r) d( e 129.UIFrame032 Y3 A, `! T q. ]5 |1 g' E z4 r1 R+ C 130.UIFrame04 131.UIFrame05 132.UIFrame062 R- |& e z; u 133.UIFrame07 134.UIFrame08 135.UIFrame096 k9 R4 `# o# S. w8 S 136.UIFrame10& |* r5 P, [5 C) q 137.Audio1 138.Audio2/ D- x4 J6 e0 B8 J0 P 139.Audio3' b5 c. |. B" _5 ? X/ H 140.www1 141.www2 142.www3
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

無限進步的全棧遊戲開發

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

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

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

打赏作者

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

抵扣说明:

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

余额充值