首页 > 代码库 > Unity中任务系统书写
Unity中任务系统书写
任务系统一直是游戏中非常重要的系统,它一直伴随在游戏左右,玩家通过完任务去赚取装备,去升级,所以说任务系统是非常重要的,值得我们好好去架构。在手机中的任务系统没有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中任务系统书写
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。