unity学习笔记-YourFirstGame6

简介

本文主要记载自己学习unity的过程,边看视频边写笔记,原视频为麦可老师(M_Studio)在B站发的Unity教程 Your First Game,笔记内容没那么详细,仅供复习使用,学习请前往观看麦可老师的视频

麦可老师在这节课主要讲了动画效果

一、添加一个animator组件
  首先选中player,选择右侧属性面板,点击addcomponent,搜索animator,点击添加该组件

二、为animator组件创建一个控制器

在assets目录下面创建一个文件夹命名为Animation,用来存放所有动画效果

然后在animation文件夹下面再创建一个文件夹Player,用来存放玩家的动画效果

右键选择Create-Animator Controller 命名为Player

然后把这个controller拖拽到player上Animator属性上contorller位置 然后unity会为我们自动将playercontroller挂载到player物体Animator上

三、创建动画效果

点击windows 选择animation 再选择第一项animation,打开animation窗口

将animation窗口放到一个合适的位置,点击create,创建第一个动画,命名为Idle,用来表示站立动画

进入Assets\Sunnyland\artwork\Sprites\player\idle文件夹,找到站立动画素材,将素材像素(pixels per unit)设置为16

然后将动画的每一帧图片放到这个窗口的时间轴里

点击播放按钮就可以看到主人公有动画效果了

但是这个速度太快了 可以拉长时间轴 将效果调整为最佳效果

四、添加跑动动画

点击window菜单,以此点击animation->animator,打开animator窗口,再点击player,即可查看当前的动画关系

回到animation窗口,点击idle右边的小三角号,选择create new clip,将其命名为run.anim,放到Assets\Animation\player目录下,使用刚才添加站立动画的方式为run添加一个跑动的效果

(ps:如果动画没有循环效果,请找到对应后缀名为anim的动画文件,将loop time属性勾上)

五、关联跑动动画

刚才我们添加完了跑动动画,但是还没有方法让角色可以从站立进入到跑动动画,打开animator窗口,右键run动画,选择make transition,会出现一个箭头,将箭头连接到idle上,这样我们就实现了跑步动画过渡到站立的动画,同样的方法再将站立动画过渡到跑步动画

然后将左侧面板切换到parameter,点击加号,添加一个float类型的参数,命名为running,然后选择由idle过渡到run的箭头,点击属性面板的condition,点击加号添加一个条件running greate 0.1,代表如果running大于0.1的时候,就将动画从idle过渡到run,因为我们需要瞬间过渡,所以还需要将过度时间设置为0,修改transition duration属性,将其设置为0,同样的,再点击run过渡到idle的箭头,将其设置为running小于0.1

六、使用代码进行动画切换

刚才已经做好了动画的过渡,但是什么时候进行过渡还没有设置,所以需要编写代码进行控制

打开playercontroller,先声明一个变量anim,再将animator组件拖拽到上面

1
2
3
4
/// <summary>
/// 声明一个变量表示动画效果
/// </summary>
public Animator anim;

在角色移动的那添加代码

1
anim.SetFloat("running", Mathf.Abs(facedirection));

上面代码的意思是,如果角色移动了,就将running参数设置为facedirection的绝对值

完整代码如下

1
2
3
4
5
6
7
8
9
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
51
52
53
54
55
56
57
58
59
60
61
using UnityEngine;

public class PlayerController : MonoBehaviour
{
/// <summary>
/// 声明一个变量用来接收刚体
/// </summary>
public Rigidbody2D rb;
/// <summary>
/// 声明一个变量代表速度
/// </summary>
public float speed;
/// <summary>
/// 声明一个变量代表跳跃力
/// </summary>
public float jumpForce;
/// <summary>
/// 声明一个变量表示动画效果
/// </summary>
public Animator anim;

// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
//void Update()
//{
// MoveMent();
//}
//根据电脑配置进行每帧调用
void FixedUpdate()
{
MoveMent();
}

void MoveMent()
{
//horizontalMove值分别为 左-1 右1 不动 0
float horizontalMove =Input.GetAxis("Horizontal");//Input.GetAxis获取-1~1之间的数
float facedirection= Input.GetAxisRaw("Horizontal");//GetAxisRaw 只能获取到-1,0,1这三个数 用来判断角色脸的朝向
if (horizontalMove!=0)
{
//horizontalMove!=0证明角色在动
rb.velocity = new Vector2(horizontalMove*speed*Time.deltaTime,0);//方向乘以速度 Y轴不动 *Time.deltaTime代表两帧之间的时间差(物理运行的百分比) 兼容多种电脑配置
anim.SetFloat("running", Mathf.Abs(facedirection));
}
if (facedirection!=0)
{
transform.localScale = new Vector3(facedirection, 1, 1);//改变x的值和朝向一致
}
//获取按下跳跃键
if (Input.GetButtonDown("Jump"))
{
rb.velocity= new Vector2(rb.velocity.x,jumpForce * Time.deltaTime);
}
}
}

运行游戏,按方向键,我们的角色就有了跑步的动画了

第六节课到这里 原视频地址