12345 第1页 | 共5 页下一页
返回列表 发新帖
查看: 29040|回复: 41
打印 上一主题 下一主题

[教程] Mecanim动画系统 - 使用Blend Trees控制角色动作

[复制链接]

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

跳转到指定楼层
楼主
发表于 2013-10-4 18:27:52 |只看该作者 |倒序浏览
pstatus"> 本帖最后由 艾西格亚 于 2013-10-9 08:15 编辑

在上一个教程里面我们对于Unity 4自带的Mecanim动画系统已经有了初步的认识,相信很多朋友看过教程后也会发现,原来Mecanim的操作竟然是如此的容易,只需简单的几个步骤就可以将角色的动画复制到其他物件,而这个骨架复制功能在以往是必须借由其他3d软件制作后才能导入Unity使用。

请参考 :五分钟了解Mecanim角色动画系统 - http://www.narkii.com/club/thread-305414-1.html

在第二阶段的教程里面,我们将延续上个教程的动作导入,在模型上面结合更多的动画与脚本的编写,让场景里面的角色真正的动起来。

安装附件的资源包后,将士兵模型(Swat)导入,目前在这个模型上面只有一个idle的基本动画,在Animator的组件里面可以查看到Controller使用的是swatController01的动画控制。

1.jpg

2.jpg

如图所示,这是在运行后士兵模型的idle动作:

3.jpg

接下来,我们需要对几段准备导入的动画进行设置,选择Original_Character > Swat@rifle_run文件,在Rig模式下将Animation Type 更换为Humanoid,Avatar Definition设置为Copy From Other Avatar,在Source栏位里面将设置好的SwatAvatar添加进来。

4.jpg

在Animations的设置内勾选Loop Pose, Root Transform Rotation > Bake into Pose与Root Transform Position(Y) > Bake into Pose、Based Upon 分别设置为Body Orientation与Original,然后按下Clamp Range完成此段动作的分割,最后按下Apply完成设置即可。

5.jpg

接着将以下的几个动画文件也做出与Swat@rifle_run相同的设置:Swat@run_backwards、 Swat@strafe、Swat@strafe_2、Swat@strafe_left、Swat@strafe_right、Swat@walking、与Swat@walking_backwards。

设置完成动画文件之后,需要对士兵模型进行角色控制器的添加,方法是Component > Physics> Character Controller,如图所示,添加角色控制器后在士兵模型上多了一个绿色的胶囊物件。

6.jpg

由于默认的胶囊控制器位置与角色的高度是不匹配的,所以需要进行几个数值的调整,如图所示,将Center Y值设置为0.9的高度,Radius与Height分别设置为0.34与1.79的数值。

7.jpg

在调整数值后,现在角色上面的胶囊控制器已经处在一个正确的位置。

8.jpg

在Project目录内选择swatController01,按下Ctrl +D 复制后将名称更换为swatController02,然后双击此文件打开Animator设置窗口,在空白处点右键选择Create State > Empty创建一个新的State后并更名为Move,如图所示:

9.jpg

双击Move进入编辑模式,按下右下角的+号新增三个Blend Tree,然后将这三个Blend Tree分别命名为StrafeLeft、WalkRun、StrafeRight。

10.jpg

在Animator窗口左下方按+号新增三个Float,分别将其名称更换为xSpeed、zSpeed与Speed,如图所示:

11.jpg

选择WalkRun,按下+号选择Add Motion Field新增五个动作栏位,同时将Parameter更换为zSpeed,表示WalkRun里面的动作设置是对z轴的方向进行判断,然后将Parameter栏位下的两边数值改为-2与2,如图所示:

12.jpg

在新增的五个栏位里分别将run backwards、walking backwards、rifle aiming idle、walking与waklking backwards添加进来,如图所示:

13.jpg

添加后的WalkRun具备了五个动作的设置,Blend Tree要做的就是让这些动作在转换时能以平滑的过渡方式处理,而不是直接从某一个动作直接跳到另一个,否则角色在移动过程中会出现很不自然的现象。

14.jpg

接着在StrafeLeft里面新增三个Motion Field,Parameter设置为xSpeed, 两边的数值为-2与0,然后将strafe、strafe Left与rifle aiming idle添加到这三个栏位。

16.jpg

在StrafeRight里面同样的新增三个Motion Field、Parameter设置为xSpeed, 两边的数值为0与2,然后将rifle aiming idle、strafe right、strafe 2添加到这三个栏位。

17.jpg

Blend Trees的动作设置完成后,接着需要进行Idle与Move的Transition(融接),这里要做的是一个判断的设置,选择Idle,按下右键选Make Transition,然后连接到Move。点选Idle与Move的连接线使其成为蓝色的设置状态。

18.jpg

19.jpg

将Conditions的条件更换为Speed,Greater 01的设置,表示角色的移动数值大于0.1时就切换为Move的动作状态,如图所示:

20.jpg

选择Move,按下右键选Make Transition连接到Idle,再点选连接线使其成为蓝色的设置状态。

21.jpg

将条件的设置更换为Speed , Less 01,表示角色的移动速度小于0.1时就切换到Idle的状态。

22.jpg

完成Blend Tree的设置后,最后就是增加一个动作控制的脚本,这里我们用的是C#来写入角色需使用的脚本内容:

using UnityEngine;
using System.Collections;

public class BasicController02 : MonoBehaviour {

    private Animator animator;
    private CharacterController controller;
    public float transitionTime = 0.25f;
   
    void Start () {
    controller = GetComponent<CharacterController>();
    animator = GetComponent<Animator>();
        if(animator.layerCount >= 2)
        animator.SetLayerWeight(1, 1);
    }
   
    void Update () {
        float accelerator = 1.0f;
        if(controller.isGrounded){
            if (Input.GetKey (KeyCode.RightShift) ||Input.GetKey
    (KeyCode.LeftShift) ){
            accelerator = 2.0f;
            } else if(Input.GetKey (KeyCode.RightAlt) ||Input.
    GetKey (KeyCode.LeftAlt) ){
            accelerator = 1.5f;
        } else {
            accelerator = 1.0f;
        }
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        float xSpeed = h * accelerator;
        float zSpeed = v * accelerator;
        animator.SetFloat("xSpeed", xSpeed, transitionTime,
            Time.deltaTime);
        animator.SetFloat("zSpeed", zSpeed, transitionTime,
            Time.deltaTime);
        animator.SetFloat("Speed", Mathf.Sqrt(h*h+v*v),
            transitionTime, Time.deltaTime);
        
        }


选择士兵模型,在Controller的栏位里面添加之前设置好的swatController02,然后将写好的BasicController脚本拖曳到士兵模型即可。

23.jpg

按下Play进行士兵模型的动作测试,用来WASD控制士兵的移动方向,如配合Shift与Alt键则会做出不同程度的加速效果。

24.jpg
25.jpg
26.jpg

更多的Unity技术交流与分享请加入:纳金网Unity论坛专属交流群 - 218689657


Original_Character.zip

15.04 MB, 下载次数: 4706

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏6 支持支持0 反对反对0
回复

使用道具 举报

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38266
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2013-10-4 20:29:44 |只看该作者
不错的混合式动画流程,谢谢了
回复

使用道具 举报

may    

8830

主题

80

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52304
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

板凳
发表于 2013-10-4 21:44:16 |只看该作者
不错的教程分享
回复

使用道具 举报

ku 智囊团   

89

主题

2

听众

5万

积分

首席设计师

Rank: 8Rank: 8

纳金币
25
精华
1

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2013-10-4 22:49:09 |只看该作者
不错的混合式动画流程
回复

使用道具 举报

Sora    

0

主题

1

听众

86

积分

设计初学者

Rank: 1

纳金币
4
精华
0

活跃会员 灌水之王

5#
发表于 2013-10-4 22:52:36 |只看该作者
這系統真的好用呢!
回复

使用道具 举报

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2013-10-5 19:38:46 |只看该作者
很不错的教程,谢谢了!
回复

使用道具 举报

ZackD    

715

主题

22

听众

4万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
26216
精华
17

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2013-10-6 14:26:05 |只看该作者
Controller是只能用在两足的模型吧?如果是类似机器人的结构?
回复

使用道具 举报

may    

8830

主题

80

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52304
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

8#
发表于 2013-10-7 10:15:45 |只看该作者
ZackD 发表于 2013-10-6 14:26
Controller是只能用在两足的模型吧?如果是类似机器人的结构?

估计不能直接套用在非标准的两足模型上
回复

使用道具 举报

0

主题

2

听众

6150

积分

高级设计师

Rank: 6Rank: 6

纳金币
62
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

9#
发表于 2013-10-7 21:04:01 |只看该作者
谢谢分享。。。。
回复

使用道具 举报

33

主题

1

听众

2680

积分

中级设计师

Rank: 5Rank: 5

纳金币
559
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

10#
发表于 2013-10-8 10:00:24 |只看该作者
不错不错, 欢迎继续
回复

使用道具 举报

12345 第1页 | 共5 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-6 23:11 , Processed in 0.108384 second(s), 35 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部