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

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

卡卷网7个月前 (01-07)每日看点148

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

分享给朋友:

相关文章

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

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

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

抖音和快手最大的区别是什么?

1、目标人群定位不同抖音:一二线城市,占比52%,大专学历以上,女性偏多。抖音以年轻群体居多。快手:三四线城市,占比64%,高中学历以下,男女更均衡。快手所覆盖的年龄段范围更广。2、内容创作的形式和深度不同抖音:偏深层,内容的装饰及表达更高...

为什么我感受不到 1500 元的手机比四五千的差?

我长期使用两千元左右的安卓机,一天接近8小时的重度手机使用者。某天我突然想试试看传说中非常赛艇的苹果。狠了心,砸了钱。七千大样买了爱疯。就这?什么辣鸡玩意。而且因为我一直更新软件,用了两年爱疯就卡了。并没有传说中的用四五年不卡。用了这么一次...

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

我说美国快要没招了,你信么?这次台积电宣布停止向中国大陆客户供应7纳米及更先进AI芯片,再加上前段时间台积电对华为的制裁,我们基本可以认为,台积电在高端芯片领域,已经彻底把大陆给拉黑了,这也意味着中美芯片战已经到了最关键的时刻,一旦我们克服...

鸿蒙到底是不是安卓套壳?

鸿蒙到底是不是安卓套壳?

把它是不是套壳先放在一边吧。我讲一个事情,大家自己判断。华为有一个应用,叫手机管家。这个手机管家对一些系统底层设置有影响:比如华为从 EMUI 9 开始不允许将第三方启动器设置为默认启动器,依靠的就是这个手机管家。为什么这么说呢?在网上搜索...

阿里云服务器续费价格好贵,想换一家云服务厂商,该怎么选择?

阿里云服务器续费价格好贵,想换一家云服务厂商,该怎么选择?

最近一台买了3年时间的腾讯云轻量服务器到期了,还有5天时间。当时买的价格是3年198元。配置是2核CPU、4GB内存,80GB SSD云硬盘,1200GB 流量包,然后中途给免费升级了CPU,从2核变成了4核。平均下来一年的费用70元不到,...

发表评论

访客

看不清,换一张

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