标签:unity task taskmanager
任务系统一直是游戏中非常重要的系统,它一直伴随在游戏左右,玩家通过完任务去赚取装备,去升级,所以说任务系统是非常重要的,值得我们好好去架构。在手机中的任务系统没有PC端那么复杂,在Unity中由于有委托以及事件等语法功能,实现起来相对简单。接下来我们就开始实现任务系统。
第一步:我们需要定义任务类,我们的设计思路是一个任务对象就是一个协程coroutine,任务能够开始,停止,暂停,如果试图开始一个被停止或者是被终止的任务它是错误的。
以下是代码构建:
public class Task
{
public bool Running {
get {
return task.Running;
}
}
public bool Paused {
get {
return task.Paused;
}
}
public delegate void FinishedHandler(bool manual);
public event FinishedHandler Finished;
public Task(IEnumerator c, bool autoStart = true)
{
task = TaskManager.CreateTask(c);
task.Finished += TaskFinished;
if(autoStart)
Start();
}
public void Start()
{
task.Start();
}
public void Stop()
{
task.Stop();
}
public void Pause()
{
task.Pause();
}
public void Unpause()
{
task.Unpause();
}
void TaskFinished(bool manual)
{
FinishedHandler handler = Finished;
if(handler != null)
handler(manual);
}
TaskManager.TaskState task;
}
第二步:我们需要一个管理类来创建任务。class TaskManager : MonoBehaviour
{
public class TaskState
{
public bool Running {
get {
return running;
}
}
public bool Paused {
get {
return paused;
}
}
public delegate void FinishedHandler(bool manual);
public event FinishedHandler Finished;
IEnumerator coroutine;
bool running;
bool paused;
bool stopped;
public TaskState(IEnumerator c)
{
coroutine = c;
}
public void Pause()
{
paused = true;
}
public void Unpause()
{
paused = false;
}
public void Start()
{
running = true;
singleton.StartCoroutine(CallWrapper());
}
public void Stop()
{
stopped = true;
running = false;
}
IEnumerator CallWrapper()
{
yield return null;
IEnumerator e = coroutine;
while(running) {
if(paused)
yield return null;
else {
if(e != null && e.MoveNext()) {
yield return e.Current;
}
else {
running = false;
}
}
}
FinishedHandler handler = Finished;
if(handler != null)
handler(stopped);
}
}
static TaskManager singleton;
public static TaskState CreateTask(IEnumerator coroutine)
{
if(singleton == null) {
GameObject go = new GameObject("TaskManager");
singleton = go.AddComponent<TaskManager>();
}
return new TaskState(coroutine);
}
}我们通过调用函数CeateTask来不断的创建新任务。
手游端的任务系统其实只要通过委托就可以把任务系统实现出来,当然,我们的数据加载其它的需要CreateTask中的协程来实现了。
本文出自 “海游移动” 博客,请务必保留此出处http://jxwgame.blog.51cto.com/943299/1602630
标签:unity task taskmanager
原文地址:http://jxwgame.blog.51cto.com/943299/1602630