提问 发文

Unity-Live2d(表情系统,姿势动作与口型功能的实现)

微微菌

| 2024-04-23 15:26 138 0 0

Unity-Live2d
概述:这是我学习Unity中Live2d的相关操作的一个笔记,欢迎各位同好和大牛的指点。(参考siki学院出的视频学的)

表情系统

Unity种live2D的表情系统与动作系统其实比较类似,所以这里贴上动作系统笔记蓝链做参照 动作系统笔记,所以在这个笔记中我就大略演示下代码好了
首先我们需要定义出:表情文件的导入,表情实体,表情管理具体代码示例如下:


//表情文件
public TextAsset[] expressionFiles;
//表情实体
public L2DExpressionMotion[] expressions;
//表情管理(表情管理与动作管理用的是同一个类)
private MotionQueueManager expressionMotionQueueManager;‘’


  • 接着是进入start方法内进行实例化,加载表情文件(手动拖拽 json类型表情文件挂载到expressionFiles数组上),表情文件转化为表情实体
    具体演示代码如下:

//表情管理的实例化
expresionMotionQueueManager = new MotionQueueManager();
//表情实体数组的实例化
expressions = new L2DExpressionMotion[expressionFiles.Length];
//表情的实体化
for(int i=0;i<expressions.Length;i++)
{
expressions[i] = L2DExpressionMotion.loadJson(expressionFiles[i].bytes);
}


  • 最后就是将动作挂载到表情管理上写上对应的测试代码,测试播放我们的表情就好了


if(Input.GetKeyDown(KeyCode.M))
{
motionIndex += 1; //计数器加
if(motionIndex>expressions.Length)
{
motionIndex = 0;
}
//改变表情管理所绑定表情
expressionMotionQueueManager.startMotion(expressions[motionIndex]);
}
//模型参数更新
expressionMotionQueueManager.updateParam(live2DModel);


注: 这里出现一个问题,当测试一套表情之后,会发现人物某些表情细节不会再变回来了,这里是因为表情中有一个参数在表情改变时是累加的,加上去之后不会自动回来。关于这个问题的话,再之后的开发中我们直接使用官方提供的框架去写就好了。(所以该问题暂时搁置即可)
姿势动作与口型功能的实现

姿势动作的实现中有需要注意的是,有些动作的变化幅度比较大,诸如将两侧的手臂拉到胸前做成一个抱胸的动作,对于live2D模型显然有些难搞,所以我们就需要“四只手”,对没错,需要四只手来实现,俩只放在胸前,俩只放在身体两侧,不需要用的两只便使用代码隐藏掉即可,隐藏模型一部分我们用到之前提到过的,模型部分透明度设置,需要用到模型类里内置的一个方法——live2DModel.setPartsOpacity();这个方法里我们需要用的有俩个参数,第一个为所需要设置的部分的ID,第二个为设置的透明度。
口型功能实现的话,有俩种方法,一种是先封装一份口型张合的动作,然后适时调用,一种是需要了解java,ios什么的一些内置API,用其去读取播放音频的波段,再读出对应音频数据去设置口型参数。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_44579240/article/details/100099723

收藏 0
分享
分享方式
微信

评论

游客

全部 0条评论

10603

文章

10.49W+

人气

19

粉丝

1

关注

官方媒体

轻松设计高效搭建,减少3倍设计改稿与开发运维工作量

开始免费试用 预约演示

扫一扫关注公众号 扫一扫联系客服

©Copyrights 2016-2022 杭州易知微科技有限公司 浙ICP备2021017017号-3 浙公网安备33011002011932号

互联网信息服务业务 合字B2-20220090

400-8505-905 复制
免费试用
微信社区
易知微-数据可视化
微信扫一扫入群