unity 动画系统教程(二)

测试一下控制角色,这样在上次人物动作的基础上让角色可以在场景里面跑起来。首先为角色增加一个CharacterController。然后设定一些变量控制角色的速度。

[C#]  纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var speed = 3.0; 
 
var rotatationSpeed = 200.0; 
 
private var curSpeed = 0.0; 
 
  
function Update () { 
 
     // Rotate around y-axis 
 
     var newRotation = Input.GetAxis( "Horizontal" ) * rotatationSpeed; 
 
     transform.Rotate(0, newRotation * Time.deltaTime, 0); 
 
  
     // Calculate speed 
 
     var newSpeed = Input.GetAxis( "Vertical" ) * speed; 
 
     if (Input.GetKey( "left shift" )) 
 
         newSpeed *= 1.5; 
 
  
     // Move the controller 
 
     var controller : CharacterController = GetComponent (CharacterController); 
 
     var forward = transform.TransformDirection(Vector3.forward); 
 
     controller.SimpleMove(forward * newSpeed); 
 
  
}<!--DVFMTSC-->


要让我们控制的机器人可以一边跑一边射击,那么就必须要用到 unity 中一个非常重要的动画技术 “动画混合Animation Mixing”。
找个动画文件来看看: robot@idle2shoot.fbx 这个动画。在这套动画文件中,包含了很多的动画动作。我们的每一个动画都包含了好多的动作,其中包括了 手上的动作和腿脚的动作。通常情况下我们播放动画就是直接播放一个动作就可以了,但是遇到需要动作融合的时候,就不能直接的调用动画,而是要选用其中的一部分有用的动画。 unity 3d 教程手册

[/url]

Unity3D教程:动画系统教程(二)

现在我们要对Run这个动作和Shoot两个动作进行混合。先来看看Shoot的动作序列:在这个动作中基本上只包含了两个上身持枪和动作,下身基本上没动。这个动作融合主要是针对shoot的上半身。
[url=http://www.unitymanual.com/wp-content/uploads/2013/05/0_1320638763xHGG.jpg]

unity3d教程:动画系统教程(二)


    首先,利用Shoot动画片段,生成一个新的动画片段“shootUpperBody”

[C#]  纯文本查看 复制代码
?
1
2
3
4
5
6
7
animation.AddClip(animation[“shoot”].clip, “shootUpperBody”);
 
  
  animation[“shootUpperBody”].AddMixingTransform(transform.Find(“mover/roothandle/spine1”));
 
  
  animation[“shootUpperBody”].AddMixingTransform(transform.Find(“mover/gun”));


增加两个混合矩阵,让动作融合。这个动画角色的动作骨骼矩阵包含四部分,我们选择的spine1是上身的动作矩阵的根矩阵:

[url=http://www.unitymanual.com/wp-content/uploads/2013/05/2_%E5%89%AF%E6%9C%AC.jpg][/url]

Unity3D教程:动画系统教程(二)

然后在运动的代码中调用

[C#]  纯文本查看 复制代码
?
1
animation.CrossFadeQueued( "shootUpperBody" , 0.3, QueueMode.PlayNow);


    然后跑起来的的角色,就有shoot和run混合的效果。Unity3D教程手册

[C#]  纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
function Update () { 
 
  
     if (Mathf.Abs(Input.GetAxis( "Vertical" )) > 0.1 || Mathf.Abs(Input.GetAxis( "Horizontal" )) > 0.1) 
 
    
 
         animation.CrossFade( "run" ); 
 
         animation[ "run" ].speed = Mathf.Sign(Input.GetAxis( "Vertical" )); 
 
    
 
     else 
 
         animation.CrossFade( "idle" ); 
 
  
     // Play the cross fade animation 
 
     if (Input.GetButtonDown ( "Jump" )) 
 
    
 
         animation.CrossFade( "jump" , 0.3); 
 
     }    
 
  
     // Shoot     
 
     if (Input.GetButtonDown ( "Fire1" )) 
 
    
 
     // We are running so play it only on the upper body 
 
         if (animation[ "run" ].weight > 0.5) 
 
             animation.CrossFadeQueued( "shootUpperBody" , 0.3, QueueMode.PlayNow); 
 
         // We are in idle so play it on the fully body 
 
         else 
 
             animation.CrossFadeQueued( "shoot" , 0.3, QueueMode.PlayNow);    
 
      
 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值