Unity
网络游戏黑暗之光笔记
第四章 任务系统的实现
注意要点
在把鼠标放在任务面板上点击时,为了让角色不移动,在PlayerDir脚本的Update方法中的第一个if判定语句中添加一句,由于NGUI版本的原因使用下面一行代码
if (Input.GetMouseButtonDown(0)&& UICamera.isOverUI==false)
- NPCBar脚本
public TweenPosition questTween; public UILabel desLabel; public GameObject acceptBtnGo; public GameObject okBtnGo; public GameObject cancelBtnGo; public bool isInTask = false;//表示是否在任务中 public int killCount = 0;//表示任务进度,已经杀死了几只小野狼 private PlayerStatus status; void Start() { //查找方法,获取状态 status = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerStatus>(); } 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(); // questTween.gameObject.SetActive(false); } 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) {//完成任务 //获得金币 status.GetCoint(1000); //数量归零 killCount = 0; ShowTaskDes(); } else { //没有完成任务 HideQuest(); } } public void OnCancelButtonClick() { HideQuest(); }
- 鼠标指针管理
创建GameSetting游戏物体加载CursorManager组件并且制定好指针图片
public static CursorManager _instance; public Texture2D cursor_normal; public Texture2D cursor_npc_talk; public Texture2D cursor_attack; public Texture2D cursor_lockTarget;//锁定目标 public Texture2D cursor_pick; //设置热点 private Vector2 hotspot = Vector2.zero; //指针的类型,自动选择鼠标软硬件的指针 private CursorMode mode = CursorMode.Auto; //设置为单例模式 void Start() { _instance = this; } public void SetNormal() { Cursor.SetCursor(cursor_normal, hotspot, mode); } public void SetNpcTalk() { Cursor.SetCursor(cursor_npc_talk, hotspot, mode); }
创建NPC脚本并且是NPCBar继承NPC
//每一帧都要调用 private void OnMouseEnter() { CursorManager._instance.SetNpcTalk(); } private void OnMouseExit() { CursorManager._instance.SetNormal(); }