QFramework 是一套 渐进式 的 快速开发 框架。目标是作为无框架经验的公司、独立开发者、以及 Unity3D 初学者们的 第一套框架。框架内部积累了多个项目的在各个技术方向的解决方案。学习成本低,接入成本低,重构成本低,二次开发成本低,文档内容丰富(提供使用方式以及原理、开发文档)。github:https://github.com/liangxiegame/QFramework


QF框架使用之案例解析(一) ------ UIKit中我们使用了UI自定义注册事件,事件的索引值要从3001开始,然后在使用过程中要使用UI自定义注册事件就要继承UIPanel,这样会乱~而且QF中只实现了UI和Audio的时间注册,因此我仿照自己写了一下Game层的事件注册


在这里插入图片描述
首先创建如下脚本:
在这里插入图片描述

GameManager继承自QMgrBehaviour与ISingleton,完整代码如下:
using QFramework;
using UnityEngine;

public class GameManager : QMgrBehaviour, ISingleton
{
    public override int ManagerId
    {
        get
        {
            return QMgrID.Game;
        }
    }

    public void OnSingletonInit()
    {

    }
    //单例模式
    private static GameManager mInstance;
    public static GameManager Instance
    {
        get
        {
            if (null == mInstance)
            {
                mInstance = FindObjectOfType<GameManager>();
            }

            if (null == mInstance)
            {
                Instantiate(Resources.Load<GameObject>("ScriptHolder"));
                mInstance = MonoSingletonProperty<GameManager>.Instance;
                mInstance.name = "ScriptHolder";
                DontDestroyOnLoad(mInstance);
            }
            return mInstance;
        }
    }
}

其实这里面可以放一些Game的一些逻辑,可以参考UIManager

GameParent继承自QMonoBehaviour,参考UIPanel,完整代码如下:
using QFramework;

public class GameParent : QMonoBehaviour
{
    public override IManager Manager
    {
        get
        {
            return GameManager.Instance;
        }
    }
    protected virtual void RegisterGameEvent()
    {

    }
    public virtual void Start()
    {
        //调用注册事件函数
        RegisterGameEvent();
    }
}

GameEventID 是事件的Key值,Game层从15001开始:
using UnityEngine;

public class GameEventID : MonoBehaviour {

	public enum SetColliderActive //设置碰撞盒的显示与隐藏
    {
        Hide = 15001,
        Show
    }
}

使用:继承GameParent ,重写ProcessMsg、RegisterGameEvent两个方法
using QFramework;
using UnityEngine;

public class CarClick : GameParent {

    private void OnMouseDown()
    {
        UIMgr.OpenPanel<UIBg>(UILevel.PopUI, prefabName: "Resources/Prefabs/UI CarClick");
        //隐藏碰撞框
        SendEvent<int>((int)GameEventID.SetColliderActive.Hide);
    }
    //事件处理函数
    protected override void ProcessMsg(int eventId, QMsg msg)
    {
        switch(eventId)
        {
            case (int)GameEventID.SetColliderActive.Hide:
                transform.GetComponent<MeshCollider>().enabled = false;
                break;
            case (int)GameEventID.SetColliderActive.Show:
                transform.GetComponent<MeshCollider>().enabled = true;
                break;
        }
    }
    //注册Game响应事件
    protected override void RegisterGameEvent()
    {
        RegisterEvent(GameEventID.SetColliderActive.Hide);
        RegisterEvent(GameEventID.SetColliderActive.Show);
    }
}

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐