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

本文深入探讨了游戏管理器在游戏开发中的作用,包括如何管理用户界面、处理鼠标输入和逻辑事件。通过具体代码实例,展示了如何实现这些功能并优化用户体验。

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

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值