unity进阶篇2-角色的程序写入

如何让角色在2D里移动

设定wsad或者 up/down/left/right为上下左右移动

相关原理和文档:2D角色移动 b站视频54 b站视频55

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Update()
{
//获取水平输入
float horizontal = Input.GetAxis("Horizontal");
//获取垂直输入
float vertical = Input.GetAxis("Vertical");

//创建一个Vector2的对象position,用来获取当前角色位置。
Vector2 position = transform.position;
//更改position的x坐标值,让它每帧加0.1,update就是一帧一帧循环的。
position.x = position.x + 0.1f*horizontal;
position.y = position.y + 0.1f*vertical;
//更新位置的数据后,我们需要讲更新后的数据输入到新的位置(更新transform)
transform.position = position;
}
  • 明明按下去只增加0.1,为什么速度会这么快呢

由于目前的电脑性能很好,所以一秒可能几百甚至上千帧,如果想要得到我们想要的流畅度和速度就要进行锁帧数

1
2
3
4
5
6
7
8
9
10
void Start()
{
//锁帧
//只有将垂直同步为0才能锁帧,否则锁帧无效
//垂直同步的作用就是显著减少游戏画面撕裂、跳帧,因为画面的渲染不是整个画面一同渲染的,而是逐行或逐列渲染的,能够让FPS保持与显示屏的刷新率相同。
QualitySettings.vSyncCount = 0;
//设定应用程序帧数为60
Application.targetFrameRate = 60;

}
  • 锁帧了限制了游戏性能,如果想要解放游戏性能并得到我们想要的速度怎么办

利用时间改变每一秒的帧数

例如:

你需要通过将移动速度乘以 Unity 渲染一帧所需的时间来更改移动速度。如果游戏以每秒 10 帧的速度运行,则每帧耗时 0.1 秒。如果游戏以每秒 60 帧的速度运行,则每帧耗时 0.017 秒。如果将移动速度乘以该时间值,则移动速度将以秒表示。

引入一个新的概念 Time.deltaTime 每帧的时间间隔,float 类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public float Speed = 0.1f;
// Update is called once per frame
void Update()
{
//获取水平输入
float horizontal = Input.GetAxis("Horizontal");
//获取垂直输入
float vertical = Input.GetAxis("Vertical");

//创建一个Vector2的对象position,用来获取当前角色位置。
Vector2 position = transform.position;
//更改position的x坐标值,让它每帧加0.1,update就是一帧一帧循环的。
position.x = position.x + Speed*horizontal*Time.deltaTime;
position.y = position.y + Speed*vertical*Time.deltaTime;
//更新位置的数据后,我们需要讲更新后的数据输入到新的位置(更新transform)
transform.position = position;
}
  • Copyrights © 2022-2024 Jessy Huang
  • Visitors: | Views:

请我喝杯咖啡吧~