记录:《Code:Hope》第一阶段完美结束~~
很久没有写流水账式日记了,昨天终于做完了游戏的场景,写下日记,也算是纪念一下,从今年2月底,到现在的点点滴滴,以及我的开发历程了,与经验了。 回首整个提交记录,点点滴滴,历历在目,很有成就感。 我是一个很讲究排期与时间的人,因为以前就有经历过项目不断重构,推翻,管理不合理而导致项目直接没了的事情,所以我很忌讳重构,推翻,以及不合理的安排。 (五月份回了趟家,空的就多了,其中还有很多都是在家弄的,用的另一个账户,所以周日基本都是空了的,后来八月底我给换成同一个账户了) 从二月份的框架搭建 三月份的战斗与杂七杂八系统的接入 四月份的技能BUFF系统 五月份的技能或Buff触发的飞行道具 六月份因为不合理而做的系统整理重构与AI 七月份的Buff搭配与套装,本地化与填表 八月份的场景外包与搭建 到今天现在第一阶段的完成,应该说这个游戏的诞生也算是很突然的事情了,二月的某一天突然就有群友找过来,说要做独立游戏,问要不要一起合作,我已经记不得当时正在做什么了,可能年初那会想好好的把技术再提升提升?研究研究图形学?整个客户端框架? 不过我寻思我搞了这么久开发,怎么说也有两年半了,也发布两个独立游 ...
关于星空制作的动作编辑器拓展
因为在制作动作的时候,希望能看到一些特效的配合,实时表现,所以诞生了这篇文章。 因为编辑器原本并不支持在编辑模式下,预览执行,添加的ActionNode,所以我自己拓展了一下,以便于开发。 首先找到ActionConfigAttribute脚本,添加字段,用来标识,这个ActionNode会在编辑器下运行 然后在ActionMachineHelper脚本下对GetActionHandler进行修改,在寻找ActionNode时,标识是否只获取在编辑器下运行的Node 最后找到ActionEditorSetting,添加UpdateExecuteInEditorActionNode方法,添加在这里 代码我就不进行讲解了,自己看吧
12345678910111213141516171819202122232425262728293031323334353637383940private void UpdateExecuteInEditorActionNode() { foreach (var item in currentState.act ...
关于游戏中动效的飞行道具的制作
关于游戏中动效的飞行道具的制作最近工作中做了很多动效,对于各类飞行道具也做了不少,在这里分享一些个人见解。 其实对于游戏中的飞行道具大致可以分为两类:
第一种:漂浮类直接飘字缓缓上浮,并逐渐变为透明,大概就是这种的吧,并没有什么太多能说的,各类游戏中都很常见。
第二种:飞行类从一个目的地飞到另一个目的地,有一个很明确的目标,在各种效果比较多的游戏中更为常见。
视觉效果,玩家体验对于这两种道具,从视觉效果与玩家体验上来说,会飘的并不会给玩家带来很强烈的感觉,玩家不会一直去关注他,玩家更多的会关注这个道具的类型,以及跟随在道具后面的数值,这就足够了,玩家可以选择性的忽略这类动效,并把视线放在自己想关注的东西上。 而会飞的则会稍微强烈些,它更有可能会伴随着更多的动效,比如pong的一下爆开,然后再弹两下,再绕个圈飞到一个指定的地点,再播放一些花里胡哨的特效这些,这会给玩家带来强烈的感受,控制玩家的动线,并能起到一定的辅助作用,告诉玩家,这是什么,从哪里来,到哪里去,并带来一定的成就感与满足感。
选择那么现在在了解了这些飞行道具之后,我们也需要在制作的时候明确,到底应该在何时使用什么样的动效 ...
基于Unity制作2.5D物体编辑器
最近工作做了一个很有意思的东西,觉得其中有一些技术也可以和大家一起分享,故写了这篇文章。 这是一个基于Unity制作的2.5D物体编辑器,可以导出二进制数据,以便于日后进行读取。
(注意学习前最好先了解下tilemap)首先这个界面我使用了FGUI,这是一个很棒的UI编辑工具,他帮我完成了大部分的UI编辑工作。 然后我们的格子计算与获取,我使用了Tilemap来作为标准,虽然我可以自己写自己算格子,但这太过麻烦了,我个人认为既然Tilemap直接帮我处理好了,也做好了坐标系的转化,我为什么不用呢?
现在开始正式制作,首先我的思路是一个物体分为两个部分,他的基础信息,名字、类型、物理上的占地面积、以及渲染层上的实际占地面积,因为这是一个2.5D的游戏,从游戏角度出发,我们分为物理层与渲染层。 首先物理层涉及到了我们的人物再数据层面上能否通过,渲染则是展示效果,因为游戏中是肯定会出现人物被物体挡住但是又能通过的物体后面的情况,就像这样 比较抽象,但是如果我们只有一层,那么人物既不能通过,也不能被挡住,这是不应该的事情,所以我们应该分为两层。 现在我们来看如何在编辑器对阻挡层和渲染层进行 ...
Lua学习随笔
这只是随笔,用于记录学习Lua时个人觉得比较有意思的坑点
lua的type方法总是回返回字符串,这是一个比较有意思的地方 当我第一次看到print(type(nil) == nil)的时候也会觉得应该输出ture才对。 可现实却是false,这是很有意思的一个地方,原因刚刚也提到了。 所以如果把代码改成print(type(nil) == "nil")输出就会为True了。
table表索引 table表索引也是一个很有意思的地方,刚刚开始学的时候我常常回混淆a.x和a[x],但实际上a.x代表的是a["x"],而a[x]则是指由变量X对应的值索引表,此外数字也是一个道理,最后整形与浮点类型值是相等的,作为表元素时,指向的是同一个表元素。 具体见下方测试图: (打上注释是因为不打就会报空出错) 输出结果: 可以看到我们声明对象a赋值为b,然后创建table表用对象a进行操作,等价于testTable["b"]="B"这项操作。后面的字符串操作同理。
and 和 or操作符 ** 不知为何这对我来说是 ...
从匿名函数到闭包再到事件的GC
众所周知当我们写匿名函数并引用局部变量的时候会产生GC,这是因为在调用局部变量时,Unity需要将这个局部变量缓存起来,以调用,所以就会额外生成一个类,这样就会产生额外的GC。 具体我们可以看这里的测试案例。
12345678910111213141516171819202122232425static int s_a = 1;int m_a = 1;public void Func(Action action){ action();}public void Update(){ int a = 1; Profiler.BeginSample("1"); Func(() => a = 2); Profiler.EndSample(); Profiler.BeginSample("2"); Func(() => s_a = 2); Profiler.EndSample(); Profiler.BeginSample("3"); F ...
Unity UGUI思维导图
这是UGUI的思维导图,跟随UWA的源码解读文章一起配合使用做出来的。
包括了贴图格式的选择,UGUI源码性能分析,什么情况会造成DC打断合批,什么情况会重建网格等等很多
总览:
UI元素讲解:
太多了就不一一截图了,这是我个人认为比较全的思维导图了~希望能帮助到大家
这里是地址:
https://github.com/LittleLittleStory/TinyStudyXmind
Unity Shader学习思维导图
有经典的渲染流水线,与每一步的讲解,也有数学知识,欧拉与四元数,该思维导图并不是很全,见谅。
但是我写上去的知识点每一点还是都比较详细的,重要的还是方便自己能在需要的时候,拿起来看一眼就能迅速理解是啥,也希望能帮到大家。
Shader方面的并不是很全,只有一些前置的关键重点,我个人还是以乐乐女神的书为主,思维导图仅仅是辅助,帮我在学习中快速查找一些我之前学过的知识,因为我记不住==
这里是地址:
https://github.com/LittleLittleStory/TinyStudyXmind
UnityAB,资源学习思维导图
这是一个关于Unity AB与资源的思维导图,是我从网上收集并整理出来的,各位按需拿取。
总览:
打包路径事项,流程:
打包注意事项:
还有一部分就不一一截图了,这里是地址:
https://github.com/LittleLittleStory/TinyStudyXmind
抛开迭代器,自制Unity协程
最近一直被迭代器,还有协程内部的实现原理所困扰,那么今天我们就自己来手写一下,自己实现一波Unity的协程。
那么首先先来看下Unity原生的协程是怎么写的
123456IEnumerator Test(){ Debug.Log("123"); yield return new WaitForSeconds(5); Debug.Log("456");}
这样一个简单的协程就写好了,可以看到他的本质其实就是一个迭代器,返回值是IEnumerator,那么调用它也是很简单
1StartCoroutine(Test());
参数可以是方法,也可以是字符串,Unity内部都会去帮我们调用。
到这里Unity原生的协程就已经实现了,那么现在我们一步一步来,我们可以先从迭代器开始一步一步往下拆,先来自己实现个迭代器,首先我们先写一个类,,继承IEnumerator,并实现接口。
1234567891011121314public class TinyIEnumerator : IEnumerator{ ...