您的位置:首页 > 其它

4.4 创建游戏管理器 自己的理解以及体会

2015-09-05 21:59 459 查看
游戏管理机器,主要是用来管理UI,处理鼠标输入和逻辑事件等。



/*
* GameManager Definition
* Created by taotao man on 2015-8-1
* brief: 创建游戏管理器,它主要管理UI,处理鼠标输入和逻辑事件。
* // 修改记录
* date:
* add SetA();
* Change GetA();
*/

using UnityEngine;
using System.Collections;
//
using System.Collections.Generic;
/*
// 包含定义泛型集合的接口和类;泛型集合允许用户创建强类型的集合,
这种集合在类型安全和性能上均优于非泛型强类型集合。
*/
using UnityEngine.UI;   // 引用UI命名空间
using UnityEngine.Events;   //引用事件命名空间
using UnityEngine.EventSystems; //
/* 如果你使用 UI 系统,那么 EventSystem 对象会自动创建。这个对象负责监听用户输入。
* 默认情况下,在电脑上可以使用键盘和鼠标输入,在移动设备上可以使用触摸输入。
* 但是如果你要为surface这样的设备开发,你也可以同时启用两种输入。当需要屏蔽用户输入时,将此对象关闭即可。
* UnityEngine.EventSystems.EventSystem.current 保存了当前活动的 EventSystem 对象。
* */

public class GameManager : MonoBehaviour {

public static GameManager Instance;
// 加static 的是静态成员,不能实例化,在你运行的时候他自己在内存中开辟了块空间,不用在new,
// 有点像全局变量,如果不用你必须去 实例化(new)才能用

// 波数
public int m_wave = 1;
public int m_waveMax = 10;
// 生命
public int m_life = 10;
// 铜钱数量
public int m_point = 50;

// 文字控件
Text m_txt_wave;
Text m_txt_life;
Text m_txt_point;

// 重新游戏按钮
Button m_but_try;

//public bool m_debug = false;    // 控制是否显示路点之间的连线

// 当前是否选中的创建防守单位的按钮
bool m_isSelectedButton = false;

void Awake()    // 脚本唤醒,系统执行的第一个方法,在脚本中仅执行一次
{
Instance = this;
}

// Use this for initialization
void Start ()
{
// 定义UnityAction,在OnButCreateDefenderDown函数中响应按钮按下事件
UnityAction<BaseEventData> downAction = new UnityAction<BaseEventData>(OnButCreateDefenderDown);
// 定义UnityAction,在OnButCreateDefenderDown函数中响应按钮抬起事件
UnityAction<BaseEventData> upAction = new UnityAction<BaseEventData>(OnButCreateDefenderUp);
// 定义按钮按下事件Entry
EventTrigger.Entry down = new EventTrigger.Entry();
down.eventID = EventTriggerType.PointerDown;
down.callback.AddListener(downAction);
// 定义按钮抬起事件Entry
EventTrigger.Entry up = new EventTrigger.Entry();
up.eventID = EventTriggerType.PointerUp;
up.callback.AddListener(upAction);

// 查找所有子物体,根据名称获取UI控件
foreach(Transform t in this.GetComponentsInChildren<Transform>())
{
if (t.name.CompareTo("wave") == 0)   // 找到文字控件“波数”
{
m_txt_wave = t.GetComponent<Text>();
SetWave(1);
}
else if(t.name.CompareTo("life") == 0)// 找到文字控件“生命”
{
m_txt_life = t.GetComponent<Text>();
m_txt_life.text = string.Format("生命:<color=yellow>{0}</color>", m_life);
}
else if(t.name.CompareTo("point") == 0) // 找到文字控件“分数”
{
m_txt_point = t.GetComponent<Text>();
m_txt_point.text = string.Format("铜钱:<color=yellow>{0}</color>", m_point);

}
else if(t.name.CompareTo("but_try") == 0)   // 找到按钮控件“重新游戏”
{
m_but_try = t.GetComponent<Button>();
// 添加按钮点击函数回调
m_but_try.onClick.AddListener(OnButRetry);
m_but_try.gameObject.SetActive(false);  // 隐藏重新游戏按钮
}
else if(t.name.Contains("but_player"))   // 找到按钮控件“创建防守单位”
{
// 给创建防守单位按钮添加EventTrigger,并添加前面定义的按钮事件
EventTrigger trigger = t.gameObject.AddComponent<EventTrigger>();
trigger.delegates = new List<EventTrigger.Entry>();
trigger.delegates.Add(down);
trigger.delegates.Add(up);
}

}
}

// Update is called once per frame
void Update () {

}

// 更新文字控件波数
public void SetWave(int wave)
{
m_wave = wave;
m_txt_wave.text = string.Format("波数:<color=yellow>{0}/{1}</color>", m_wave, m_waveMax);
}

// 响应重新游戏按钮
void OnButRetry()
{
Application.LoadLevel(Application.loadedLevelName);
}

// 按下"创建防守单位按钮"
void OnButCreateDefenderDown(BaseEventData data)// 按下"创建防守单位按钮"
{
m_isSelectedButton = true;
}
// 响应创建防守单位按钮
void OnButCreateDefenderUp(BaseEventData data)
{
// 打印下当前按钮的名字
GameObject go = data.selectedObject;
Debug.Log(go.name);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: