测试一下控制角色,这样在上次人物动作的基础上让角色可以在场景里面跑起来。首先为角色增加一个CharacterController。然后设定一些变量控制角色的速度。
要让我们控制的机器人可以一边跑一边射击,那么就必须要用到 unity 中一个非常重要的动画技术 “动画混合Animation Mixing”。
找个动画文件来看看: robot@idle2shoot.fbx 这个动画。在这套动画文件中,包含了很多的动画动作。我们的每一个动画都包含了好多的动作,其中包括了 手上的动作和腿脚的动作。通常情况下我们播放动画就是直接播放一个动作就可以了,但是遇到需要动作融合的时候,就不能直接的调用动画,而是要选用其中的一部分有用的动画。 unity 3d 教程手册
[/url]
现在我们要对Run这个动作和Shoot两个动作进行混合。先来看看Shoot的动作序列:在这个动作中基本上只包含了两个上身持枪和动作,下身基本上没动。这个动作融合主要是针对shoot的上半身。
[url=http://www.unitymanual.com/wp-content/uploads/2013/05/0_1320638763xHGG.jpg]
首先,利用Shoot动画片段,生成一个新的动画片段“shootUpperBody”
增加两个混合矩阵,让动作融合。这个动画角色的动作骨骼矩阵包含四部分,我们选择的spine1是上身的动作矩阵的根矩阵:
[url=http://www.unitymanual.com/wp-content/uploads/2013/05/2_%E5%89%AF%E6%9C%AC.jpg][/url]
然后在运动的代码中调用
然后跑起来的的角色,就有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
|
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]
首先,利用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);
}
}
|