当前位置:首页 > 每日看点 > 正文内容

Unity有哪些让做项目事半功倍的插件值得推荐?

卡卷网1年前 (2025-01-07)每日看点227

本文介绍一款自研unity插件,实现对话框功能,名字dialogo,购链接如下,目前打折15dollar,原价30dollar。

s://assetstore.unity/packages/tools/-toolkits/dialogo-300102

,这里主要介绍下插件的实现与功能。

Introduction

插件名,dialogo.主要提供游戏对话功能支持,目前支持任意unity版本,任意渲染管线,2d,2.5d,3d全部支持。

代码全部c#,提供源代码,可以自由编辑,二次开发,只需遵守unity的EULA协议即可。

为何要针对对话框功能需要实现插件?如果全部在unity的Oject里不仅麻烦,修改困难,而且编辑十分不方便。该插件是script-ased的,也就是对话内容全部在一个脚本里完成。无需启动unity即可编辑,十分方便,同时已经内含了将脚本转换为unity资产的脚本,也就是作者只需要把自己的脚本拖入到unity的project里就可以直接使用了。

Components:

DLSL:

本插件包含一个作者自创的domainspecificlanguage,名字也叫dialogo,目前提供了vscode插件,名字也叫dialogo.下面截取一个代码片段:

Jack{ Jack("emma,doyouwanttorecoveryomagic?") Emma("yes,thankyou") Jack("yomagicheeenrecovered") } //Wiltistheactor,and{}istodescrieascene,thedialogueistriggeredythenpcWilt Wilt{ //asimplicationofemma.say(...),sothisislikecallafunction. Wilt( "HowcanI helpyou?" ) Emma( "Iwanttouyadrink." ) Wilt("doyouwantacupofspriteorcola?") //matchisakeyword,hereisthecho,press1or2gotodifferentranch ("sprite"){ Emma("plsgivemeasprite") Wilt("Thisisyosprite!") } ("cola"){ Emma("plsgivemeaottleofcola") Wilt("Thisisyocola!") } ("water"){ Emma("plsgivemeaottleofwater") Wilt("hereitis") } }

详细介绍在插件链接的视频里有,大概意思就是描述对话的内容,发起对话的人名,以及提供无限嵌套条件语句的支持。

如:Wilt是一个游戏的角色的名字,这个对话就是通过这个角色触发。触发之后的对话内容在花括号内部。内部的对话内容也有相应的角色,如这里对话可能由游戏中的npc:Wilt触发,然后对话的内容是Wilt和Emma之间的对话,对话的内容是用双引号括起来的部分。

同时支持条件语句,类似rust的match,但是省略了match关键字:

("sprite"){Emma("plsgivemeasprite")Wilt("Thisisyosprite!")}

这一句是一个条件分支,对应"sprite",也就是用户在对话时可以选择sprite,然后对话就继续花括号里面的内容,这个条件是可以无限嵌套,条件内部可以继续分支条件。

正式的插件包里包含该语言的完整的Parser(PEGParser,参考python创始人GuidovanRossum的博客实现)。

该parser是用unity的c#实现的,一开始用的c++,并且也可以成功集成到unity的c#,但是因为跨平台困难后续全部改为了c#版本。

parser解析之后会构成一语法树,然后进一步形成一个类似字节码的格式,最后结果存储在类DialogGame里面。

DialogPlugin.

这个类是一个单例模式,同时也是一个观察者模式的Suject,同时内部包含一个状态机,对应的观察者是DialogTrigger.

该类既然是单例了,就是控制整个对话框的进行流程,如遇到npc触发对话,同时按下空格切换对话内容等,以及条件分支的选择触发逻辑。

它内部包含了DialogParser和DialogGame.以及本身是一个状态机来控制对话框执行逻辑,同时负责和ui部分交互。

DialogTrigger.

这个类是作为脚本attach到游戏创作者的npc上的,每个需要支持对话触发功能的npc就attach一个这个脚本。

然后通过触发TriggerDialogoEvent来触发对话框执行,之后的执行会自动转到DialogPlugin来控制。

同时它可以支持注册一些定义的回调函数,也可以自己扩展回调函数。如MessageCompleteDelegate,这个在每一消息结尾的时候触发。

Ui:

该插件提供了一套对话框的缺省ui实现,插件使用者可以直接使用,同时这部分ui是可以替换到,ui严格来说可以不算插件的一部分,插件使用者可以参考该缺省ui的实现来实现自己的ui

ui基本就是unity自带的intece的实现,它和插件交互基本方法就是注册回调函数,然后从回调函数拿到解析出来的脚本信息并显示或者做任何想做的事情。

这个实现是较灵活的,使用者可以根据自己的需求选择如何使用对话内容数据,如可以用不同的格式显示,甚至可以显示当前对话进行到源代码的哪一部分了。(有那么点调试器的味道,但是不支持断点)。总之做什么都可以。

插件的cardimage如下:

插件效果截图

当然这个图主要是做coverimage用到,并非实际实现的效果,但是也大差不差,具体使用效果见插件包的链接。

models:

插件内部免费赠送用magicVoxel做到一个体素模型。同时作者还有一个控制台的对话框模拟器实现,不过这个没有来的及放到插件里,购者如果需要作者可以免费提供。

Conclusion:

这个插件的优点如下:代码较紧凑,模块化清晰,功能针对性较强,侧重于基础功能,同时支持扩展。

要说瑕疵也不是没有,就是dlsl这个语言本身的语法还可以继续优化,或者扩展。目前支持场景切换,线性对话以及无限嵌套分支选择。不过不支持跨场景的分支切换以及场景本身的分支,同时也不支持类似for循环的逻辑。

适合单故事线的游戏,未来根据使用者的数量和反响考虑提供进一步的功能支持。

该插件本身已经包含所有源码,读者只需遵守unity的eula协议即可。作者本人将提供长期。欢迎购试用。

全部资金用于再生产。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/6865.html

分享给朋友:

相关文章

有了Istio,开发还需要微服务架构吗?

有了Istio,开发还需要微服务架构吗?

Istio 是一个开源的服务网格(Service Mesh),通过它可以实现对服务间通信的管理和监控。对于那些本身没有设计为具备安全功能的传统应用程序,Istio 可以提供一个“透明”的安全保护层,而不需要对应用本身进行任何代码修改。 I...

有没有推荐什么手游搬砖,或者是用手机就能做的工作能日入100左右就好了?

有没有推荐什么手游搬砖,或者是用手机就能做的工作能日入100左右就好了?

大家好,我是思聪。思聪游戏搬砖社每天分享真实靠谱的游戏赚钱的方法。整个游戏的攻略用一句话概括就是:打元宝兑换平台物品,xx元宝兑换一个分红物品。你把你打游戏得来的元宝去兑换平台的分红物品,就能每天领取xx元的分红。(具体看是哪个分红物品,比...

打印速度慢,是不是打印机cpu不行?

打印速度慢,是不是打印机cpu不行?

打印机是机械设备,cpu内存硬盘它也有但这只是它的电控部分,打印机类似于汽车属于机电一体化设备和电脑不是一个类型的产品。很多人总是认为打印机和电脑是一类产品,实际上这是一个误区,电脑是it(Information Technology)信息...

Redmi 为什么可以把性价比做得那么高?

一位修手机的老大哥曾经跟我说过,红米1那个手机,除了处理器还凑活,其余零部件,就是市面上山寨机那种。其实红米性价比并不算极致,而且一直都有竞争者,从原来的群魔乱舞,到后来的荣耀,魅蓝,一加,再到现在的IQOO和realme。红米的方法也很简...

闲鱼上为什么会有人问都不问直接下单?

我去年卖一个荣耀90,挂的2200,最终成交2137.5元。对方是一个高高壮壮的西北口音,要求的自取。大概我吃过午饭,约了旁边的商场,那里有荣耀售后。见了面,先看了手机,试了好一会儿,各种测试,没问题。然后去了商场二楼的荣耀售后,让人家售后...

抖音小店三个月了一单没出,也没有流量,一个星期好像都没有一个点击,怎么办?

抖音小店三个月了一单没出,也没有流量,一个星期好像都没有一个点击,怎么办?

好消息,你有毅力上200多个品,还能坚持三个月坏消息,一单没出我感觉你还是别碰抖店了,甚至电商平台都别碰 你没这个缘分我要是这样,我得用一百辆叉车叉死我自己你如果还想坚持,我直接给你这套至少价值19800学来的新思路简单来说就是 你做的好的...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。