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相反,实现关闭的动画效果
}
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 ();
}
}
public void GetCoin(int coinNumber)
{
coin += coinNumber;
}
private PlayerStatus state;
void Start() //在Start中找到对应的脚本
{
state = GameObject.FindGameObjectWithTag (Tags.player).GetComponent ();
}
public void OnOKQuest()
{
if (killWolfNumber >= wolfKilledAcquire) //若完成目标,即杀死的狼数量大于等于任务目标
{
state.GetCoin(1000); //调用GetCoin()增加金币
killWolfNumber = 0; //进度归零
ShowTaskDes(); //显示新的任务描述
}
else
{
HideQuest(); //若没完成,隐藏界面
}
}
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 ();
}
}
总结:任务系统是游戏的重要组成部分,但从代码实现来说,难度并不大。之后会陆续更新面板、道具、装备、系统设置等信息。