任务系统
在场景中添加老爷爷npc
将事先准备好的老爷爷素材拖入场景并调整到合适大小和位置
给老爷爷加个Box Collider,并调整到合适大小
设计任务对话框的背景
在UI Root里创建一个Sprite并改名为Qust
在Qust中点击sprite,并在事先准备好的图集中选择任务系统的背景图片
给任务对话框加入进场动画Tween Position
设计任务的内容
创建一个lable,改名为Des,里面用来加入任务描述
给Des中加入文本,并修改到合适的大小及位置
创建一个lable,改名为accept然后点击Sprite将按钮的图片添加 进去,然后鼠标右键添加一个Box collider
把点击的图片信息添加上去,然后按照同样的方法创建另一个按钮
修改PlayerDir中的代码防止点击任务对话框的时候任务还能移动
处理任务对话框的显示和隐藏
给npc老爷爷加入代码BarNPC,源码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BarNPC : MonoBehaviour {
public TweenPosition questTween;
void OnMouseOver()//当鼠标位于这个collider之上的时候,会在每一帧调用这个方法
{
if (Input.GetMouseButtonDown(0))//当点击了老爷爷
{
ShowQuest();
}
}
void ShowQuest()
{
questTween.gameObject.SetActive(true);
questTween.PlayForward();
}
void HideQuest()
{
questTween.PlayReverse();
}
public void OnCloseButtonClick()
{
HideQuest();
}
}
在UI界面创建一个关闭按钮,将npc老爷爷拖入Notify中,并选择创建的方法OnCloseButtonClick
处理任务的接收和任务进度
修改BarNPC代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BarNPC : MonoBehaviour {
public TweenPosition questTween;
public UILabel desLabel;
public GameObject acceptBtnGo;
public GameObject okBtnGo;
public GameObject cancelBtnGo;
public bool isInTask = false;//表示是否在任务中
public int KillCount = 0;//表示任务进度,已经杀死几只狼
private PlayerSatus satus;
void Start()
{
satus = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerSatus>();
}
void OnMouseOver()//当鼠标位于这个collider之上的时候,会在每一帧调用这个方法
{
if (Input.GetMouseButtonDown(0))//当点击了老爷爷
{
if(isInTask){
ShowTaskProgress();
}
else
{
ShowTaskDes();
}
ShowQuest();
}
}
void ShowQuest()
{
questTween.gameObject.SetActive(true);
questTween.PlayForward();
}
void HideQuest()
{
questTween.PlayReverse();
}
void ShowTaskDes()
{
desLabel.text = "任务:\n杀死了10只狼\n\n奖励:\n1000金币";
okBtnGo.SetActive(false);
acceptBtnGo.SetActive(true);
cancelBtnGo.SetActive(true);
}
void ShowTaskProgress()
{
desLabel.text = "任务:\n你已经杀死了" + KillCount + "\\10只狼\n\n奖励:\n1000金币";
okBtnGo.SetActive(true);
acceptBtnGo.SetActive(false);
cancelBtnGo.SetActive(false);
}
//定义三个事件处理任务对话框上的按钮点击事件
public void OnCloseButtonClick()
{
HideQuest();
}
public void OnAcceptButtonClick()
{
ShowTaskProgress();
isInTask = true;//表示在任务中
}
public void OnOkButtonClick()
{
if (KillCount>=10)//完成任务
{
satus.GetCoint(1000);
KillCount = 0;
ShowTaskDes();
}
else//没完成任务
{
HideQuest();
}
}
public void OnCancelButtonClick()
{
HideQuest();
}
}
将按钮依次拖入npc的代码中
在每个按钮分别选择对应的