- 博客(22)
- 收藏
- 关注
原创 [Unity] UI Toolkit 实现一个预制体和so数据的管理窗口 DataEdtor (IMGUIContainer、ListView)
灵感来源于MStudio老师的麦田物语教程中的ItemEditor编辑器扩展的很方便,在项目中但是不够通用(需要在脚本中一个个数据绑定和回调)其实左边的ListView可以保留,右边直接用Unity默认的Inspector绘制就好了(需要用到IMGUIContainer组件),随后写好create asset和delete asset的对应方法,这样就可以管理不同的so和prefab资产。
2023-01-31 20:02:43
1447
原创 [Unity] GraphView 可视化节点的事件行为树(三) GraphView介绍
在前面两个章节中,我们实现了两个部分的内容:Runtime部分的节点逻辑、UI Toolkit绘制Editor UI。这一章节将会用到GraphView框架,完成我们制作的事件行为树剩下的所有内容。 GraphView是Unity内置的节点绘制系统,实际上Unity里内置的Visual Scripting(可视化脚本编辑),URP中的ShaderGraph,都是GraphView制作。GraphView也属于UI Toolkit的一部分。在Unity 2021中属于Experimental
2023-01-04 20:39:03
5479
原创 [Unity] GraphView 可视化节点的事件行为树(二) UI Toolkit介绍,制作事件行为树的UI
UI Toolkit是unity推出的一套全新UI系统。对比传统的GUI系统有着一套全新的工作流。在Unity 2021版本后已被内嵌到默认的编辑器中了。使用UI Toolkit可以很方便的构建属于自己的UI工具。在本章节中使用的是Editor UI的制作。在资源窗口右键,在Create->UI Toolkit->Editor Window中先创建我们需要的Asset。可以看到一个在UI Toolkit中的UI主要有三个模块组成:UXML,USS,C#。
2023-01-03 20:59:01
2091
1
原创 [Unity] GraphView 可视化节点的事件行为树(一) Runtime Node
本文将开始介绍Runtime部分的事件节点逻辑。在本框架中,因为Grapview的节点图属于Editor部分,在游戏运行时是不会被加载进来的。因此首先我们需要一个离开节点图,也可以在游戏实时运行中执行逻辑的节点结构。文章涉及的事件触发思想其实已经在我之前写过的一篇文章中了,也可以算作之前思想的延续。这种方式因为直接使用了父子游戏物品作为组织方式,当大规模使用起来还是有点约束,因为触发器节点和事件节点形成的是一对一的关系,子物品也只能按照顺序执行事件下去,当需要处理一些分支/循环逻辑的时候就不太方便了,而
2022-12-27 21:58:08
1992
4
原创 [Unity] GraphView 可视化节点的事件行为树(序章 项目Github下载)
在自己做的比赛项目中,在初期的游戏系统部分完成之后,剩下的内容就是搭建游戏逻辑了。特别是在剧情解密游戏中,搭建过程就是跟着策划流程文档拼图游戏。之前有些过几篇关于设计模式和框架的文章,其实目标也是将一些可复用的逻辑抽象出来使用,优化制作管线和提高效率。因此便想到了做一个可视化的节点界面工具出来,方便在长期项目中策划同学也能参与进来编写游戏逻辑,减轻程序方面的负担。
2022-11-16 01:08:58
3195
2
原创 【计算机图形学 OpenGL】活性表算法的三角性光栅化(多边形的扫描转换算法)
三角形区域的扫描转换。设计函数ScanTriangle(int x1, int y1, int x2, int y2, int x3, int y3, int c1[], int c2[], int c3[])能在指定窗口中对由三个顶点(x1, y1), (x2, y2), (x3, y3)构成的三角形进行扫描转换,并按照如下颜色计算方法,将三角形区域的像素绘制出来。
2022-11-15 01:03:16
768
原创 [Unity] 让LineRenderer显示在UI层上方(RenderTexture 、RawImage)
项目中有设计点需要使用画笔的功能,已经做好了根据鼠标位置生成LineRenderer线段功能,但出现了一个问题:画板的界面是在Canvas UI层,但是LineRenderer的位置在世界空间中。可以先调整LineRenderer图层,我们在场景中新建一个摄像机,用于专门去渲染Line Renderer,并将摄像机内容输出到一个纹理上。然后在ui里新建RawImage,调整位置拖入纹理,就可以看到这个线段了。
2022-11-01 20:59:54
4468
9
原创 [Unity] 实现ScriptableObject数据同步Excel表格(对话系统数据管理,C# ExcelNPOI)
在制作游戏中需要管理各种各样的项目资源,其中游戏中的剧情文字也是一种需要管理的资源。自己刚开始接触游戏开发的时候,第一次看MStudio里面的对话系统教学,只讲了怎么写脚本同步UI的设置,并没有讲有什么方式去管理这些对话数据,视频里拿的是txt来演示存储对话数据,导致我制作的第一个游戏也是那txt来写的,一个对话就是一个txt,管理起来肯定是不方便的。如何存储文字数据呢?这时候就可以使用Excel表格了,让策划在表格中编写完数据后我们就可以一键导入成ScriptableObject,有需要再编辑是也可以导出
2022-11-01 00:57:10
2135
14
原创 Unity urp2d ShaderGraph 实现一个黑白转彩色的场景渐变效果 设计思路
那只能走走别的方向了,仔细想想,原来的shader也确实不太完美,因为我们要的是整个画面的黑白,而上面的shader则需要给每个场景物品都安装这个shader跑计算的话,无疑是降低了性能和扩展性的。我们可以放弃if节点,改用lerp在两个色域中做插值,就可以优化渐变效果,插值需要一个0-1的参数,我们选择使用“Saturate”节点,这个节点可以将一个浮点值映射到[0,1]的范围内,即输入大于1时=1,输入小于0时等于0,然后将结果连接到Lerp节点就可以了。这样我们这个效果就成功实现了。
2022-10-29 18:56:07
3835
原创 【Unity】框架设计(三) Odin编辑器窗口扩展,Asset资源的创建和管理(脚本文件创建、预制体、System.IO、AssetDatabase、Selection)
当游戏规模开始大时,为了制作游戏后期的维护性,就可以考虑做资源管理和编辑器扩展了。一是可以集成一些制作流程,省去一些重复操作的步骤,二是更方便项目数据的规范和管理性。今天来分享一下如何在unity中做编辑器窗口的拓展,并实现一些简单的功能。例如根据模板自动创建脚本(System.IO)、创建预制体(AssetDatabase)、读取指定文件夹下的资源、根据鼠标选中的资源批量创建ScriptableObject等(Selection)。
2022-09-30 17:34:30
3759
1
原创 [UE] 在虚幻中使用动画序列和分层骨骼混合简单实现角色看向
做ue demo 骨骼动画作业时想到的功能,记录一下。实现效果如下:角色会看向摄像机方向。NPC会看向玩家方向。本期动画素材使用了ue商店中的AdvancedLocomotionSystemV。
2022-08-21 21:05:59
1567
原创 [Unity] 状态机事件流程框架 (二) 设计游戏状态的保存框架,存档功能 ScriptableObject、EasySave
本期来设计一个游戏状态的怎么在游戏中表示和存储。保存游戏状态的目的一是方便根据玩家当前的游戏进度实行各种各样的逻辑分支,二是在存档时能记录实时的游戏数据,方便读档回到存档位置。...
2022-08-12 21:27:21
2676
2
原创 [Unity] C#使用委托和事件实现Unity消息中心(观察者模式)
最近在学习ue的gameplay框架设计和设计模式,再回过头看一下自己过去一年写的unity项目框架(屎山)代码,感慨良多。体会到了做游戏写脚本,语言语法只是表层功夫,学会它可以让游戏跑起来。走多远的关键,还是在数据结构/算法/设计模式的内功。过去一年,自己也看了很多unity教程,国内unity开发社区还是挺活跃的,新手阶段能在网上找到各种各样的教程。但学会教程≠会做项目,实践才是检验真理的第一出路。......
2022-08-03 23:49:50
2929
原创 [Unity] unity中对象池的使用
在现代游戏引擎设计中中,使用的大多都是托管内存,基于此我们不必手动管理内存,造成内存泄露等问题。对于unity中的游戏对象,每隔一段时间,Mono的垃圾回收机制将会检测内存,将没有再被引用的内存释放回收。当我们使用一个新的游戏物品(实例)时,首先需要实例化它(Instantiate,实际上也是基于new的机制实现的),在我们使用GameObject完成后便摧毁它(Destory)但是,申请实例化时,意味着我们需要在托管堆上分配一块新的内存给Object,在回收时,我们需要等待回收机制收回
2022-05-22 19:08:00
5753
2
原创 [Unity] 状态机事件流程框架 (一)(C#事件系统,Trigger与Action)
设计游戏时,框架设计时十分重要的,项目内容一大,各个功能系统间的耦合性就会不可避免的增加,如果初期时没有规划好,后期维护时成本就会大大增加。本期是在Unity实现一个简单的事件框架应用。通过预先在脚本中写好可供复用的具体模块,将事件的搭建流程搭建脱离代码,取而代之的是使用更方便的组合思想去构建事件。这可以减少脚本的编写量,也更好的去规范游戏的制作管线。在本期框架中,我们将游戏的各种游戏中的逻辑触发抽象成【触发器->执行行为序列】的流程,将触发器脚本作为父物品,各个行为作为该触发器的子物品。
2022-05-21 02:18:33
4060
6
原创 【编译原理 课程设计】设计SAMPLE语言的语法分析器 github源码(C++、LL(1)分析、语法制导翻译和中间代码生成)
这里是lz方法大二上的编译原理实验课,课设要求模仿编译器的原理思想,用编译语言设计能够识别单词和简单语法的编译,当时摸了两天左右写了小一千行,在这里再回顾一下思路,并留下对应的源码供参考。实验实现的方法有很多种,其中实验一的词法分析部分比较简单,这里重点分析语法分析部分。题目需求:实验一:词法分析 这里用了stl::map等提前存储单词记录出现次数即可。这里就不展开详细描述了。一些具体细节的可参考github中的源码。map<string, int...
2022-05-20 00:56:13
2063
2
原创 数据结构大作业-DBLP科学文献管理系统(五)前端Unity设计思想(搜索栏GUI组件应用,状态机,委托,C#线程)
更新终于完结了,对应的前后端源码和可执行程序,unitypackage已放在github上,欢迎大家参考。最后一篇是关于Unity中的程序设计思路。数据结构大作业-DBLP科学文献管理系统-概述 (C++/C#/Unity)_Sugarzo_mei的博客-CSDN博客...
2022-05-17 02:41:10
483
原创 数据结构大作业-DBLP科学文献管理系统(四) Dll编写,C++与C#的数据交换
终于讲完了后端代码,要涉及到前端的内容了。作为C++写的后台,而在Unity中是用C#中作为脚本语言。因此后台的代码想在前端进行调用,需要讲C++部分打包成Dll的动态链接库,约定好对应的格式,即可在C#中调用。首先需要了解C++/C#之前的主要区别,两种语言在语法上和关键字上很相似。这里体现的最主要的区别C#是托管堆代码,C++是非托管堆代码。在数据分配上C++每当用new等关键字申请空间时,编译器会在堆上为其分配内存,在使用完成后需要delete等回收空间,尤其注...
2022-05-14 16:20:16
598
原创 数据结构大作业-DBLP科学文献管理系统(三)聚团分析(并查集,最大团问题)
并查集这部分个人用了C#实现。一开始把题目理解错了,以为完全子图就是一个简单的弱联通图,直到用并查集秒完,等到DLL快交上去才发现原来指的是强连通子图。这里讲一下这里的设计思路。并查集并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。在探索各个作者间的合作关系中用到了并查集思想。并查集需要实现三个功能:初始化:把每个点所在集合初始化为其自身。在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为...
2022-05-14 15:38:33
774
原创 数据结构大作业-DBLP科学文献管理系统(二)作者排序、热点分析功能,模糊搜索(桶排序,字典树)
排序计算将在建库中执行完成,并将结果输出到文件。前端不需要做额外计算。作者统计功能调用作者统计函数后,程序将一个一个将作者名读入,同时维护一个字典树,在每个树的结点记录一个权值,统计该位置对应的作者名出现了多少遍。最后再遍历字典树,获得所有作者的具体出现次数,并由于作者出现频率远小于作者总数量,因此使用桶排序可以获得最好的排序效率,最终在O(n)的时间内完成排序,占用的空间也为O(n)。排序后按顺序输出到文件中。其中,字典树(单词查找树)是一种哈希...
2022-05-14 00:54:15
1017
原创 数据结构大作业-DBLP科学文献管理系统(一) XML解析,文件哈希,C++线程
在程序中,需要解析的DBLB文件大小为3G-4G的。因此每次启动程序前都读取一遍DBLP并全部写入内存的方法是不现实的,这需要我们提前在磁盘中建立对应的数据库文件,在第一次打开程序时进行建立数据库的操作,将需要的数据写入磁盘。之后对DBLP的数据查询只需要打开已经建立好的数据库进行IO操作即可。由于数据在磁盘和内存中的读取速度差距极大,在磁盘中删改添加数据效率是很低的,因此如何建立对应数据的索引,以及在选择一个在磁盘文件中容易维护的数据结构是非常重要的。在保证查找效率时,......
2022-05-14 00:37:59
2289
原创 数据结构大作业-DBLP科学文献管理系统-概述 (C++/C#/Unity,github源码)
新开这篇博客,一是为了分享和总结自己的平日所学,督促自己好好学习。二是为了将来面试的时候也有东西可以吹。博主目前南方某985,计科大二在读。第一篇内容就选取上个月刚做完的数据结构大作业分享。选取的题目要求是这样的:科学文献管理系统科研工作者的日常工作离不开查阅科学文献,并对其中的信息进行分析、筛选、挖掘和管理。请你为科研工作者设计一个管理系统,提高科学文献的管理效率。目标用户:科研工作者。 数据配置:请通过以下方法下载数据文件dblp.xml.gz.http://dblp.uni-tri
2022-05-13 11:33:44
2795
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人