QF框架使用之案例(五) ------自定义注册事件
QFramework 是一套 渐进式 的 快速开发 框架。目标是作为无框架经验的公司、独立开发者、以及 Unity3D 初学者们的 第一套框架。框架内部积累了多个项目的在各个技术方向的解决方案。学习成本低,接入成本低,重构成本低,二次开发成本低,文档内容丰富(提供使用方式以及原理、开发文档)。github:https://github.com/liangxiegame/QFramework在 ..
·
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);
}
}
更多推荐


所有评论(0)