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

来源:互联网 发布:台湾导弹误 知乎 编辑:程序博客网 时间:2024/05/21 09:00

游戏管理机器,主要是用来管理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 initializationvoid 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 framevoid 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);    }}


0 0
原创粉丝点击