• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Ruby\'sAdventure06人物动画的添加

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

6.

6.1动画帧

6.2关联动画

6.3添加跑动动画

 

动画帧

首先在Windows中打开Animation界面,create new floder,建立四个方向的ruby的待机动画godown\goup\goright\goleft

将Assets中的动画拖入到里面,拖动动画帧,这里我们复制动画的第一帧粘贴到最后一帧的后面,这样能够使得动画更加自然。总长设定为0.40.

这里因为官方资源没有ruby向右的动画帧,所以我们复制向左的所有帧粘贴到goright中后,选择Add Property -> Sprite Renderer -> Flip X

删去自动添加的一帧,选择所有帧,勾选

 

 运行动画,就会发现人物朝右啦!

关联动画

之后,我们在Animation文件夹中找到这个并打开

 

 选中这些组件并delete

 

 右键新建Blend Tree,双击进入Blend Tree,打开parameteris面板,删去blend,点击加号,新建float类型

 

 新建两个float类型,命名为look x  ,  look y .

点开混合树,查看面板,选择Blend Type -> 2D FreeForm Directional

Parameters选择look x and look y

点开 ‘+’ 选择 Add Motion Field,添加四个,分别对应上左右下。

选中我们之前设置好的动画,设置X & Y 数值。

这里 0 代表无的意思,1代表向正方向(向上或向右),-1代表负方向(向下或向左),于是得到如下图的设置:

 之后打开在ruby身上的C#脚本,编辑加入设置的待机动画。

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 
 5 public class PlayerContal : MonoBehaviour
 6 {
 7     public float speed = 5f;
 8 
 9     Rigidbody2D rbody;
10 
11     private float _x;
12     private float _y;
13 
14     private Vector2 lookDir = Vector2.down;//向量向下  //////
15     private Vector2 currentInput;
16     private Animator _animator;    ///////
17 
18     void Start()
19     {
20         rbody = GetComponent<Rigidbody2D>();
21         _animator = GetComponent<Animator>();      //////
22         //初始化
23     }
24 
25     void Update()
26     {
27         _x = Input.GetAxis("Horizontal");
28         _y = Input.GetAxis("Vertical");
29 
30         Vector2 movement = new Vector2(_x, _y);
31       ////////******///////
32         //动画部分,移动发生时,对朝向进行赋值
33         if(!Mathf.Approximately(movement.x, 0.0f) ||  !Mathf.Approximately(movement.y, 0.0f))
34         {
35             lookDir.Set(movement.x, movement.y);
36             //对朝向进行归一化,更好的控制人物
37             lookDir.Normalize();
38         }
39         //选择SetFloat和之间设置的浮点型进行对应
40         //lookx looky 就是之前设置的blend tree中的名称
41         _animator.SetFloat("lookx",lookDir.x);
42         _animator.SetFloat("looky",lookDir.y);
43       ////////*******///////
44         currentInput = movement;
45     }
46 
47     private void FixedUpdate()
48     {
49         Vector2 position = rbody.position;
50         position += currentInput * speed * Time.deltaTime;
51         rbody.MovePosition(position);
52     }
53 }

加入了Animator和向量lookDirection。!Mathf.Approximately(string name, float num),是用来判断位置移动,是将位置移动与0.0进行比较(浮点数的比较)。

lookDirection.Set();是对朝向进行赋值,是将我们通过键盘移动的值和lookDirection关联起来。

lookDirection.Normalize();我们只考虑方向,所以要进行归一化,方向在0~1范围,就不会出现奇怪的朝向。

然后将设置的lookx和looky和Animator关联起来。增加Animator变量,并进行GetConponent初始化。

_animator.SetFloat("string", ...)(这里是要和我们之前设置好的东西一致,SetFloat\SetBool\...)

注意_animator.SetFloat中的名称一定要和之前设置的名称相同,比如设置的是"look x",就不能写成"lookx",这里我出错了之后将unity中的设置改为了lookx & looky

添加跑动动画 


类似于之前添加帧动画的操作,新建后拖入帧,然后复制第一帧到最后一帧的位置。

回到我们建立的Animation文件夹下的Player的图中,删除新加入的runup...,新建Blend Tree,双击进入Tree,与上面同样的操作,注意一定要是上左右下。如图:

 

 

 然后回到面板建立Run与Idle两个树之间的联系。

右键选中Make Translation

 

 

 双向指向,因为两者同时有反馈能够传达给对方。接下来设置联系的属性。选中由Idle到Run的箭头,右边面板更改属性如下(Speed依然是在parameters中添加的):

 

 

 

 就是说,当我的速度大于0.1时,我操作的人物的运动状态更改为Run。

由Run到Idle的箭头则设置为speed -> Less -> 0.1

当速度小于0.1时人物运动状态更改为idle 。

接下来设置运动状态的转移时间:

因为我们希望人物能够立刻更改运动状态,所以将Inspector -> Has Exit Time去掉勾选 -> Setings -> Fixed Duration去掉勾选 -> Transtion Duration设为0

两个箭头是一样的设置(๑ᵔ⌔ᵔ๑).

 

之前图片上面的参数设置错了不知道你有没有发现TVT.

让我们先去编码吧!

_animator.SetFloat("speed", movement.magnitude);
 //magnitude(求模)是将数值变换限制在我们规定的范围内

只加入了这一句就能够完成我们所需要的功能了!

哈哈,但是我运行之后发现我的人物在跑动的时候只有向后和向左的动画,这是怎么回事呢?找了半天最后发现是这里的问题orz

 

 

 之前两个元素都选成了lookx! orz!

可以成功运行了!还真是不容易呢!(๑ᵔ⌔ᵔ๑)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ruby中调用java发布时间:2022-07-13
下一篇:
ruby三日游之后(一)——Ruby对象的一次探索发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap