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

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

卡卷网10个月前 (01-07)每日看点185

本文介绍一款自研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

分享给朋友:

相关文章

如何在自己家里建立一套私有云系统?需要哪些设备?

如何在自己家里建立一套私有云系统?需要哪些设备?

我敢保证,这绝对是目前为止最简单的搭建家用私有云的方法:“一台主机+至少一块硬盘”足矣!不需要任何专业知识,也没有复杂繁琐的步骤,十分钟不到就能搭建好,帮你成功打开文件云储存新世界的大门!还在单纯依靠网盘进行文件存储的朋友,不是我吐槽哈,它...

拼多多,怎么就成为了年轻人的「赛博菜市场」?

拼多多,怎么就成为了年轻人的「赛博菜市场」?

可惜你不在拼多多买水果蔬菜,很难一句话跟你解释,我只能笨拙的用经历来慢慢讲。我们公司有微波炉,同事们几乎都是自己带饭来上班,便当荤素搭配、水果零食;都是好看又好吃。我自己本来就不喜欢外卖,当然也加入了带饭大军: 直到某一天深夜我闲着无聊刷了...

报名的网课分期付款怎么退?

你在你分期付款的订单下面有客服电话,直接打电话描述一下你的问题,你可以告诉他你是被恶意绑定的,在不了解有退学条件这一说的情况下报的课程,可能遇到消费者诈骗了,不承认有退学金,说是霸王条款,诈骗消费者,你若分期了先把自动续费关了,别让自己个人...

如何进行 Elasticsearch 调优实践?

如何进行 Elasticsearch 调优实践?

面试官心理分析这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s ,坑爹了。第一次搜索的...

常微分方程的理论对偏微分方程的研究有没有帮助?

常微分方程的理论对偏微分方程的研究有没有帮助?

之前看到过一句话,好像是 Bourgain 说的,大意是做 ode 的做到深处就到了 pde,做 pde 的做到深处就到了 ode,ode 和 pde 最后是相通的。以我目前有限的知识,只知道下面两个方向:1. Hamilton 系统在现代...

客观的讲,华为是不是真的遥遥领先?

客观的讲,华为是不是真的遥遥领先?

最近,华为上市了最新款的三折叠屏手机,于是很多大V们把这款手机吹上了天,吹成是技术上遥遥领先于全世界。谁要是敢质疑华而不实,就会被人扣上一顶汉奸卖国贼美狗的帽子。把一个商品捧成了宗教和菩萨,你只能说好,不能说不好。其实这个世界上,只要是人和...

发表评论

访客

看不清,换一张

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