CN111026365A - 一种基于Unity3D的App开发框架 - Google Patents

一种基于Unity3D的App开发框架 Download PDF

Info

Publication number
CN111026365A
CN111026365A CN201911094330.0A CN201911094330A CN111026365A CN 111026365 A CN111026365 A CN 111026365A CN 201911094330 A CN201911094330 A CN 201911094330A CN 111026365 A CN111026365 A CN 111026365A
Authority
CN
China
Prior art keywords
interface
module
entity
class
actor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201911094330.0A
Other languages
English (en)
Other versions
CN111026365B (zh
Inventor
袁黎
魏召刚
傅以盘
冀晓霞
李茜
滕凯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Cubespace Intelligent Technology Co ltd
Original Assignee
Wuhan Cubespace Intelligent Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Cubespace Intelligent Technology Co ltd filed Critical Wuhan Cubespace Intelligent Technology Co ltd
Priority to CN201911094330.0A priority Critical patent/CN111026365B/zh
Publication of CN111026365A publication Critical patent/CN111026365A/zh
Application granted granted Critical
Publication of CN111026365B publication Critical patent/CN111026365B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供了所述一种基于Unity3D的App开发框架,其方法包括:由自定义的FW单例类使用多态方法注入多个自定义模块组成,在开发过程中仅需将所述FW单例类挂载至编辑器,无需将所述FW单例类中注入的多个自定义模块单独挂载到场景中,以减少程序运行消耗以及挂载过程中的误操作。本发明的有益效果是:本申请所提出的技术方案解耦了用户界面、三维显示对象、业务逻辑、数据模型,同时提高了开发效率,具有良好的可扩展性,健壮性。

Description

一种基于Unity3D的App开发框架
技术领域
本发明涉及软件开发领域,尤其涉及一种基于Unity3D的App开发框架。
背景技术
一般Unity3D开发,使用继承自MonoBehaviour的子类手动挂载到GameObject对象上,其中包含功能模块、数据持有、业务逻辑、交互逻辑、模型显示、刚体、物理等。
这种技术应用在小型项目,一定程度上提高了代码的复用性以及开发效率,但由于代码和美术资源的高度耦合,在大型项目迭代开发过程中,多人同时编辑同一个GameObject对象或者Prefab对象容易导致Git仓库冲突,在美术资源发生更改时,需要重新手动挂载脚本,影响开发效率;大量脚本继承自MonoBehaviour,降低软件整体的执行/编译效率。
注:
GameObject:Unity3D引擎中定义的游戏对象类型;
MonoBehaviour:Unity3D引擎中可挂载到GameObject上的组件;
Prefab:Unity3D引擎中预设的GameObject成为预制体,包含子游戏对象,组件及组件预设的数据;
Git:一种开源的分布式版本控制***。
发明内容
为了解决上述问题,本发明提供了一种基于Unity3D的App开发框架;
一种基于Unity3D的App开发框架,由自定义的FW单例类使用多态方法注入多个自定义模块组成,在开发过程中仅需将所述FW单例类挂载至编辑器,无需将所述FW单例类中注入的多个自定义模块单独挂载到场景中,以减少App程序运行消耗以及挂载过程中的误操作;
所述多个自定义模块包括:快捷键模块MKey、界面模块MUI、长连接网络模块MConn、命令模块MCmd、***模块MSystem和实体模块MEntity;
所述快捷键模块MKey,用于按事件名称绑定键盘按键到事件回调函数,便于自定义键盘按键;
所述界面模块MUI,用于绑定实现IUI接口的界面类到界面预制体资源,加载界面类实例时,自动加载对应的界面预制体资源并完成初始化,无需将界面脚本挂载到界面预制体资源;
所述长连接网络模块MConn,用于管理实现IConn接口的长连接类,向指定服务器发送消息并接收服务器反馈的消息;
所述命令模块MCmd,用于按命令名注册命令类,并执行对应的命令;
所述***模块MSystem,用于注册或者移除***,并提供各***的功能API,实现ICmd接口类的调用;其中,所述***为实现ISystem接口的类;
所述实体模块MEntity,用于注入实体工厂类,以管理所有的实体对象,并通过工厂类组装或者卸载实体对象的实体组件;其中,所述实体工厂类为实现IEntityFactory接口的类;所述实体组件为实现IComponent接口的类,持有不同功能需要的数据,并能广播数据变化的事件;
所述一种基于Unity3D的App开发框架的使用原理,具体包括如下步骤:
S101:所述快捷键模块MKey捕获用户键盘输入,所述界面模块MUI捕获鼠标输入或者长连接网络模块MConn接收的消息;
S102:Unity3D根据所述键盘输入、鼠标输入或者网络模块MConn接收的消息,通过调用命令模块MCmd中注入的命令调用所述***模块MSystem中注入的对应***;其中,所述命令为实现ICmd接口的类;
S103:对应***的***API函数通过所述实体模块MEntity获取需要的实体,改变相应实体和实体组件的相关功能数据;所述实体为实现IEntity接口的类;
S104:所述实体或者实体组件广播该数据更改事件,所有注册该数据更改事件的监听者执行相应回调函数;所述监听者包括界面、演员和演员组件;
其中,所述演员为实现IActor接口的类,所述演员组件为实现IActorComponent接口的类,所述界面为实现IUI接口的类。
进一步地,所述FW单例类为自定义的类,用于通过模式注入Unity3D内置的模块或者注入自定义模块,并管理所有的模块;所述模式为实现IMode接口的类;
进一步地,所述IMode接口,为初始化FW单例类内置模块的接口。
进一步地,所述ICmd接口,为命令接口,用于实现该接口的类注入到所述MCmd模块中,实现调用相关***的方法;
所述ISystem接口,为***接口,用于实现该接口的类注入到所述MSystem模块中,实现改变实体Entity或者实体组件Component的相关数据;
所述IEntity,为实体接口,内置Entity类实现该接口,持有各实体的基础数据;所述基础数据包括实体的空间位置数据、方向数据和缩放数据;
所述IComponent接口,为实体组件接口,该接口持有各实体组件各功能的数据,用于派发事件以及改变事件;
所述IActor接口,为演员接口,内置Actor类实现该接口,用于监听IEntity数据变化;
所述IActorComponent接口,为演员组件接口,用于实现演员的显示和交互逻辑;
所述IUI接口,为界面接口,用于实现界面的交互逻辑及数据更新;
所述IEntityFacory接口,为实体工厂接口,用于组装实体对象的实体组件;
所述IConn接口,为长连接接口,用于处理消息包的粘包和分包、编码和解码、加密和解密。
进一步地,所述自定义模块还包括:
对象池模块MPool:用于按类型或标签注册对象池,使对象实例可复用,减少***垃圾回收消耗;
日志模块MLog:用于将日志分为5个等级,分别为:Debug、Info、Warn、Error和Fatal;
计时器模块MTimer:用于传入计时时长,重复次数以及触发回调,简化传统基于Unity3D引擎内置的Time.detalTime计时。
进一步地,所述自定义模块还包括:
消息模块MNotice:用于注入指定消息名的回调函数,当派发消息时,将数据传入所有注册该消息的回调函数;
全局数据模块MData:用于管理应用开发中的全局数据;
版本更新模块MVer:用于校验本地资源和服务端资源版本,并对本地资源进行增量更新,无需重新下载整个程序。
进一步地,所述自定义模块还包括:
断点续传模块MResume:用于从服务器下载文件;;
场景模块MScene:用于管理Unity3D中的场景文件的加载或者卸载,绑定场景组件到场景中的游戏对象;
音频模块MAudio:用于封装Unity3D的音频播放,设置音频监听对象,播放音源,设置音频混合器级设置快照;
语言本地化模块MI18N:用于通过配置文件中的本地化语言配置;
命令记录模块MRecorder:用于记录命令的执行顺序和时间,可以撤销或者重做命令,将命令序列化重现用户的操作;
进一步地,所述自定义模块还包括:
实体组件模块MComponent:用于管理所有的实体组件,并使用对象池创建或者回收实体组件;
演员模块MActor:用于注入演员工厂类,管理三维显示对象,并通过工厂类组装或者卸载显示对象的演员组件ActorComponent;所述演员工厂类为实现IActorFactory接口的类;所述演员组件ActorComponent为实现IActorComponent接口的类,包含美术资源模型的显示、用户交互处理、物理属性、注册实体组件的数据变化事件的更新显示;
演员组件模块MActorComponent:用于管理所有演员组件。
进一步地,所述IActorFactory接口,为演员工厂接口,用于根据实体对象以及实体组将组装演员组件。
本发明提供的技术方案带来的有益效果是:本发明所提出的技术方案适用于严肃游戏类应用,该类型应用结合传统教育类和传统游戏类应用,既有教育类复杂的数据结构以及业务逻辑也有游戏类应用的丰富UI交互及三维图形显示,本申请所提出的技术方案解耦了用户界面、三维显示对象、业务逻辑、数据模型,同时提高了开发效率,具有良好的可扩展性,健壮性。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例中一种基于Unity3D的App开发框架的结构图;
图2是本发明实施例中一种基于Unity3D的App开发框架的总体使用原理流程图;
图3是本发明实施例中的具体操作示意图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。
本发明的实施例提供了一种基于Unity3D的App开发框架;请参考图1,图1是本发明实施例中一种基于Unity3D的App开发框架的结构图;
所述一种基于Unity3D的App开发框架基于Unity3D,由自定义的FW单例类使用多态方法注入多个自定义模块组成,在开发过程中仅需将所述FW单例类挂载至编辑器,无需将所述FW单例类中注入的多个自定义模块单独挂载到场景中,以减少程序运行消耗以及挂载过程中的误操作;
其特征在于:所述多个自定义模块包括:快捷键模块MKey、界面模块MUI、长连接网络模块MConn、命令模块MCmd、***模块MSystem和实体模块MEntity;
所述快捷键模块MKey,用于按事件名称绑定键盘按键到事件回调函数,便于应用中可以自定义键盘按键;
所述界面模块MUI,用于绑定实现IUI接口的界面类到界面预制体资源,加载界面类实例时,自动加载对应的界面预制体资源并完成初始化,无需将界面脚本挂载到界面预制体资源;
所述长连接网络模块MConn,用于管理实现IConn接口的长连接类,向指定服务器发送消息并接收服务器反馈的消息;
所述命令模块MCmd,用于按命令名注册命令类,并执行对应的命令;
所述***模块MSystem,用于注册或者移除***,并提供各***的功能API,便于实现ICmd接口类的调用;其中,所述***为实现ISystem接口的类;
所述实体模块MEntity,用于注入实体工厂类,以管理所有的实体对象,并通过工厂类组装或者卸载实体对象的实体组件;其中,所述实体工厂类为实现IEntityFactory接口的类;所述实体组件为实现IComponent接口的类,持有不同功能需要的数据(例如:设备的型号、参数、重量、最大电压、电流和功率等),并能广播数据变化的事件;
请参考图2,图2是本发明实施例中一种基于Unity3D的App开发框架的总体使用原理流程图,具体包括如下步骤:
S101:所述快捷键模块MKey捕获用户键盘输入,所述界面模块MUI捕获鼠标输入或者长连接网络模块MConn接收的消息;
S102:Unity3D根据所述键盘输入、鼠标输入或者网络模块MConn接收的消息,通过调用命令模块MCmd中注入的命令调用所述***模块MSystem中注入的对应***;其中,所述命令为实现ICmd接口的类;
S103:对应***的***API函数通过所述实体模块MEntity获取需要的实体,改变相应实体和实体组件的相关功能数据;所述实体为实现IEntity接口的类;
S104:所述实体或者实体组件广播该数据更改事件,所有注册该数据更改事件的监听者执行相应回调函数(显示逻辑);所述监听者包括界面、演员和演员组件;
上述命令无需关心更改该数据会影响哪些监听者,实际开发过程中界面及美术模型的更改或者调整(即演员组件),甚至重构相对比较频繁,原有开发模式每次更改都得手动大批量的在界面和其他美术资源上挂载功能代码,然后设置交互事件指向的业务逻辑;
其中,所述演员为实现IActor接口的类,所述演员组件为实现IActorComponent接口的类,所述界面为实现IUI接口的类。
对上述的各接口进行如下解释:
所述FW单例类为自定义的一个类,用于通过模式注入Unity3D内置的模块或者注入自定义模块,并管理所有的模块;所述模式为实现IMode接口的类;
所述IMode接口,为初始化FW单例类内置模块的接口;
所述ICmd接口,为命令接口,用于实现该接口的类注入到所述MCmd模块中,实现调用相关***的方法;
所述ISystem接口,为***接口,用于实现该接口的类注入到所述MSystem模块中,实现改变实体Entity或者实体组件Component的相关数据;
所述IEntity,为实体接口,内置Entity类实现该接口,持有实体的基础数据;所述基础数据为实体的空间位置、方向和缩放;
所述IComponent接口,为实体组件接口,该接口持有实体的分类数据,可派发事件改变事件;
所述IActor接口,为演员接口,内置Actor类实现该接口,用于监听IEntity数据变化,及更新基础显示;
所述IActorComponent接口,为演员组件接口,用于实现演员的显示、交互逻辑等;
所述IUI接口,为界面接口,用于实现界面的交互逻辑及数据更新;
所述IEntityFacory接口,为实体工厂接口,用于组装实体对象的实体组件;
所述IActorFactory接口,为演员工厂接口,用于根据实体对象以及实体组将组装演员组件。
所述IConn接口,为长连接接口.用于处理消息包的粘包\分包,编码\解码,加密\解密等基础功能。
所述自定义模块还包括:
线程池模块MThread:基于C#线程池封装,该模块用于将比较耗时的业务逻辑(例如寻路算法,电流电压的仿真计算等),计算完成后,将结果返回到主线程,避免降低主线程的帧率;
主线程异步模块MAsync:将Unity3D引擎中无法在子线程使用的类型的批量业务逻辑(例如GameObject,Texture2D等类型),分摊到帧上计算,避免单帧运算量过大,导致降低主线程帧率;
对象池模块MPool:按类型或标签注册对象池,是对象实例可复用,减少***垃圾回收消耗;
日志模块MLog:日志分为5个等级,分别为:Debug、Info、Warn、Error和Fatal;可注入不同日志类(例如编辑器打印日志、保存文本日志和邮件日志);
计时器模块MTimer:传入计时时长,重复次数以及触发回调,简化传统基于Time.detalTime计时;
短连接模块MHttp:简化Unity的Http请求相关的调用,并可模拟服务器响应,方便测试;
消息模块MNotice:注入指定消息名的回调函数,当派发消息时,将数据传入所有注册该消息的回调函数,利于代码的解耦;
全局数据模块MData:管理应用开发中全局数据的管理;
资源模块Masset:基于Unity3D官方的Addressables资源管理***,加载资源,实例化资源等;
版本更新模块MVer:校验本地资源和服务端资源版本,增量更新;
断点续传模块MResume:主要用于从服务器大更新时下载文件;其中,大更新需要更新的资源大于或者等于1G,在网络中断再次连接后能继续下载文件,不用重新下载,以节省服务器流量及用户的下载时间;
场景模块MScene:管理Unity3D中的场景文件(.scene)加载\卸载,可绑定场景组件(SceneComponent)到场景中的游戏对象(GameObject),当场景加载完成后触发场景组件的初始化,不需要将代码手动挂载到场景,降低场景资源和代码的耦合;
音频模块MAudio:封装Unity3D的音频播放,可设置音频监听对象,播放音源,设置音频混合器级设置快照;
语言本地化模块MI18N:通过配置文件中的本地化语言配置,适用不同国家地区;
命令记录模块MRecorder:记录命令的执行顺序和时间,可以撤销/重做命令,将命令序列化重现用户的操作;
状态机模块MFsm:内置一个主状态机控制应用的主流程状态,也可自定义子状态机控制子流程状态;
实体组件模块MComponent:管理所有的实体组件,并使用对象池创建\回收实体组件;
演员模块MActor:注入演员工厂类,管理三维显示对象,并通过工厂类组装\卸载显示对象的演员组件ActorComponent;所述演员工厂类为实现IActorFactory接口的类;所述演员组件ActorComponent为实现IActorComponent接口的类,包含美术资源模型的显示、用户交互处理、物理属性、注册实体组件的数据变化事件的更新显示;
演员组件模块MActorComponent:管理所有演员组件。
在本发明实施例中,以添加设备到背包和从设备背包中拖拽设备到三维场景渲染为例,对本发明所提出的技术方案做详细描述:
如图3所示,在设备添加到背包时,三维场景是不需要渲染该设备,但可以设置设备的相关参数,具体业务流程步骤如下:
1、用户在设备库界面点击添加设备按钮,设备库界面类使用MRecorder记录模块通过命令名获取添加设备实体的记录类RElementAdd(实现IRecorder接口,GenertateUndo函数返回一个删除该设备实体的lambda表达式)实例执行记录;传入参数有命令名,设备id和设备类型:
var data=new Data<string,string>{data0:“设备id”,data1:“设备类型”};
FW.Recorder.Record(“elementAdd”,data);
程序初始化时,预先使用FW.Recorder.BindRecorder<RElementAdd>()where T:IRecorder,new()方法,将RElementAdd类实例的GenerateUndo方法绑定名到“elementAdd”命令名,GenerateUndo方法的签名为;Action GenerateUndo(object data),即传入数据,返回一个用于撤销该命令的lambda表达式;所述IRecorder接口,为命令记录接口,用于命令的撤销与重做,序列化或者反序列化;
将RElementAdd.GenerateUndo返回的lambda表达式放入撤销堆栈,并将命令名和data放入重做堆栈;
2、使用MCmd命令模块通过命令名获取添加设备实体命令类CmdElementAdd(实现ICmd接口)实例并执行命令.传入命令名,设备id和设备类型
FW.Cmd.Execute(“elementAdd”,data);
程序初始化时,预先使用FW.Cmd.BindCmd<CmdElementAdd>()where T:ICmd,new()方法,将CmdElementAdd的Execute方法绑定到“elementAdd”命令名;
将命令数据转为需要的数据:
var data=(Data<string,string>)noticeData;
varelementId=data.data0;
varelementType=data.data1;
CmdElementAdd.Execute执行SystemElementEntity***API;
3、使用MSystem***模块获取SystemElementEntity设备实体***(实现ISystem接口)生成设备实体,并添加到实体列表;
FW.System.GetSystem<SystemElementEntity>.AddElement(elementId,elementType);
var entity=FW.Entity.SpawnEntity(elementId,“element”,elementType);
idToEntity.Add(elementId,entity);
4、MEntity模块设置Entity基础数据,并使用注入的EntityFactory实体工厂(实现IEntityFactory接口)组装设备实体:
var entity=FW.Pool.Spawn<Entity>();
entity.id=elementId;
entity.type=elementType;
factory.AssembleEntity(entity);
5、EntityFactory实体工厂使用设备id和设备类型组装设备实体;
entity.AddComponent<CElemeentTerminals>();
6、SystemElementEntity设备实体***(实现ISystem接口)实体列表数据发生改变,派发事件到背包界面,设备背包界面更新显示;
7、鼠标拖拽背包设备到三维场景中,使用MRecorder记录模块通过命令名获取添加设备演员的记录类实例执行记录;传入命令名,设备id;代码类似1;
8、使用MCmd命令模块通过命令名获取添加设备演员命令实例并执行命令;传入命令名,设备id;代码类似2;
9、使用MSystem***模块获取SystemElementActor设备演员***(实现ISystem接口)生成设备演员,并添加到演员列表;
FW.System.GetSystem<SystemElementActor>.AddElementActor(elementId,onComplete);
var entity=FW.Entity.GetEntity(elementId);
FW.Actor.SpawnActor(entity,actor=>{
idToActor.Add(elementId,actor);
onComplete(actor);
});
10、MActor模块使用注入的ActorFactory演员工厂(实现IActorFactory接口)组装演员:
Factory.SpawnActor(entity,onComplete);
11、ActorFactory演员工厂加载资源模型并设置Actor基础数据,使用设备id组装设备演员:
var path=Paths.GetElementPrefab(entity.type);
FW.Asset.InstantiateAsync(path,go=>{
var actor=go.GetComp<Actor>();
actor.InitEntity(entity);
actor.AddActorComponent<ActorComponentDrag>();
onComplete(actor);
});
12、实体列表数据发生改变,派发事件到SceneComponentActor设备演员场景组件(实现ISceneComponent接口),该组件将演员显示到场景中;
13、当用户按下Ctrl+Z组合键时,MKey快捷键模块触发MRecorder记录模块的撤销堆栈弹出最后一个lambda表达式并执行:
FW.Recorder.Undo();
14、当最后一个命令是添加设备实体时,弹出的lambda表达式对应的根据设备的id删除设备实体;
当最后一个命令是添加设备演员时,弹出的lambda表达式对应的根据设备的id删除设备演员;
15、当用户按下Ctrl+Y组合键时,MKey快捷键模块触发MRecorder记录模块的重做堆栈弹出最后一个命令名和数据,并重新记录命令:
FW.Recorder.Redo();
16、当最后一个被撤销的命令是添加设备实体时,弹出的添加设备实体命令名,设备id,设备类型重新记录命令;
17、当最后一个被撤销的命令是添加设备演员时,弹出的添加设备演员命令名,设备id重新记录命令。
本发明的有益效果是:本发明所提出的技术方案适用于严肃游戏类应用,该类型应用结合传统教育类和传统游戏类应用,既有教育类复杂的数据结构以及业务逻辑也有游戏类应用的丰富UI交互及三维图形显示,本申请所提出的技术方案解耦了用户界面、三维显示对象、业务逻辑、数据模型,同时提高了开发效率,具有良好的可扩展性,健壮性。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种基于Unity3D的App开发框架,由自定义的FW单例类使用多态方法注入多个自定义模块组成,在开发过程中仅需将所述FW单例类挂载至编辑器,无需将所述FW单例类中注入的多个自定义模块单独挂载到场景中,以减少App程序运行消耗以及挂载过程中的误操作;
其特征在于:所述多个自定义模块包括:快捷键模块MKey、界面模块MUI、长连接网络模块MConn、命令模块MCmd、***模块MSystem和实体模块MEntity;
所述快捷键模块MKey,用于按事件名称绑定键盘按键到事件回调函数,便于自定义键盘按键;
所述界面模块MUI,用于绑定实现IUI接口的界面类到界面预制体资源,加载界面类实例时,自动加载对应的界面预制体资源并完成初始化,无需将界面脚本挂载到界面预制体资源;
所述长连接网络模块MConn,用于管理实现IConn接口的长连接类,向指定服务器发送消息并接收服务器反馈的消息;
所述命令模块MCmd,用于按命令名注册命令类,并执行对应的命令;
所述***模块MSystem,用于注册或者移除***,并提供各***的功能API,实现ICmd接口类的调用;其中,所述***为实现ISystem接口的类;
所述实体模块MEntity,用于注入实体工厂类,以管理所有的实体对象,并通过工厂类组装或者卸载实体对象的实体组件;其中,所述实体工厂类为实现IEntityFactory接口的类;所述实体组件为实现IComponent接口的类,持有不同功能需要的数据,并能广播数据变化的事件;
所述一种基于Unity3D的App开发框架的使用原理,具体包括如下步骤:
S101:所述快捷键模块MKey捕获用户键盘输入,所述界面模块MUI捕获鼠标输入或者长连接网络模块MConn接收的消息;
S102:Unity3D根据所述键盘输入、鼠标输入或者网络模块MConn接收的消息,通过调用命令模块MCmd中注入的命令调用所述***模块MSystem中注入的对应***;其中,所述命令为实现ICmd接口的类;
S103:对应***的***API函数通过所述实体模块MEntity获取需要的实体,改变相应实体和实体组件的相关功能数据;所述实体为实现IEntity接口的类;
S104:所述实体或者实体组件广播该数据更改事件,所有注册该数据更改事件的监听者执行相应回调函数;所述监听者包括界面、演员和演员组件;
其中,所述演员为实现IActor接口的类,所述演员组件为实现IActorComponent接口的类,所述界面为实现IUI接口的类。
2.如权利要求1所述的一种基于Unity3D的App开发框架,其特征在于:所述FW单例类为自定义的类,用于通过模式注入Unity3D内置的模块或者注入自定义模块,并管理所有的模块;所述模式为实现IMode接口的类。
3.如权利要求2所述的一种基于Unity3D的App开发框架,其特征在于:所述IMode接口,为初始化FW单例类内置模块的接口。
4.如权利要求1所述的一种基于Unity3D的App开发框架,其特征在于:
所述ICmd接口,为命令接口,用于实现该接口的类注入到所述MCmd模块中,实现调用相关***的方法;
所述ISystem接口,为***接口,用于实现该接口的类注入到所述MSystem模块中,实现改变实体Entity或者实体组件Component的相关数据;
所述IEntity,为实体接口,内置Entity类实现该接口,持有各实体的基础数据;所述基础数据包括实体的空间位置数据、方向数据和缩放数据;
所述IComponent接口,为实体组件接口,该接口持有各实体组件各功能的数据,用于派发事件以及改变事件;
所述IActor接口,为演员接口,内置Actor类实现该接口,用于监听IEntity数据变化;
所述IActorComponent接口,为演员组件接口,用于实现演员的显示和交互逻辑;
所述IUI接口,为界面接口,用于实现界面的交互逻辑及数据更新;
所述IEntityFacory接口,为实体工厂接口,用于组装实体对象的实体组件;
所述IConn接口,为长连接接口,用于处理消息包的粘包和分包、编码和解码、加密和解密。
5.如权利要求1所述的一种基于Unity3D的App开发框架,其特征在于:所述自定义模块还包括:
对象池模块MPool:用于按类型或标签注册对象池,使对象实例可复用,减少***垃圾回收消耗;
日志模块MLog:用于将日志分为5个等级,分别为:Debug、Info、Warn、Error和Fatal;
计时器模块MTimer:用于传入计时时长,重复次数以及触发回调,简化传统基于Unity3D引擎内置的Time.detalTime计时。
6.如权利要求1所述的一种基于Unity3D的App开发框架,其特征在于:所述自定义模块还包括:
消息模块MNotice:用于注入指定消息名的回调函数,当派发消息时,将数据传入所有注册该消息的回调函数;
全局数据模块MData:用于管理应用开发中的全局数据;
版本更新模块MVer:用于校验本地资源和服务端资源版本,并对本地资源进行增量更新,无需重新下载整个程序。
7.如权利要求1所述的一种基于Unity3D的App开发框架,其特征在于:所述自定义模块还包括:
断点续传模块MResume:用于从服务器下载文件;;
场景模块MScene:用于管理Unity3D中的场景文件的加载或者卸载,绑定场景组件到场景中的游戏对象;
音频模块MAudio:用于封装Unity3D的音频播放,设置音频监听对象,播放音源,设置音频混合器级设置快照;
语言本地化模块MI18N:用于通过配置文件中的本地化语言配置;
命令记录模块MRecorder:用于记录命令的执行顺序和时间,可以撤销或者重做命令,将命令序列化重现用户的操作。
8.如权利要求1所述的一种基于Unity3D的App开发框架,其特征在于:所述自定义模块还包括:
实体组件模块MComponent:用于管理所有的实体组件,并使用对象池创建或者回收实体组件;
演员模块MActor:用于注入演员工厂类,管理三维显示对象,并通过工厂类组装或者卸载显示对象的演员组件ActorComponent;所述演员工厂类为实现IActorFactory接口的类;所述演员组件ActorComponent为实现IActorComponent 接口的类,包含美术资源模型的显示、用户交互处理、物理属性、注册实体组件的数据变化事件的更新显示;
演员组件模块MActorComponent:用于管理所有演员组件。
9.如权利要求8所述的一种基于Unity3D的App开发框架,其特征在于:所述IActorFactory接口,为演员工厂接口,用于根据实体对象以及实体组将组装演员组件。
CN201911094330.0A 2019-11-11 2019-11-11 一种基于Unity3D的App开发框架 Active CN111026365B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911094330.0A CN111026365B (zh) 2019-11-11 2019-11-11 一种基于Unity3D的App开发框架

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911094330.0A CN111026365B (zh) 2019-11-11 2019-11-11 一种基于Unity3D的App开发框架

Publications (2)

Publication Number Publication Date
CN111026365A true CN111026365A (zh) 2020-04-17
CN111026365B CN111026365B (zh) 2023-04-07

Family

ID=70205357

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911094330.0A Active CN111026365B (zh) 2019-11-11 2019-11-11 一种基于Unity3D的App开发框架

Country Status (1)

Country Link
CN (1) CN111026365B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116954951A (zh) * 2023-09-18 2023-10-27 成都数之联科技股份有限公司 一种基于unity的撤销与重做的方法及***

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050091672A1 (en) * 2003-10-24 2005-04-28 Microsoft Corporation Facilitating presentation functionality through a programming interface media namespace
US20050278708A1 (en) * 2004-06-15 2005-12-15 Dong Zhao Event management framework for network management application development
CN102855142A (zh) * 2012-09-24 2013-01-02 广东华大集成技术有限责任公司 一种基于ria的客户端框架结构及其实现方法
CN103607653A (zh) * 2013-11-08 2014-02-26 四川长虹电器股份有限公司 基于3d模型开发电视天气动态壁纸的方法
WO2017041655A1 (zh) * 2015-09-09 2017-03-16 阿里巴巴集团控股有限公司 即时消息的提醒方法和装置
CN109493420A (zh) * 2018-11-16 2019-03-19 北京华电天仁电力控制技术有限公司 一种基于Unity3D的电厂三维可视化展示方法
CN109598001A (zh) * 2017-09-30 2019-04-09 阿里巴巴集团控股有限公司 一种信息显示方法、装置及设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050091672A1 (en) * 2003-10-24 2005-04-28 Microsoft Corporation Facilitating presentation functionality through a programming interface media namespace
US20050278708A1 (en) * 2004-06-15 2005-12-15 Dong Zhao Event management framework for network management application development
CN102855142A (zh) * 2012-09-24 2013-01-02 广东华大集成技术有限责任公司 一种基于ria的客户端框架结构及其实现方法
CN103607653A (zh) * 2013-11-08 2014-02-26 四川长虹电器股份有限公司 基于3d模型开发电视天气动态壁纸的方法
WO2017041655A1 (zh) * 2015-09-09 2017-03-16 阿里巴巴集团控股有限公司 即时消息的提醒方法和装置
CN109598001A (zh) * 2017-09-30 2019-04-09 阿里巴巴集团控股有限公司 一种信息显示方法、装置及设备
CN109493420A (zh) * 2018-11-16 2019-03-19 北京华电天仁电力控制技术有限公司 一种基于Unity3D的电厂三维可视化展示方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116954951A (zh) * 2023-09-18 2023-10-27 成都数之联科技股份有限公司 一种基于unity的撤销与重做的方法及***
CN116954951B (zh) * 2023-09-18 2023-11-21 成都数之联科技股份有限公司 一种基于unity的撤销与重做的方法及***

Also Published As

Publication number Publication date
CN111026365B (zh) 2023-04-07

Similar Documents

Publication Publication Date Title
US7653896B2 (en) Smart UI recording and playback framework
US9286040B2 (en) Software builder
CA2604896C (en) System and method of data source detection
CN109800135B (zh) 一种信息处理方法及终端
US20120284686A1 (en) System and method for mobile application development
CN106933729A (zh) 一种基于云平台的测试方法和***
CN108958708A (zh) 一种基于组件的软件***架构及软件实现方法
CN102999419B (zh) 一种Android测试事件记录回放方法及装置
CN111400170B (zh) 一种数据权限测试方法及装置
CN107608663A (zh) 一种移动应用插件及移动应用的开发方法及装置
CN107133160B (zh) 服务器和客户端
CN113094028A (zh) 一种Windows桌面程序开发框架、方法及相关组件
CN111026365B (zh) 一种基于Unity3D的App开发框架
CN109284222B (zh) 软件单元、数据处理***中的项目测试方法、装置及设备
CN112506793A (zh) 嵌入式软件单元测试方法、***、可读介质及电子设备
US6980916B1 (en) Mechanism for graphical test exclusion
CN112241373A (zh) 自动化测试方法、测试装置、处理器和测试***
CN114721647B (zh) 一种基于无代码应用开发的面向对象编程方法
CN115951970A (zh) 一种异构多仿真软件集成开发环境
CN115098082A (zh) 基于Jenkins插件的流水线脚本生成方法、***、设备及介质
CN115061706A (zh) 一种Vue3组件状态管理方法、装置、设备及介质
CN114706738A (zh) 客户端自动埋点的方法及装置
CN111880775A (zh) 多模块分层架构实现方法、装置、电子设备、存储介质
Le Goaer et al. Android executable modeling: Beyond android programming
CN114063998A (zh) 一种Web端模块化开发方法和***,及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant