当前位置:首页 > 每日看点

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

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

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

分享给朋友:

相关文章

现在手里有一万闲钱,买什么币好?

今天是2024年7月29日,看看我的持仓吧。 只有几百刀的那些微持仓就不说了,以下持仓都在几千刀~几万刀不等。 不构成任何投资建议,成本是多次买入的大致均摊成本 $TIA 成本0 $DYM 成本0 $SAGA 成本0 $STRK 成本0 $…

OZON平台什么产品好卖?

ozon选品的核心重点我不说 你们全网也不见说的这么干的教学了 你信我就按照我说的思路去走 不信的出去买课去 一时间消化不了的先点赞收藏起来 真不中了下载也行 因为最近总有坏人给我使诈 平台已经下了我八个视频了 还都是实操教学不废话的那种…

PS有哪些实用小技巧,小白也能一学就会?

PS有哪些实用小技巧,小白也能一学就会?

不看后悔系列!本篇分享25个PS实用的技巧! 不能保证每个都能让你惊艳,但是却是我用心写出来的,希望对你有帮助。 另外我的知乎也写了接近200篇PS的技巧,超级合集分享! 我目前正在带一个PS/Ai的软件训练营,两个多月搞定两大软件的学…

天涯论坛关闭后,除了知乎,大家都在逛什么?

天涯论坛关闭后,除了知乎,大家都在逛什么?

天涯神贴合集完整版,给大家整理好了! 那年大学,打开天涯,感觉打开了一片新天地,里面什么样的人都有,有大神也有蛇神,比某乎好太多了,可惜后面关了很多年前,天涯社区曾出现了不少深受欢迎的帖子,成功地预言了许多形势和事件。这些帖子因此被冠以“天…

腾讯云为何在云服务市场败给了阿里云?

IDC领域,2010年以前,万网、新网互联、新网,三家公司瓜分天下,其中万网市场份额最高,排名第一。当时,万网的域名是 http://www.net.cn ,通过该域名就可以判断万网的地位。2010年阿里云成立,直接收购了万网,大量用户直接…

想学习Linux下的ELF文件有什么好书推荐吗?

想学习Linux下的ELF文件有什么好书推荐吗?

大家好,这里是物联网心球。 今天我们来聊聊ELF文件,了解一下Linux如何创建进程以及ELF文件如何转变成Linux进程? 1.什么是ELF文件? ELF(Executable and Linkable Format)文件是一种目标文件格…

发表评论

访客

看不清,换一张

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