目录
在自己做的比赛项目中,在初期的游戏系统部分完成之后,剩下的内容就是搭建游戏逻辑了。特别是在剧情解密游戏中,搭建过程就是跟着策划流程文档拼图游戏,其中工作量还蛮重复性的。之前有些过几篇关于设计模式和框架的文章,其实目标也是将一些可复用的逻辑抽象出来使用,优化制作管线和提高效率。因此便想到了做一个可视化的节点界面工具出来,方便在长期项目中策划同学也能参与进来编写游戏逻辑,减轻程序方面的负担。
在设计的过程中有很多的考虑点,最初自己对比了一些成熟的可视化节点插件插件bolt,playerMaker等,一开始是想在这些插件上做节点拓展,封装一些自己写的逻辑上去,但发现这些插件中内容很多,自己想要的东西比较轻量级,并且这些插件对于节点和Inspector窗口也不是很方便拓展(自定义属性和odin对接)
在Unity 2021默认的版本内置中,其实已经有了一个节点绘制系统GraphView,其中Visual Scripting和Shader Graph两个节点窗口的就是它的运用了,所以最终自己决定使用了GraphView配合UIbuilder实现了一个事件节点编辑器,将以前的事件系统包装了进来,部分游戏逻辑变成了可视化节点操作。
在设计时也有各种权衡,例如在Bolt中,一个节点前后端口不仅代表流向,也带有这个节点运行时需要的数据,在自己实现的系统中,简化了节点构成,将数据全部放入Inspector中,节点的前后端口只有流向的意义(实际上GraphView是Editor部分在游戏运行时是不生效的)
最终项目运用效果展示:



整个系统还是花了蛮多时间的,中间要寻找各种教程参考(国内教程是真的少),自己思考总结结合以前的框架等。最终写完在实际游戏比赛中运用,确实极大的提高了程序间的构成成本的搭建游戏逻辑效率。系统中涉及的点也很多,因此后续会慢慢写出几个章节分别介绍系统各个模块的实现。
链接:https://github.com/sugarzo/Unity_GraphView_EventBDTree

具体的使用手册放在github的readme中

该章节会讲述游戏实际运行时,这个行为树的事件系统是怎么执行的,其中的节点的数据结构,实际上和自己之前一篇文章内容思想很类似。[Unity] 状态机事件流程框架 (一)(C#事件系统,Trigger与Action)_Sugarzo的博客-CSDN博客_c# 事件系统
当然后续也做了一些优化,框架中一个涉及四个类型的节点:触发器节点、事件节点、条件节点、序列节点,会介绍一下其中脚本的逻辑。
上面的展示图中其实可以看出来,其实所有的节点都是继承自MonoBehaviour,作为一个component附加在游戏物品上,这自然不是理论上的最高效率。当然这里设计有几个权衡,一是该框架的数据都是由Unity自带的Inspector绘制,没有提供节点的数据端口,因此需要节点的数据信息在UnityEngine.Object的派生类里。
UnityEngine.Object其实还可以选择使用ScriptableObject,效率自然更高,但对比Monobaheviour少了个生命周期函数。最终权衡之下还是选择了用component作为节点数据。
该章节会讲解怎么使用UI Toolkit做出自己想要的节点界面。

该章节会讲解GraphView使用,如何构建节点图。实际上节点图只用来组织上面Runtime部分的数据流向(一个NodeView关联一个Runtime的Component),游戏运行时时不构建节点图,GraphView负责Runtime部分的数据编辑(修改流向),以及如何根据各节点流向反过来构建编辑器下的节点图(有点数据结构图论的思想),然后是一些删除节点,复制节点,创建添加节点菜单的操作实现。
本系列已更新完结,各章节文章链接:
[Unity] GraphView 可视化节点的事件行为树(一) Runtime Node_Sugarzo的博客-CSDN博客
[Unity] GraphView 可视化节点的事件行为树(二) UI Toolkit介绍,制作事件行为树的UI_Sugarzo的博客-CSDN博客
[Unity] GraphView 可视化节点的事件行为树(三) GraphView介绍_Sugarzo的博客-CSDN博客
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我即将开始一个将录制和编辑音频文件的项目,我正在寻找一个好的库(最好是Ruby,但会考虑Java或.NET以外的任何库)以进行实时可视化波形。有人知道我应该从哪里开始搜索吗? 最佳答案 要流入浏览器的数据量很大。Flash或Flex图表可能是唯一能提高内存效率的解决方案。Javascript图表往往会因大型数据集而崩溃。 关于ruby-Ruby中的波形可视化,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里编辑 3.解析依赖到项目中
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).
这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什