ET篇:基于FGUI的小地图制作
前言 小地图开发对于我们来说是再常见不过的需求了,单用Unity中的UGUI来说倒也方便,但是用FGUI又如何呢? 正式开始 FGUI资源的搭建 注意小地图图片要用装载器来包装,不然他将会是不可触摸的,小地图宽高我们设置为200,大地图我们设置大小为100 然后导出到Unity FGUI坐标系统 http://www.fairygui.com/guide/unity/transform.html 小地图到大地图的坐标映射 落实到代码就是 12345678910111213141516 public override void Start(FUI5V5Map self) {//为小地图图片添加点击事件 self.SmallMapSprite.onRightClick.Add(this.AnyEventHandler); } void AnyEventHandler(EventContext context) { //Log.Info("点击了小地图"); ...
ET篇:master客户端初始化流程的介绍
要学习一个Demo,不能漫无目的的乱看,看到哪是哪,要有条理,我习惯于从程序入口开始 进入Init场景 发现貌似只有一个Init脚本发挥着作用 那我们就进入Init脚本 这个便是入口了,他调用了StartAsync()函数,至于为什么后面加上Coroutine()(Coroutine是个空函数,并没有什么具体的作用) 熊猫大大说是为了防止这种情况(好吧。。。) ** 接下来我一步一步的解读Init函数里面的语句** 12 //把所有的异步回调都放到主线程执行SynchronizationContext.SetSynchronizationContext(OneThreadSynchronizationContext.Instance); 这个如果不理解的,应该去看看我前面的ETBook笔记 1234 //使当前游戏物体不会被销毁DontDestroyOnLoad(gameObject);//添加ETModel.dll,并解析维护当中的特性Game.EventSystem.Add(DLLType.Model, typeof(Init).Assembly); 第一句没什么好说的...
ET篇:master服务端初始化流程的介绍
讲过master客户端的框架初始化,再来说一下服务端的初始化流程吧,因为很多客户端代码在服务端是通用的,所以理解起来也不算困难,就像这样 先来到程序入口 然后就是框架的初始化了(因为很多细节在客户端那篇讲过了,所以就不在这赘述了,内部实现是一样的) 12345678910111213 //添加Model.dll到字典维护Game.EventSystem.Add(DLLType.Model, typeof(Game).Assembly);//添加Hotfix.dll到字典维护Game.EventSystem.Add(DLLType.Hotfix, DllHelper.GetHotfixAssembly());//添加并获取设置组件的引用Options options = Game.Scene.AddComponent<OptionComponent, string[]>(args).Options;//添加并获取初始配置的组件的引用StartConfig startConfig = Game.Scene.AddComponent<StartConfigComp...
ET篇:master消息机制介绍
终于到了核心部分之一了——消息机制 一般消息的流转 既然讲到消息,我们要到消息的源头——客户端 来到Unity.Hotfix的Init文件,并定位到这一句 1Game.EventSystem.Run(EventIdType.InitSceneStart); 他会执行这里的Run代码(不知道为何的去复习ETBook的EventSystem哦) 进入UILoginFactory,他是登录UI的工厂类,在这个工厂将完成一系列的操作 123456789101112 //获取资源组件,用以加载资源ResourcesComponent resourcesComponent = ETModel.Game.Scene.GetComponent<ResourcesComponent>();//加载UI的AB包resourcesComponent.LoadBundle(UIType.UILogin.StringToAB());//获取到登录UIGameObject bundleGameObject = (GameObject)resourcesComponent.GetAsset(UI...
ET篇:master项目结构梳理
我发现先把项目结构做个梳理有利于后面的学习,所以就整理了这篇笔记 由于我能力有限,可能有些地方理解的不对,恳请各路大大指正,感激不尽 使用Rider编译器打开项目,并把项目视图调整为Solution 下面是更加详细的部分 1.Book 没看过ET Book的小伙伴应该去看看,写的非常好,这些是示例代码,不在本篇笔记范围内 2.Client ET客户端代码 Unity.Editor 里面是ET客户端所有的编辑器拓展工具,以后开发的时候我们会经常用到 AstarPathfindingProject:A*插件的编辑器拓展 BuildEditor:一键打包工具 ComponentViewEditor:Component可视化工具 ExcelExporterEditor:Excel导表工具 GlobalConfigEditor:全局配置工具 Helper:编辑器拓展工具中常用的辅助函数 ILRuntimeHelper:ILRuntime一键绑定代码 Protoc2CSEditor:从protoc一键生成cs代码 ReferenceCollectorEditor:引用收集工具 Rsyn...
ET篇:运行master的Demo
环境: Rider 2018.3.0 ET Master branch Unity 2018.3.1f1 源码下载 建议大家使用master https://github.com/egametang/ET.git 环境配置 下载.NET Core2.2和.NET Framework 4.7.2 https://dotnet.microsoft.com/download 其实这个也不是绝对的,主要是ET更新的很快,并且也经常用到新的语法糖,所以大家见机行事~ 好了,基本的环境配置和准备工作已经做好了,可以运行Demo了 运行Demo 这时候打开 启动 然后回到Unity,运行场景 随便输入账号密码,进入游戏,然后就看到这个寻路Demo了 ET的教程先告一段落,过阵子我会和大家一起学习 (绝对不鸽!!!)
2019年度总结
提前总结 梦想,依旧是那个梦想,以前觉得梦想很远,现在努力了那么久,感觉还是很远,哈哈,不然怎么叫梦想呢。 回想 我的2019年感觉过的很快,仿佛昨天才是去年的寒假。但是我书桌上那些新增的书籍和新增的几百把LOL比赛记录告诉我确确实实又老了一岁。 去年的寒假我经常在寒冷的夜里写代码,看框架。为什么要说是寒冷的夜里呢,因为开了空调我还是膝盖以下冰凉,别问,问就是撸多了肾虚。 其实2019的很多事情都已经想不起来了,但是一定是不重要的事情,重要的东西我肯定不会忘。 能回想起的最早的源头就是我这个网站备案号批下来开始。。。 二月 然后2月份回到学校继续帮别人做游戏。这件事的完整经过详情可以去我的大学历程(未完待续)查看。 对了,二月份回到学校后我还把玩了两年的台式电脑给卖了。(专门又重新下载的二手平台才找到的这张图) 然后买了一个二手笔记本,因为我深刻体会到了假期在家玩不了游戏(划掉,是不能顺畅的学习)的痛苦。 三月,四月 一直做到3,4月份左右,我感觉有点不对劲了,因为在开发的过程中我感觉到自己还有很多东西不会,还有更多东西需要学,而大学时光恰恰就是学习的最好时光,所以我和合作伙伴...
Box2D篇:碰撞关系可视化编辑器
前言 我们在游戏中难免会有碰撞检测然后进行处理这一需求,那么,错综复杂的碰撞关系无疑就成了一大设计难点,规模和数量少点还好说,直接写在代码即可,规模一大,就需要借助excel的帮助下,但是也免不了使用true/false作为标识,在修改,拓展的时候麻烦,在读取数据的时候会造成不必要的空间浪费。(我明明没可能和这个东西碰撞,为什么还要单独给他一个bool字段呢?)。所以我就想着,能不能做个东西,稍微缓解一下这个问题,于是就有了今天这篇文章。 相关知识点 Node_Editor_Framework,开源地址:https://github.com/Seneral/Node_Editor_Framework Odin相关特性 Bson序列化反序列化数据 正文 先放一张编辑器图片 这就是使用了Node_Editor_Framework的编辑器,我们可以看到,在里面对不同的碰撞体进行了分组(分类)操作,然后根据需求进行连线即可。 至于数据的处理,我提供了很多一键傻瓜式按钮,只需要点一下就行。 创建数据 首先是Create Group,此操作将会创建一个Group,所有在此Group中...
C#篇:对字典引用内容的探究
前言 我现在在做的项目有这样一个需求,从二进制文件反序列化出一个类(HeroDataRes),这个类里包含一个英雄的所有基本信息,然后服务端缓存这个类,等到玩家第一次请求的时候就新建一个运行时HeroDataRT类,并将数据传输过去,由于项目采用的状态同步策略,所以服务端需要持有每个玩家操控的英雄基本信息。基本关系就是这样 那么现在就要面临一个问题,HeroDataRT是从HeroDataRes取得的数据,而HeroDataRes里面难免会有class,我们都知道,字典本身是引用类型的,那么修改HeroDataRT类中的数据会不会对HeroDataRes里面的数据产生影响呢? 例子 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950using System;using System.Collections.Generic;namespace ConsoleApp1{ class Program { st...
Box2D篇:在Unity开发Box2D可视化编辑器拓展
前言 我们需要把Box2D的碰撞体数据导入到服务端,然后让服务端读取这些数据,重建2D物理世界。那么,这些碰撞数据从哪来,怎么做的呢? Box2D官方手册里有提到两个比较出名的编辑器。 PhysicsEditor和RUBE 这两个编辑器都很出色,但是他们都有一个共同的痛点——编辑的碰撞体对于Unity不是所见即所得的。 还有比较特殊的应用场景,比如做Moba这种伪3D游戏,物理世界完全是可以用Box2D做的,但是,游戏里许多模型都是3D的,而PhysicsEditor和RUBE都只支持导入图片,所以也不妥当。 在仔细研究了官方文档后对比Unity自带的2D物理系统有很多共同点,我就想能不能借助Unity自身物理系统的力量做一个Box2D编辑器呢,这样可以所见即所得。 其实硬要说技术含量的话,在Odin的帮助下,这个可视化编辑器还真没啥技术含量。所以我在这主要说一下思路和历程,希望能对大家以后解决类似问题有帮助。文中代码尽量采用伪代码的形式,方便大家理解。 正文 先放出一张UML图,方便大家理解下面的代码 涉及到的相关知识点 - 编辑器拓展插件:Odin - 序列化反序列化:Bs...