目录
声明
本教程学习均来自U3D中文课堂麦扣老师
1. QuestGiver 控制任务对话显示
现在来实现NPC能根据我任务的情况给我不同的对话,比如说第一次对话的时候是开始任务,任务过程进行当中要返回进行当中的对应的对话,结束的时候要有结束任务的,完成这个任务拿到奖励之后我再去找他对话的时候又是另外一个对话,所以可以看到我们需要在这里面不断地切换我们的Dialog Data,那么我们会创建一个代码来实时的替换我当前NPC要说的那个对话的数据,那我们先创建一下这个代码:
我们去到我们的Quest当中,我们在我们的Logic里面创建代码QuestGiver:
挂载到NPC身上
可以看到现在我们的NPC身上有一个DialogController,所以我们的Giver也要拿到Controller的使用权,然后将QuestGiver里保存的数据实时更新到我的currentData,那么我每次跟它对话的时候就会显示不同的内容了,所以我的任务也需要做一些更改,比如说我的NewTalk,我要给它改个名字,Hero Start,也就是Hero第一次开始的时候对话的内容,然后我也会创建更多的Data去检测它任务进行中的对话和结束的对话,
先来写一下QuestGiver:
[RequireComponent(typeof(DialogueController))]
public class QuestGiver : MonoBehaviour
{
DialogueController controller;
QuestData_SO currentQuest;
public DialogueData_SO startDialogue;
public DialogueData_SO progressDialogue;
public DialogueData_SO completeDialogue;
public DialogueData_SO finishDialogue;
#region 获得任务进度
public bool IsStarted
{
get
{
if (QuestManager.Instance.HaveQuest(currentQuest))
{
return QuestManager.Instance.GetTask(currentQuest).isStarted;
}
else return false;
}
}
public bool IsComplete
{
get
{
if (QuestManager.Instance.HaveQuest(currentQuest))
{
return QuestManager.Instance.GetTask(currentQuest).isComplete;
}
else return false;
}
}
public bool IsFinished
{
get
{
if (QuestManager.Instance.HaveQuest(currentQuest))
{
return QuestManager.Instance.GetTask(currentQuest).isFinished;
}
else return false;
}
}
#endregion
private void Awake()
{
controller = GetComponent<DialogueController>();
}
private void Start()
{
controller.currentData = startDialogue;//开始对话数据
}
}<