眼睛慢慢眯成一条线的人都是实力很强劲的,教你在Unity中通过BlendShape来实现角色面部表情过渡切换(Animation)
2021-05-12 09:08
916 查看
文章目录
- 一、前言
- 二、BlendShape(动画师、MAYA)
- 三、Unity控制BlendShapes
- 1、SkinnedMeshRenderer控制BlendShape
- 2、Animation控制BlendShape
一、前言
点关注不迷路,持续输出
Unity干货文章。
嗨,大家好,我是新发。
在
Unity项目中,我们可能需要实现
3D角色表情的过渡切换,比如像这样子:
在
Unity中如何做这个功能呢?今天就来跟大家讲一下。
二、BlendShape(动画师、MAYA)
在
Maya中,动画师可以使用
BlendShape绑定好表情,动画师只需要制作好
A表情、
B表情、
C表情等,通过
BlendShape就可以很方便地进行表情之间的插值过渡了。
注意
BlendShape与骨骼动画不同,骨骼动画需要先将网格绑定骨骼,由骨骼来驱动网格;而
BlendShape不需要骨骼,
BlendShape很适合用作面部表情的实现。
动画师做好
BlendShape后,
Unity客户端程序员将模型导入
Unity工程中,在
Unity中勾选模型的
Import BlendShapes。
这样,在
Unity中我们就可以通过
BlendShape滑块来调节表情的过渡啦。
效果如下:
三、Unity控制BlendShapes
上面我们是手动调节
BlendShape的滑块,我们如何通过代码来控制
BlendShape呢?
有两种方式:
1、直接通过
SkinnedMeshRenderer组件访问
BlendShape;
2、制作成
Animation,在
Animation中控制
BlendShape,然后由代码来控制
Animation。
1、SkinnedMeshRenderer控制BlendShape
接口:
// SkinnedMeshRenderer.cs public void SetBlendShapeWeight(int index, float value);
参数
index就是
BlendShape的索引,从0开始,参数
value是滑块的值,范围:0~100。
2、Animation控制BlendShape
动画师将表情制作成
Animation,特定组合的
BlendShape其实就是一个表情,比如眉毛上抬,眼睛睁大,嘴巴张开这三个组合起来是一个表情,这样做成
n个
Animation动画。
把这些动画组织到
Animator状态机中。
关于
Animator的使用,可以参见我之前写的这篇文章:《Unity动画状态机Animator使用》
接着,我们就可以通过播放动画来实现表情的过渡了。
// Animator.cs public void CrossFade(string stateName, float normalizedTransitionDuration);
参数
stateName是动画状态名称,比如
smile,参数
normalizedTransitionDuration是动画融合归一化时间。
我们可以测试下
normalizedTransitionDuration分别为
0、
0.3f、
1三种情况的融合效果:
为0的情况:
为0.3f的情况:
为1的情况:
四、结束语
好了。
喜欢
Unity的同学,不要忘记点击关注,如果有什么
Unity相关的技术难题,也欢迎留言或私信~
感谢阅读,我们下次再见。
相关文章推荐
- Unity 通过Animation实现控件位置的转换
- iOS: 通过addChildViewController实现 Segment 下的 View 的切换
- DirectShow中通过IAMStreamSelect接口实现多音轨切换
- 通过ViewPager控件实现多张图片动态切换
- 【Unity快速实现小功能】实现摄像机跟随角色移动功能
- Unity游戏开发日记-炉石传说之卡牌切换效果实现
- Vue通过控制样式实现顶部导航点击切换、侧边栏点击切换、手风琴折叠面板等功能
- Unity实现场景切换的方法
- 如何在Unity5.0 下实现贴图材质的Animation动画功能
- Unity_如何实现游戏中角色多段跳的效果(射线实现)
- Kbengine+Unity实现简单的注册登录 登陆成功切换场景
- 微信的API都是通过https调用实现的,分为post方法调用和get方法调用。不需要上传数据的采用get方法(使用IntraWeb开发)
- unity 通过点击游戏小地图,来移动主相机功能实现
- [iOS]通过UIScrollView和UIPageControl实现滑动切换的效果
- 通过超链 实现中英文的切换
- IM即时通讯项目讲解(一)--实现类似qq微信表情面板无缝切换
- Unity UGUI 通过循环实现多个Toggle开关监听
- 通过Keepalived实现Redis Failover自动故障切换功能
- 通过WebView向html页面注入js代码,实现WebView切换白昼模式/夜间模式
- Redis主从复制 - 通过Keepalived实现Redis Failover自动故障切换功能