不知道写点什么,就想着写点东西放博客上,希望以后的自己可以感谢现在的自己吧😄。
前言
不知不觉2020年就过去了,感觉这一年时间过得飞快!([破音]不要啊,不想长大!)
这是糟糕的一年,不论是对于我还是对于大家想必都是吧😅。
用一句话总结一下:
计划赶不上变化,生活总想让我低头
从图片你就可以看出2020我超级摸鱼的。
暑假中
🛰️我从来没想到会放这样一个长假,大概一生也就这么一次了吧
在假期中我每周都制定了计划,主要针对了C++和Shader进行学习。(不得不说C++牛逼)
自设框架
Final framework —— 希望它成为最终的框架
其框架现在已经包含以下功能:
资源加载
Resource加载
AB包加载
Addressable加载
单例
非Mono单例
Mono单例
全局Mono
对象池
音效管理器
输入管理器
UI管理器
FSM有限状态机
事件中心
对话系统
简易协程行为树
天赋树系统
背包系统
Astar寻路
存储系统
有空会开一篇文章专门介绍。
简易项目
在暑假里,和小觉,刺客一同制作了一个简易的2D横版解密过关游戏。
...
IDE: vs2019
Core版本:.NET Core3.1
调整启动方式
在进行开发webapi项目时,我们为了方便监听程序日志,我们可以选择一控制台方式启动。
配置启动主页
在launchSetting.json里我们对启动项进行详细设置。
123456789"WebCore": { "commandName": "Project", "launchBrowser": true, "launchUrl": "index.html", //启动时的Url "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "applicationUrl": "http://localhost:5000&quo ...
此文为热更新学习笔记记录
AB包
LZ4 比标准压缩程度小,但对于内存的占用相对较小,在使用时无需全部解压(推荐使用)
ETI 在资源包中不包含资源的类型信息
FR 重新打包时需要重新构建包和ClearFolders不同,它不会删除不存在的包。
ITTC 增量构建检查时,忽略类型数的更改
Append Hash 将文件哈希值附加到资源包名上
SM 严格模式,如果打包出错,则打包直接失败
DRB 运行时构建
打包
进过AB打包后,我们发现生成了如下的文件:
其中包含我们的主包文件PC和我们的资源包文件model。
打包完成的资源包以二进制存储
manifest文件为对应资源的配置文件。
加载资源
123456//加载AB包var ab= AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/model");//加载资源var asset= ab.LoadAsset<GameObject>("Cube");Instantiate(asset);//注意Ab ...
游戏编程模式算是一本比较著名的书了,全书针对游戏编程中的问题介绍了多种设计模式。学习设计模式可以加强我们的程序架构能力,写出更加强大和优雅的程序。
在线C#
写在前面
其实针对设计模式,之前我就学习过《大话设计模式》自己也随书将二十多种设计模式实现了一遍;但我在学习游戏开发的过程中发现,标准的设计模式并非对游戏编程支持良好,故而有了专门看一看游戏设计模式的打算,加上寒假学习cpp,让我有了拿起这本书的想法。
此文仅为学习记录,欢迎指正。
设计模式并不是刻意为之的东西,是前辈经验的总结,也许你在不知不觉中就已经使用了某种设计模式。
命令模式
将一个请求封装成一个对象,从而允许你使用不同的请求、队列和日志将将客户端参数化,支持请求的撤销与恢复。
从上述的描述中我们可以找到几个关键点:请求队列,日志,撤销与恢复。
如果你需要这些特性,此事不妨试试命令模式吧。
适用场景
试想一下,我们在游戏中需要监听用户的输入,以让我们控制的角色响应玩家发布的命令,这个命令可能是移动,攻击,也可能是打开菜单,退出游戏。在需要复杂的输入检测时,你可能需要将玩家输入进行组合,如在恰当的时机按下某几个键位 ...
位运算符想必大家都听说过,那如何正确使用位运算呢?
今天,让我们来解决这样一个问题,用一个参数传递一组配置?
这并非是一个难题,学习过最基本的编程知识,我相信你会用n种方法来解决这个问题。
你可能的做法
配置项枚举类
123456789/// <summary>/// 配置项枚举/// </summary>enum Config{ Item1, Item2, Item3}
1234567891011/// <summary>/// 显示配置信息/// </summary>/// <param name="configs"></param>static void ShowConfigInfo(Config[] configs){ foreach (var item in configs) { System.Console.WriteLine(item); }}
上面的做法可能是大多数人 ...
上周我利用一周的时间完成了一个解密竞速小游戏,这也是没空更新的一个原因吧
因为时间比较短,就选择了2D项目来练练手,在人物角色控制写完了之后,就想着写个摄像机来控制视野,索性就想到了Cinemachine,记得之前好像看到Cinemachine有一套比较好用的摄像机系统,就拿来试试了。
效果预览
可以看到其效果包含以下几个方面
跟随玩家角色的移动
在小范围内移动不会触发摄像机位置的改变
摄像机缓动
摄像机视野不会超出地图范围
这几个效果自己手写还是挺麻烦,让我们来看看Cinemachine怎么做。
如何使用
创建一个2D虚拟相机:
2. 为虚拟相机指定Flow
3. 设置活死区和插值
此时已经可以实现摄像机跟随了,但是此时摄像机可能会照到非地图区域
4. 设定地图碰撞区域
创建一个空物体并挂载多边形碰撞器(目前只支持这种类型的碰撞器)记得设置为触发器
为虚拟相机添加如下组件,将碰撞设置进去
此时你可以实现上述的所有功能了。
算法设计
未读
对A*算法早有耳闻,但一直未细致去分析过,最近重新看到这个概念,来尝试分析一波
算法定义
A* 算法常被表示为 f(n)=g(n)+h(n)
**f(n)**表示从状态n到达目标状态的花费的预测值
**g(n)**表示从初始状态到达状态n的花费
**h(n)**表示从状态n到达目标状态的花费预测值(最佳路径)
拖了蛮久了,差点我都忘记了我还有个博客等着我每周一更呢。
效果预览
A* 格子数据
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748namespace FastyTools.Astar{ /// <summary> /// 格子类型 /// </summary> public enum NodeType { Walk, /// <summary> /// 障碍物 /// </summary> ...











