小黑盒游戏新闻 ( ) • 2024-05-05 10:31

      嗨,五一假期接近尾声,大家有什么收获吗~

      上一期内容我们讲了从解包到提取live2D的曲折经历,这一期Live2D的内容我简单的讲一讲这几天入门Live2DViewerEX实现游戏效果的经历,从模仿到创新的过程~我的经验希望可以帮到想要DIY桌宠的XD们!

    这一期是还原篇!主要是为了还原游戏中的功能而生~

      在开始介绍软件之前我们简单的回顾一下《不双x就去世》游戏本体内桌宠的效果

      1.待机文本:顾名思义,就是没有触摸互动时桌宠自然说的文本,示例如下

待机文本

      2.触摸互动:也很好理解,就是点击特定区域时角色做出的动作、文本、表情、语音等等,在本游戏中只有动作和文本。

触摸文本

      3.回答互动文本:有一些文本可以互动选项作答,如下

选择母文本

选择子文本

      OK!既然了解到一共有三种类型需要还原,那我们不妨转步Live2DViewerEX,点击启动会得到以下画面~

steam启动选项

Live2DViewerEX:软件主程序,可以浏览创意工坊下载喜欢的桌宠等等,这一部分我们不使用这一模块。

EX工作室:本期的主要程序,用于编辑和发布桌宠,功能还是比较强大的,并且易于上手~

      以上便是EX工作室的UI画面,我们这一次使用的是Live2DCubism制作的模型,所以选择【Live2D编辑器】~

      有如下提示,导入MOC或Json文件/选择模型文件夹

      到了这一步我们不妨简单的分析一下Live2D文件夹中出现的那些文件格式的含义。


.moc3

       .moc3:这是我们上一期花了九牛二虎之力获得的主模型文件,地位相当于建模中的模型本身。


 

.model3.json文件部分预览


     .model3.json:用于说明其余部分的相对路径,相当于要找一个电脑中的文件,必须要知道路径,比如Steam.exe位于D:/STEAM/steam.exe,只要告诉别人这个路径别人就可以找到这个文件,而这个原生的.model3.json就相当于让“读取器”知道那些关键的部件都在什么地方。


      .physics.json:用于赋予模型部件物理效果,比如小仙姑的头发、衣服、丝带、穗子等等就应该适当随风飘动,显然这是还原效果非常关键的一个部分。

      .cdi3.json:用于分层后部件分块、分组、分区方便后续管理与编辑

     除此之外还可能有.pose3.json.exp3.json等文件,根据字面意思分别指的是姿势、表情文件,《双修》游戏模型比较简单,其内没有这些文件,所以暂时不做赘述。

——————————————————————

      说完这些,我们回到EX界面,现在便明白了,若读取.moc3本质上读取的是模型本身,读取model3.json读取的是路径指示的所有文件,而文件夹顾名思义就是读取文件夹所有的程序,但是比较蠢有时候读取不出画面

      所以我在这里建议大家直接读取.model3.json文件并且在其上面修改,可以省去选择挂载程序的过程。

      读取后我得到了以下画面

      左边的意义都很显然,值得一提的是Ctrl+拖动可以移动模型,但仅限于EX内编辑,在桌面上是不可以的!

      关键的是右边部分,点击motion文件便可以预览动画~

摸头动画~

      摸完之后变成了游戏内默认的待机动作

      于此,我遇到了编辑中的第一个问题

      可为什么刚进入读取的时候并不是这个姿势呢?

      经过之后的学习我得到的答案是:这个模型并没有设置”Start动作“,我猜想制作人设计上的互动都是在Unity开发中赋予的,而并非集成在Live2D的(至少我并没有找到类似包含motion分配的.json),关于Start动作我会在后文细细解释。

目前情况的GIF动画

   (上图是一个GIF文件,如果看不到可以点击查看原图~)

  就此我由发现了一个问题,我如今的模型是如图所示的,游戏中的模型是这样的,细心的你是否发现了区别呢?

游戏中的效果

   没错差距正是手臂衣服四肢部件的摆动~

   而到这就不得不开始配置.json文件了,我们点击右边的“配置文件”,再点击“编辑”,由此我们进入了这么一个界面

  选择【控制器】一栏,得到如下画面,我用红框框出了我要细说的几个部分

Controller面板

鼠标追踪:默认打开 涉及鼠标视线跟随,很多模型都有把头朝向鼠标的设计,打开后便可以实现,但是Live2DViewerEX默认情况下是[点击跟随]而非一直跟随。 【建议开启】

眨眼:默认打开 首先要确定原模型的待机动作是否包含眨眼,之后再决定是否要打开眨眼。但根据我的经验,打开后可以让眨眼更加自然,比方说打开后我选取了眨眼间隔的样本,分别大约是4s,7s,6s,这样无规则的交错我认为可以让模型更加写实一些,不过偶尔会遇到眨眼两下的现象。【按需开启】

自动呼吸:默认打开 让身体各部件出现起伏,模仿呼吸的起伏。 【建议开启】

小幅度动作:默认打开   使得模型身体几乎不起伏,发丝飘带等等都不会飘动。 【建议关闭】

        修改后模型的动作就和游戏中待机一模一样了!问题解决!终于可以开始还原互动了~

        最重要的一部分来了!

        点击动作一栏:

        【动作组】相当于动作的一个集合,相当于文件夹;

        【动作】相当于其中的文件;

        这两个都很重要,先来讲讲动作组,点击加号-预设,会看到以下几类预设种类:

        分别是Idle、Tap、TapArea、Start、Shake、Tick、Leave;

        官方对此的描述是这样的:

提醒一件事:预设不可以改名!不可以改名!不可以改名!改名就会失去功能!除非是表内的格式

     根据上手体验下来最重要的三个预设是Start(启动动画)、Idle(待机动画)和Tick(定时播片),我们先创造一个Start动作组,可以看到下面有一个“层级”

      什么是“层级”?

      不妨我们把其理解为”时间“,解释为”同一个时间下不能发生两个事情“,如果想同时发生两件事,要把事件AB分开在不同时间激活。或许这个比喻并非特别准确,但可以协助理解。本篇中我们不会用到这个层级来做分层操作。

      我们新建了一个待机动作,并将其与stand1动作绑定起来,这样在打开模型的时候就会运行这个动作

      但是!如果你没有勾选【动作循环】,那么当这个动作播放完之后会停格在最后一帧(所以不会回到那个叉腰的模型动作)

      有心的读者可能会想,只要勾选start循环就能实现待机动画,那么Idle预设存在的意义是什么呢?

      答案是Idle中的文件会自动衔接在任何动作结束之后;而start只是在开启时不断循环,当动作结束后便不会再运行,会停格在那个动作的最后一帧。

     (Q.Start、Idle如果使用的是同一个动作,Start动作组是否有必要存在? A.就我个人认为,没必要

       接下来我们讲一下”Tick预设“,本质上是一个到时间就播放动画的预设,默认间隔是1分钟,可以通过TickX(tick_x)的办法修改这个间隔。比如Tick6就是六分钟一播。

    (官方的描述是”X处填写数字,范围1-60对于同时符合条件的(如第2分钟的Tick1和Tick2)随机选择一个事件进行触发“,所以我们可以通过新建两个X不同的tick动作组来实现不规则时间的说话,可以让角色的说话更加自然)(我的设想中两组的X为质数就可以让随机度达到最高,比如3/5,具体的可以开动脑筋自己研究)

      显然,可以用这个预设来实现角色待机时的自言自语,

      吗?

      不知道大家是否想过,游戏中待机是会出现不同文本的,因此我们我们新建三个对应待机动作STAND1、2、3作为事件。

      位于Tick动作组下的动作会【随机】挑选一个播放,但我们有没有办法增加某一个动作出现的频率呢?容我向你介绍【比重】功能

      我个人更愿意将其理解为”权重“,但是无伤大雅,这个数字可以在1-999中修改,比如待机1的比重为1、待机2的比重为2、待机3的比重为3,那么三者的概率分别为1/6、2/6、3/6,还是很好理解的,如果你更偏向于想看到某一个动画,不妨将其比重拉高,提高其出现的概率。

      我个人选择不修改比重,让其随机生成。

      那么该如何还原游戏中那些文本呢?我们只需要在文本框内填入想说的话,他就会在执行动作的时候播放这句话(可以用鼠标拖拽这个文本框的位置,值得一提的是桌面上的这个文本框出现的位置是绝对位置,不会随着模型的移动而移动)

      到这里我们就已经完成第一步”待机文本“的还原了~咱们趁热打铁完成触摸反馈!

      制作人已经预设了几个触摸区域,我们回到动作组界面选择TapArea

    为什么没有可选的点击区域???

      因为点击区域必须有命名,在上上张图就有写到 ”名称【必须】“,只有给了名字这个点击区域才能被引用,才能生效。

      按照上面的办法,这样就可以实现点击文本+动画了!

    【值得一提的是,如果文本很长但是持续时间很短,可以修改文本时长,文本时长(文本持续时长)的单位是毫秒(1秒=1000毫秒)】

      同样的有一种办法,也可以实现点击互动,并且我更建议大家使用我接下来说的办法。

      建立一个【没有预设】的动作组,加入你想要的触摸动画+文本

”TapArea“办法只要触摸就会反馈,而”点击时动作-无预设动作组"并不会受限于点击某个区域才发生,比如你想要点击不同区域但想前往同动作组,这样就可以省下很多功夫,而且只要选择整个动作组的效果是和前者一模一样的,唯一的问题是如果修改了动作组的名字要重新绑定。(当然仁者见仁智者见智,每个人的思考逻辑不同,只要结果相同就是对的。)

      最后就是文本互动了!

      游戏内有这样的互动按钮,要你选择一个选项给出不同的结果。

      比如我选择游戏中一个最复杂的互动,我用流程图给各位写一下

      其中粉红色为小仙姑的台词,绿色的是主角的台词

      于是我们要开始调用【选择项】,看图就可以理解

      我们在这里引入一个【优先度】的概念,数值为2-9,注意是2-9,就算输入0、1都会变成默认的2,低优先度的行为不能打断,举个例子,

      默认情况下idle为2,触摸也为2,触摸动作的开始打断了正在进行的待机动画。

      一般情况下选择按钮都可以立刻中断当下动作,前往选择按钮指示的动作,但是当母事件的优先度大于选择事件时,选择将无法打断,就算勾选了【可被中断】也会继续。

      什么情况下需要勾选可被打断呢?

      我认为是触摸动作和文本,触摸一次后要看完动画才能再点让人觉得有点迟钝,当然具体情况具体分析~

      (一般情况下如果想缩短动作持续时间可以修改【动作时长】来实现)

      什么情况下不能勾选可被打断呢?

      优先度相同的特定互动事件发生的情况下

根据实验:

当事件A优先度小于B时,不论B是否勾选,A都无法打断B;

当事件A优先度等于B时,B只有勾选【可被打断】,A才可以打断B;

当事件A优先度大于B时,不论B是否勾选,A都可以打断B

  在A是B的选项的情况下:

当事件A优先度小于B时,不论B是否勾选,A都可以打断B;

当事件A优先度等于B时,不论B是否勾选,A都可以打断B;

当事件A优先度大于B时,不论B是否勾选,A都可以打断B;

得知如下信息:

1.是否勾选【可被打断】只影响{同}优先度的事件(优先度9除外);

2.选择项优先度永远最高,且不受任何影响,点击即切换

(笔者编写本篇的时候刚巧碰见一个问题,所有互动全部失灵,只有调到优先9才可以用,触摸后又可以使用了,这就不得不提到我自己的架构了,当时没有采用idle做待机,而是start循环,并且把所有事件的下一项都改成了start,莫名的调试之后得到了解决,我将这个问题归于错误的架构逻辑和滥用优先度,所以请不要滥用优先度,有可能导致意想不到的后果。)


碍于篇幅,这一篇只能讲这么多了,都是一些入门难度的了解和宝贵(?)的经验,但是读到这里你就可以还原游戏内90%效果,并且可以自己创新加入要素,包括我V1.2录入的109支签也是通过以上流程完成的。

下一篇开始要把(稍微有点)难的端上来了!包括if/elif的实现、浮点变量实战、引入布尔变量的思路、用流程图和Python语法优化自己的编程思路,主要是一些思路优化和深入使用,还是比较需要脑子和精力的,期待一下吧!


最后简单提一下我对live2D领域探索的体验,我认为其入门简单(不包括美术部分),稍微学习就可以上手创造很多东西,很有成就感,有点类似于我学Python和blender,非常鼓励大家当作乐趣入坑哇~


本期封面

都看到这了点个赞吧~