RPG游戏《黑暗之光》流程介绍与代码分析之(四):任务系统的实现
第四章:任务系统
- 任务模型的导入与任务UI界面的创建
- 任务的接受与完成
- 针对不同对象的指针修改(提高可玩性)
4.1 任务NPC模型的导入、任务UI界面的设计
![](/assets/blank.gif)
4.2 任务的接受与完成
- 点击NPC时,出现任务描述
- 接受任务后,出现任务提示
- 完成任务后,提交获取奖励
4.2.1 点击NPC后,应出现提示信息
![](/assets/blank.gif)
if (Input.GetMouseButtonDown (0) && UICamera.hoveredObject == null)
using UnityEngine;
using System.Collections;
public class BarNPC : MonoBehaviour {public TweenPosition questTween;void OnMouseOver() //当鼠标发出射线发生碰撞{if (Input.GetMouseButtonDown(0)) //此时点下鼠标{ShowQuest();}}void ShowQuest(){questTween.gameObject.SetActive (true); //将quest激活questTween.PlayForward (); //显示动画}
}
public void CloseQuest(){HideQuest ();}void HideQuest(){questTween.PlayReverse (); //与PlayForward相反,实现关闭的动画效果}
4.2.2 点击Accept后,出现任务提示
using UnityEngine;
using System.Collections;
public class BarNPC : MonoBehaviour {public TweenPosition questTween;public bool isOnTask = false; //是否处于任务状态的标志位public int killWolfNumber = 0; //当前杀死的狼 public int wolfKilledAcquire = 10; //需要杀死狼的个数public UILabel describeLabel; //控制任务描述与进度显示public GameObject AcceptBtnGO; //控制三个按钮public GameObject OKBtnGO;public GameObject CancelBtnGO;void OnMouseOver(){if (Input.GetMouseButtonDown(0)){if(isOnTask) //如果处在任务状态,即按下Accept,显示任务进度{ShowTaskProgress();}else //否则显示任务描述{ShowTaskDes();}ShowQuest();}}void ShowQuest() //任务界面的动画效果{questTween.gameObject.SetActive (true);questTween.PlayForward ();}void HideQuest(){questTween.PlayReverse ();}void ShowTaskDes() //任务描述{describeLabel.text = "任务:\n杀死" + wolfKilledAcquire+"只小野狼\n\n奖励:\n1000金币";AcceptBtnGO.gameObject.SetActive (true);OKBtnGO.gameObject.SetActive (false);}void ShowTaskProgress() //任务进度{describeLabel.text = "任务:\n你已经杀死了" + killWolfNumber + "/"+wolfKilledAcquire+"只小野狼\n\n奖励:\n1000金币";AcceptBtnGO.gameObject.SetActive (false);OKBtnGO.gameObject.SetActive (true);}public void OnCloseQuest() //点击关闭按钮{HideQuest ();}public void OnAcceptQuest() //点击接受按钮{isOnTask = true;ShowTaskProgress ();}
}
![](/assets/blank.gif)
4.2.3 完成任务后,获取任务奖励并更新任务描述
public void GetCoin(int coinNumber){coin += coinNumber;}
private PlayerStatus state;void Start() //在Start中找到对应的脚本{state = GameObject.FindGameObjectWithTag (Tags.player).GetComponent<PlayerStatus> ();}
public void OnOKQuest(){if (killWolfNumber >= wolfKilledAcquire) //若完成目标,即杀死的狼数量大于等于任务目标{state.GetCoin(1000); //调用GetCoin()增加金币killWolfNumber = 0; //进度归零ShowTaskDes(); //显示新的任务描述}else{HideQuest(); //若没完成,隐藏界面}}
4.3 点击不同对象出现不同指针
using UnityEngine;
using System.Collections;
public class MouseSetting : MonoBehaviour {public static MouseSetting _instance; //一个单例,到时候通过单例调用不同指( ps:单例是用来取代以前的全局函数变量)
相比全局函数,单例不会重名,应用域明确,可以管理生命周期,可封装,可以通过继承扩展(重要!)public Texture2D cursor_normal; //所有功能的鼠标指针外观public Texture2D cursor_npcTalk;public Texture2D cursor_attack;public Texture2D cursor_pick;public Texture2D cursor_lockTarget;public Vector2 hotspot = Vector2.zero;public CursorMode mode = CursorMode.Auto;void Start(){_instance = this;}public void SetNormalCursor(){Cursor.SetCursor (cursor_normal, hotspot, mode);}public void SetNPCTalkCursor(){Cursor.SetCursor (cursor_npcTalk, hotspot, mode);}
}
using UnityEngine;
using System.Collections;
public class NPC : MonoBehaviour {void OnMouseEnter() //碰撞到GUI控件时调用一次,不同于OnMouseOver的每帧调用{MouseSetting._instance.SetNPCTalkCursor ();}void OnMouseExit(){MouseSetting._instance.SetNormalCursor ();}
}
总结:任务系统是游戏的重要组成部分,但从代码实现来说,难度并不大。之后会陆续更新面板、道具、装备、系统设置等信息。
RPG游戏《黑暗之光》流程介绍与代码分析之(四):任务系统的实现相关推荐
- Unity3D案例太空射击(Space Shooter)流程介绍与代码分析(上)
最近开始接触游戏制作,用Unity制作一些简单的游戏进行入门.这几篇博客总结了Space Shooter的制作流程,并对代码进行了分析.一是方便自己日后进行回顾与补充,二是为了让让更多的游戏爱好者接触 ...
- Unity3D案例太空射击(Space Shooter)流程介绍与代码分析(下)
这部分内容关注的是游戏性的提升,包括音效.计分等功能的实现. 传送门: 太空射击(Space Shooter)流程介绍与代码分析(上) 太空射击(Space Shooter)流程介绍与代码分析(中) ...
- RPG游戏《黑暗之光》流程介绍与代码分析之(一):游戏载入界面的创建
<黑暗之光>是一款中等大小的RPG游戏,在入门Unity后适合用来上手,了解一整套游戏开发流程以及游戏内的各种功能.借助几篇博客整理一下整体的开发步骤以及代码,方便自己回顾,也便于各位交流 ...
- RPG游戏《黑暗之光》流程介绍与代码分析之(二):角色创建界面的实现
第二章 角色创建 上一章中完成了初始化的场景界面的创建,本章就接着上一篇博客的内容,介绍角色创建的方法. 2.1 角色创建的UI界面 角色创建的背景采用与加载界面所用背景相同,并且Camera不需要移 ...
- RPG游戏《黑暗之光》流程介绍与代码分析之(五):背包系统的实现(上)
第五章:背包系统 背包系统作为游戏中的一个重要功能,与游戏存在着诸多的交互性,购买商品.怪物掉落等各种情形都需要访问背包系统,结构较为复杂.因此背包系统将通过两篇博客进行分析. (上)部分包括 功能面 ...
- RPG游戏《黑暗之光》流程介绍与代码分析之(十四):角色技能系统的实现
十四章:角色技能系统的实现 技能系统是本游戏开发的最后一部分内容,与普通攻击系统不同,我们需要添加释放技能的特效.动画以及播放时间.并将动画分为回复.Buff.单体和群体. 14.1添加技能的特效名称 ...
- RPG游戏《黑暗之光》流程介绍与代码分析之(十三):角色攻击系统的实现
十三章:角色攻击系统 角色攻击是杀怪时的核心功能,攻击模式又可细分为普通攻击和技能攻击,其中技能攻击的信息存储在SkillInfoInList,本章节只涉及普通攻击部分. 为Magician添加一个P ...
- RPG游戏《黑暗之光》流程介绍与代码分析之(十五):主角受攻击效果以及场景切换
十五章:主角受攻击效果以及场景切换 本篇博客将<黑暗之光>开发的最后工作做完,包括之前未实现的主角被击效果,以及实际运行中的场景切换. 15.1 主角的受攻击效果 我们参照WolfBaby ...
- RPG游戏《黑暗之光》流程介绍与代码分析之(六):背包系统的实现(下)
接着(上)部分的内容,本节关注物品栏中一些功能的实现,及 拾取操作的模拟 背包的显示与隐藏 物品提示信息 5.4 拾取模拟 有了(上)部分的铺垫,本节的目标是实现物品拾取功能. 物品拾取功能的逻辑分为 ...
最新文章
- 【强烈推荐】如何给TortoiseGit 配置密钥?
- How Many Answers Are Wrong HDU - 3038(带权并查集经典题,满满的都是注释)
- linux管理用户和文件权限
- 九个步骤让你成为PHP专家
- FreeCodeCamp学习之数组查找去重
- php 四维数组_PHP 多维数组
- matlab多种分配方案_基于MATLAB的水资源优化分配问题动态规划解法
- JVM学习笔记-03-类加载器及双亲委派机制
- 华为云文字识别深层算法突破 助力复产复工
- 如何写程序自动下载BBC Learning English的所有在线课程
- 关于Y400 电源管理 Win10解决方案
- 架构方案(9) 如何构建一套高可用的 APP 消息推送平台
- html5中display flex,详解CSS中的display:flex||inline-flex属性
- 白城师范学院计算机系鲍金玲,企业绩效考核方法的比较与借鉴.pdf
- 手机号 mysql 索引_mysql索引以及优化
- S3C2440的中断体系结构
- 【嵌入式Linux驱动开发】十五、实操Linux开发中的中断,编写第一个按键驱动程序
- python批量建立文件夹
- torch.nn.Embedding的使用
- Arduino运行FreeRTOS操作系统
热门文章
- 绝唱----《命运交响曲》
- AD集成库元件简写中英文对照表
- 为什么输入法显示中文打不出中文_输入法为什么打不出汉字_电脑输入法打不出汉字如何解决-win7之家...
- vis.js网络拓扑图自定义图片
- 经典的webshell提权
- 快速理解Lambda表达式
- JCBD - 4 - JCBD - CRUD操作 即:JDBC常用接口详解
- java的内容好复杂_Java I/O 好复杂,傻傻分不清楚,别担心,我们有线索了……...
- 阿里重磅开源在线分析诊断工具Arthas(阿尔萨斯)
- 很久之前的诗三首,系列诗,听一个MM得,发到这里.