Unity技术-GameFramework-官方案例解析-上

4,932 阅读3分钟

「这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)

欢迎关注公众号【空名先生】获取更多资源和交流!

👉前提

学习框架查看官方的文档或案例是很快的学习方式。

咱们刚刚学习了Game Framework框架,没有个案例怎么能行呢;虽然官方就有个完成的案例,但是吧,作者大佬经常“鸽”,没有什么官方教程。

不过没关系我们就来一起看看

👉实践过程

😜下载项目

在本地创建个文件夹,利用git下载项目(推荐)

git clone gitee.com/jiangyin/St…

使用Unity打开工程,我的是Unity2019.4.9f1版本,打开可能有点慢,不急,等一等。

image.png

进去后运行StarForce Launcher,即可开始游戏。(可能出现不同Unity版本打开的时候脚本里面的API或者什么有报错,自己对应修改下就行了)

image.png

😜寻找入口

任何一款游戏入口是第一印象,程序入口是开发的切入口。案例的入口找起来也很快,有个StarForce Launcher的场景,点进去发现只有个Game Framework的物体,挂载着【GameEntry】脚本,拿这个脚本必定是入口了,点进去看看。

image.png 发现里面只有两个函数方法;这么简单?点进去看看;

private static void InitBuiltinComponents()
{
    Base = UnityGameFramework.Runtime.GameEntry.GetComponent<BaseComponent>();
    Config = UnityGameFramework.Runtime.GameEntry.GetComponent<ConfigComponent>();
    DataNode = UnityGameFramework.Runtime.GameEntry.GetComponent<DataNodeComponent>();
    DataTable = UnityGameFramework.Runtime.GameEntry.GetComponent<DataTableComponent>();
    Debugger = UnityGameFramework.Runtime.GameEntry.GetComponent<DebuggerComponent>();
    Download = UnityGameFramework.Runtime.GameEntry.GetComponent<DownloadComponent>();
    Entity = UnityGameFramework.Runtime.GameEntry.GetComponent<EntityComponent>();
    Event = UnityGameFramework.Runtime.GameEntry.GetComponent<EventComponent>();
    FileSystem = UnityGameFramework.Runtime.GameEntry.GetComponent<FileSystemComponent>();
    Fsm = UnityGameFramework.Runtime.GameEntry.GetComponent<FsmComponent>();
    Localization =  UnityGameFramework.Runtime.GameEntry.GetComponent<LocalizationComponent>();
    Network = UnityGameFramework.Runtime.GameEntry.GetComponent<NetworkComponent>();
    ObjectPool = UnityGameFramework.Runtime.GameEntry.GetComponent<ObjectPoolComponent>();
    Procedure = UnityGameFramework.Runtime.GameEntry.GetComponent<ProcedureComponent>();
    Resource = UnityGameFramework.Runtime.GameEntry.GetComponent<ResourceComponent>();
    Scene = UnityGameFramework.Runtime.GameEntry.GetComponent<SceneComponent>();
    Setting = UnityGameFramework.Runtime.GameEntry.GetComponent<SettingComponent>();
    Sound = UnityGameFramework.Runtime.GameEntry.GetComponent<SoundComponent>();
    UI = UnityGameFramework.Runtime.GameEntry.GetComponent<UIComponent>();
    WebRequest = UnityGameFramework.Runtime.GameEntry.GetComponent<WebRequestComponent>();
}

InitBuiltinComponents()-光看名字就知道初始化内置组件,另一个就是初始化自定义的组件了。

等等,好像哪里不对!怎么感觉是不同的文件?

image.png

GameEntry竟然有三个类,我哩个去,挺6的啊。仔细看,原来是partial class作祟。

partial class是部分类关键字,什么是部分类?就是将一个类的代码根据不同的内容逻辑划分开,然后写在不同的文件中,这样有利于多位开发人员同时对该类处理,既增强可读性又实用。而且命名的时候最好也规范化,比如主部分类文件名为AClass,次部分类就为AClass.PartName。

image.png

Partial 关键字还有几点注意

  • 1.所有部分类都要使用partial关键字
  • 2.各个部分访问权限要一致,是public就都是public,是其他的就都是其他的
  • 3.其中任意一个声明抽象类型,整个类型都会是抽象的
  • 4.她们内部的任何类,结构等是可以相互使用的

👉其他

📢作者:小空和小芝中的小空

📢转载说明-务必注明来源:芝麻粒儿 的个人主页 - 专栏 - 掘金 (juejin.cn)

📢欢迎点赞👍收藏🌟留言📝