- 博客(55)
- 收藏
- 关注
原创 Unity DOTS纯ECS写一个类似UGUI的EventSystem(实现IPointerDownHandler/IPointerUpHandler/IBeginDragHandler等)
UGUI的EventSystem的纯ECS实现
2023-07-10 16:49:15
378
原创 Unity DOTS纯ECS的UI分辨率适配(写一个ECS的CanvasScaler)
UnityECS UI分辨率适配组件CanvasScaler
2023-05-09 23:58:09
839
原创 Unity Entities在IComponentData中保存回调函数
Unity Entities在ECS组件IComponentData中保存回调函数
2023-01-08 00:29:59
328
原创 Unity ProjectTiny在ECS运行时改变Mesh的UV来显示纹理
还有Tiny运行时无法动态加载Material,也无法像GameObject那样将Material转成预制体引用起来(至少目前没看到类似的用法),所以只能在场景中建一个球体,挂上要用到的材质,然后在运行过程中创建好DynamicMesh后,把球体的材质赋值给DynamicMesh。这篇的主要效果就是动态创建一个UnlitMesh,然后给它赋值一个带纹理的材质,再动态改变Mesh的UV,从而显示纹理上的不同部分。代码有点多,还有用Unity的ECS写代码容易出错,可能稍微改点代码就运行不起来了,这个要注意。
2022-10-30 21:08:11
692
原创 Unity ProjectTiny在纯ECS运行时动态创建Mesh
在MonoBehavior里创建一个Quad只需要两三行代码,在ECS里创建一个最简单的Quad Mesh,代码都要多好几倍。拷贝上面的代码,丢到官方那个Tiny3D工程目录里,删掉多余的代码和场景里的模型,设置好相机的位置,打包Web并运行就可以看到一个红色方块在旋转了。可以根据鼠标路径来创建网格路线,不过里边代码比较多,看起来有点麻烦。通过创建一个最简单的Quad,更方便了解其中的原理。ProjectTiny包是一个纯DOTS环境,可以在Unity里体验下完全用ECS来写代码的感觉。
2022-10-22 23:54:57
1162
原创 JavaScript保留小数不四舍五入(不丢失精度)
JS自带的toFixed()会自动四舍五入.这里记录一个简洁的方法.const fractionDigits = 2; // 保留几位小数const value = 1.4578;// const result = value.toFixed(); // 1.46// 下面的结果是1.45,关键点就是左移0位,这个操作会把小数部分截取掉const result = (value * (10 ** fractionDigits)) << 0) / (10 ** fractionDig
2022-03-09 22:38:54
5318
原创 Unity中使用状态机控制角色行为
接着上一篇说的随谈过去的2019,这篇专门记录下FSM的使用和别人写的一个具体实现。其实很多普遍功能,网上一搜一般都可以找到具体实现,而且有很多重复的文章。我平时要了解学习某个功能,一般都会看多篇文章,而不是只看一篇,以此了解下不同人的想法。我这里再写一篇,只是让自己重新梳理一下流程,留个记录,以后忘了时可以直接看自己当时的想法。Demo里我使用了别人实现的SuperStateMachine和...
2020-04-05 02:52:04
2081
原创 LayaBox开发过程中遇到的一些小问题以及解决思路
常用的功能和常见问题,一般官方文档或网上可以直接搜到,但仍有一些问题,官方文档里是没提到的,然后网上搜到同样问题的帖子,却没人回答。作为一个开源免费的引擎,不是每个问题,官方都能准时解答的,甚至你发个帖子,很长一段时间都没有一个答案,这时只能自己慢慢摸索一下了。这里我就把自己遇到的一些小问题及解决思路记录下来,希望对那些遇到同样问题的人有帮助。这些问题并不大,却有点烦人,你明知道实现某个功能可能就...
2019-03-31 01:36:45
5713
原创 [理解实践PureMVC框架]4-给MVC三层提供统一接口的Facade层的具体实现
设计模式中的外观模式的作用是给一些子模块封装方法,它本身不实现额外的功能。通过外观类的封装,使得外界调用接口的时候不必清楚各个子模块的实现细节,只需知道调用哪个方法就可以了。当然,有了外观类,也是可以直接调用子模块中的方法的。PureMVC中的外观类也是一个单例。一般一个工程中只需你自己继承该Facade类并实现自己的一个外观类就可以了,并不需要实现多个。下面就看下ooc-lang的代码:/...
2019-02-27 11:16:23
625
原创 [理解实践PureMVC框架]3-MVC三个核心层的具体实现
上一节将这三个核心层需要的类都实现了,这节就讲下Model、View、Controller这三层的具体实现。这三个层都用到了单例模式。Model层:我们并不需要在这个层里保存任何数据,所有数据都是通过代理来获取操作的,这个层只需要保存所有代理的引用就可以了。具体的数据类型可以用另外的类来声明,然后将这个数据保存到代理中。该层提供方法注册、获取、移除代理。/* * Model.ooc * ...
2019-02-22 20:21:10
544
原创 [理解实践PureMVC框架]2-命令、通知、观察者、代理、中介类的具体实现
这接讲下这几个类的实现,这里先不讲外观类,我决定把MVC这三层讲完再讲外观类,因为MVC这三层的实现需要这几个类,而外观类的实现又涉及到MVC这三层。虽然代码的逻辑是跟官方的一样的,比如类名和方法名是完全一样的,但是如果你用另一门语言去实现的话,还是会遇到一些问题需要解决的,这是因为不同语言间的特性还是有点区别的。有些东西,并不是你觉得会了,实现起来就如你想的那般,只有亲自实践了,才能体会到其中...
2019-02-22 16:34:12
421
原创 [理解实践PureMVC框架]1-框架简介及框架各个模块中的接口声明
框架的使用,无非就是为了代码的重用和解耦,使得工程易于理解、维护或重构等。那PureMVC这个框架是如何达到这些目的的呢?我就以自己的理解简单讲下。我的理解肯定是学习了解别人的介绍后自己做出的总结,别人的介绍可能又是学习别人的理解来的。因此,我的理解可能和别人的差不多,然后会有点点自己的总结在里边。当然,我会在理解后,自己设计一些例子或写个代码进行演示,这样更助于理解。其实学习了解别人的理解并...
2019-02-19 15:39:54
472
原创 [ooc-lang]协程的使用及一些要点
这节记录一下ooc-lang中协程的使用。协程是在线程中执行的,所以它不是并发执行的,而是非抢占式执行的,因此不用考虑多线程中内存共享和锁的问题。线程中代码的执行是顺序的,协程是在线程中执行的,所以在执行一个协程的时候,其它地方的代码是不会执行的,除非协程执行完毕了或协程主动让出执行权限。通俗地讲,协程就是执行一个函数,当然它是以一种比较特殊的方式执行的。我们把相关的功能封装到一个函数中,这...
2019-02-18 21:57:47
358
原创 [理解实践PureMVC框架]0-前言
前几天我用ooc-lang实现了一遍PureMVC这个框架,如果你还不清楚它可以用来做什么,可以先搜索了解下。这是它的官网,它是开源的,你可以在github上看到它的多种语言实现的源码。但是没有ooc-lang的,因为ooc-lang太冷门了,如果你也不清楚ooc-lang是什么,可以看下我这篇文章的简介:[ooc-lang]一门冷门的面向对象编程的语言使用小结。去年年末的时候我接触到了Pure...
2019-02-17 16:15:59
258
原创 [ooc-lang]一门冷门的面向对象编程的语言使用小结
冷门语言有很多,这门语言是我偶然间发现的,它叫ooc-lang,简称OOC,是我在用gedit时在它的格式列表里看到的,如果你百度一下肯定搜不到,甚至只是找到一些文章在描述如何用C语言来面向对象编程。当然,谷歌一下,第一条就是它的官网了(访问不需要梯子)。它实在是太冷门了,连谷歌都搜不到太多关于它的文章,还好它的官网文档挺全的。国内应该没有人用它吧,几乎没有一篇博客介绍它的。我这里提起它,并不...
2019-02-17 01:42:31
588
原创 通过全局事件的“注册/派发”机制降低模块间的耦合度
按我个人的理解,“事件”在游戏中就是对象的行为,比如主角会有使用道具的行为、炸弹会有爆炸的行为、敌人可以有被攻击的行为,执行这些行为就是触发了事件,触发了一个事件,必定会导致一个结果,例如玩家点击道具按钮(这是一个事件),触发了主角使用炸弹的事件(由前一个事件触发后导致的结果,同时它也是一个被触发的事件),使用炸弹事件触发了炸弹的爆炸事件,炸弹的爆炸事件触发了敌人被攻击事件。这一系列的事件,被程序...
2018-12-07 00:37:52
420
原创 小游戏加载速度的优化
如果你正在从事小游戏开发的工作,标题里提到的这项技能我觉得是要必备的。有句话我觉得说的很正确“H5游戏的优势就是即点即玩,如果这点都做不到,就没什么优势了。”虽然这项技术没什么难点,但是对于初创公司,还不太规范的时候,可能根本就不会去注意这件事。那些规范起来后的公司肯定会有这要求的。这里说点题外话,H5游戏和小游戏区别不大,只是小游戏的开发和发布可能会有点限制。小游戏的即点即玩,并不是真的不用下...
2018-12-01 17:31:28
1868
1
原创 SDL实现九宫格纹理绘制,使其不变形
九宫格绘制的纹理适用于UI以及那些宽高需要通过不同比例缩放的图片资源。为了节省空间,一般的UI资源都是根据原型制作一个尽可能小的图片,然后根据需要将该图片放大。如果不用九宫格缩放,而是用普通缩放,直接将纹理填充到实际需要的大小,就会出现形变,如下图所示:...
2018-10-30 01:18:00
696
原创 Quake1和2的pak资源文件格式说明
Quake1和Quake2的源码都已经公开了,Github上可找到。源码里边肯定有对pak文件解析的代码,不过我从这里paklib找到一个别人独立出来的一个库,代码不多,我看了下,然后把一些东西记录下。...
2018-10-04 15:30:13
2415
原创 [sdlpal]键盘输入控制模块
每个游戏应该都有输入控制的吧,像移动端的触摸输入、PC端的键鼠输入、掌机端的手柄输入等。如果没有输入控制,怎么和游戏场景进行交互,没有交互,又怎么能叫玩游戏?(可能生活中很多人都是被游戏&amp;amp;amp;amp;quot;玩&amp;amp;amp;amp;quot;过来的,游戏这么好玩,老少通吃…)。废话就少扯了。最近看了下sdlpal中的输入模块,在input.h/input.c里边。SDL是跨平台的,当然sdlpal也是跨平台的,可编译到手机、电脑和NDS游
2018-09-19 00:39:39
1467
原创 Socket编程,简单实现一台机器向另一台机器发消息
网上一搜,就可以看到一大堆的Socket编程介绍,一般是写个简单的服务端和客户端进行连接并做简单的交互。我这里又要多一篇这样的文章了,并不是故意的,而是有意的:D.当然不是直接复制粘贴,而是学习了解后亲自实践下来体会体会。之前做了个五子棋,要可以两个人对战的。如果是单机的话,两个人对战或人机对战,都是在一个客户端上进行的,你只需要考虑在一个客户端上的情况就行了。如果你写了一个客户端,同时安装在...
2018-08-14 00:22:26
3543
原创 利用SDL绘制点阵字
看sdlpal源码的时候,想了解下游戏界面上那些像素字是如何绘制显示的,于是就去了解了下点阵字。虽然有SDL_ttf这个库,你只需要找个字体文件,然后调用库提供的API就可以在屏幕上显示字体了。但是如果游戏只是显示下简单的像素字的话,加个SDL_ttf库就显得臃肿了。不管怎样,多深入了解下又不是坏事,你还是可以使用更简单方便的字体库来显示字体。 关于点阵字的一些介绍就不细讲了,网上一搜一大把。我......
2018-08-11 15:45:26
989
原创 [sdlpal]游戏开始界面文字的绘制
上一篇简单讲了下开始界面背景图的绘制过程,当然具体的代码细节没完全理解清楚,但是整体思路是那样没错。我又看了下文字的绘制,所以这节就是讲文字的绘制思路了,由于文字的绘制更繁琐,代码更多,就不像上节那样把代码贴出来讲了,也是简单讲下(可能比上一节还简单…)思路,具体代码细节我也没全看懂。日后能花时间看懂就最好了。 进入主题前,我先讲下文字的概念,当然只是个人的理解。在屏幕上显示的文字和在屏幕上显示...
2018-08-11 14:36:15
1463
原创 [sdlpal]游戏开始界面背景图的显示
继续看了下sdlpal的源码,这节讲下代码是如何从资源文件中读取所需图片并显示到屏幕上的。 下面这张就是开始界面了,当然除了背景图外还有菜单,菜单里的两个选项其实就是绘制的两行文字(一般的菜单除了文字还会有菜单背景图的,这里没有,只是简单的文字), 菜单的原理就另外章节讲了,这里只讲下图片资源的加载和显示。 ‘图片稍后补上’一路跟踪,发现背景是在这里绘制的:mian()-&amp;amp;amp;amp;amp;amp;amp;amp;gt;PAL...
2018-07-16 00:07:24
1944
原创 用一个 int 来描述位置信息
一般的,游戏场景中对象的位置信息都是用两个 int 来描述,像这样:struct _Pos { int x; // x轴坐标 int y; // y轴坐标} Pos;使用的时候这样:// 定义一个坐标Pos pos = {10, 10};// 获取x轴坐标int x = pos.x;// 获取y轴坐标int y = pos.y;然后我看到sdlpal...
2018-07-14 21:39:18
513
翻译 [Deterministic Skip Lists]1-2型确定性跳跃表
Skip list最初由William Pugh提出,它是靠类似抛硬币的方式决定每个元素的层数,因此结果是随机的,它有概率(很小,但存在)出现最坏情况使得查找的时间复杂度退化为O(n),最好的情况下是O(lgn)。随机的方式虽然有这种情况出现,但是它简单,不用人为的手段来平衡。因此,为了避免最坏的情况出现,有人在原来的基础上进行了改进,利用人为的手段来使得任何情况下整个跳跃表都出于相对平衡的状态。...
2018-06-08 23:26:36
1370
原创 [stretchy_buffer.h]一个简单的类C++ vector 数组的源码阅读
stretchy_buffer.h源码就只有几个宏和一个函数。作者也在里边进行了一些说明和使用介绍,是英文的,而且没有具体的实现原理。当然,老鸟一看就懂了,我是菜鸟,一看再看才懂的。这里我把自己看后的理解记录下来,如果有人正好需要的话,希望能有帮助。一般的,数组在声明的时候,它的大小就已经确定了,所能存储的元素个数不能大于数组的大小。就算我们可以在堆空间中申请任意(这里的任意是指合理的情况...
2018-06-05 00:03:26
479
原创 [Elementary-Algorithms/5]插入排序的进化
这节作者讲了最简单的排序算法-插入排序,以及排序算法的改进。也分改进一、改进二和最终改进,但是由于整节都比较简单,就记录在一篇文章中,不分开记录了。代码中涉及到简单的递归、二分查找、链表和上节学的二叉搜索树。作者细讲的内容就不贴出来了,主要是把写的代码贴出来讲下。其中两个头文件可在这看到wtlSet.h/wtlBSTree.h。/* * File: wtlInsertionSort....
2018-05-22 00:06:00
246
原创 [Elementary-Algorithms/4]二叉搜索树
一般讲数据结构和算法的书都是先讲链表的,还好这次看的书的作者没有从链表开始,之前学数据结构就是学了链表,后面的树就没看下去了:)这次终于开始接触树这种数据结构。二叉搜索树是最简单的树结构,学完后感觉并没有比链表难理解多少。 本节主要记录下对二叉搜索树的创建、插入、删除、查找、遍历、前驱后继等操作的理解。具体的二叉搜索树定义和那些操作的定义看原书就行了,作者讲的很清楚。原书的电子版在此系列的第一篇...
2018-05-21 00:23:30
223
原创 Orx引擎中单链表实现的一个小技巧
猿并不一定实现过单链表,但学过数据结构的猿一定实现过单链表。一般的,链表的结构定义是这样的简陋版链表,自己实现的,仅供参考,更专业版的可以看glib库或Linux内核里的。但是,Orx的作者实现的单链表就有点另类了,可以看这位博主写的介绍链接。这里就不重复内容了,只是写个例子体验下该技巧:/* wtl_test.c */#include <stdio.h>#include ...
2018-05-06 17:09:12
285
原创 几个线性数据结构的简单实现-list/set/queue
学《elementary-algorithms》的PART 1需要用到,所以就自己简单实现了一下,用的是C语言,数据结构的操作也不全,只是实现了需要用到的部分。代码风格借鉴了之前学过的一个开源2D引擎-Orx Engine,前缀wtl是字母WangTaL的缩写,是廖望塔的意思。代码在codeblocks17下编译通过,gcc7编译不过。list.h单链表的头文件#ifndef _LIS...
2018-05-01 00:35:21
321
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人