目录
先解释一下代码中会出现的speed:
public float speed = 0.1f;
一、导入
首先我们来试试仅仅让人物无条件开始移动,不用键盘加以控制
代码
void Update(){
//创建一个Vector2对象position,用来获取当前对象的位置
Vector2 position = transform.position;
//更改position的x坐标值,让其加上0.1
position.x += speed;
transform.position = position;
}
以上代码的效果是人游戏对象以每帧0.1米的速度无条件向右移动,当游戏开始运行,此游戏对象立即向右移动,移动快慢取决于各位的电脑。
代码使用分析
(1)Vector2 二维向量:
在 Unity 中,Transform 值使用 x 表示水平位置,使用 y 表示垂直位置,使用 z 表示深度。这 3 个数值组成一个坐标。由于此游戏是 2D 游戏,你无需存储 z 轴位置,因此你可以在此处使用 Vector2 来仅存储 x 和 y 位置。
另外,Transform 中 position 的类型,也是 Vector2。
(2)transform:
可以暂时理解为代指当前游戏对象。
二、使用Input.GetKey来获取键盘中按下的键
用wsda移动,用nput.GetKey获取按键
代码
void Update(){
//获取当前位置
Vector2 position = transform.position;
if(Input.GetKey("d"))
{
position.x += speed;
}
if (Input.GetKey("a"))
{
position.x -= speed;
}
if (Input.GetKey("w"))
{
position.y += speed;
}
if (Input.GetKey("s"))
{
position.y -= speed;
}
transform.position = position;
}
代码使用分析
(1)Input类:
使用该类来读取传统游戏输入中设置的轴/鼠标/按键,以及访问移动设备上的多点触控/加速度计数据。若要使用输入来进行任何类型的移动行为,请使用 Input.GetAxis。
三、获取水平输入与竖直输入
用Horizontal与Vertical来获取水平输入与竖直输入
代码
void Update(){
//获取水平输入,按向左,会获得-1.0f;按向右,会获得0.1f
float horizontal = Input.GetAxis("Horizontal");
//获取垂直输入,按向下,会获得-1.0f;按向右,会获得0.1f
float vertical = Input.GetAxis("Vertical");
//获取当前对象位置
Vector2 position = transform.position;
//更改位置
position.x += speed * horizontal;
position.y += speed * vertical;
//新位置
transform.position = position;
}
代码使用分析
(1)Horizontal与Vertical:
在 Unity 项目设置中,可以通过 Input Manager 进行默认的游戏输入控制设置
Edit > Project Settings > Input
键盘按键,以 2 个键来定义轴:
负值键 negative button,被按下时将轴设置为 -1
正值键 positive button ,被按下时将轴设置为 1
Horizontal : 水平轴 对应 X 轴
Vertical :纵轴 对应 Y 轴
等一下,是否发现上面代码运行起来之后人物的移动会特别快(尤其是那些电脑好的家伙),因为上面的速度单位是:米/帧,所以不同电脑会有不同的移动效果,下面我们将其单位改为:米/秒。
四、帧为参照改为秒为参照
Time.deltaTime出场
代码
void Update(){
//获取水平输入,按向左,会获得-1.0f;按向右,会获得0.1f
float horizontal = Input.GetAxis("Horizontal");
//获取垂直输入,按向下,会获得-1.0f;按向右,会获得0.1f
float vertical = Input.GetAxis("Vertical");
//获取当前对象位置
Vector2 position = transform.position;
//更改位置
//将每帧每米变成每秒每米
position.x += speed * horizontal * Time.deltaTime;
position.y += speed * vertical * Time.deltaTime;
//新位置
transform.position = position;
}
代码使用分析
Time.deltaTime:
是每帧的时间间隔,float 类型。
一般将这个值,用在 Update 方法中,乘以移动的距离(或角度),用来获取恒定(不同硬件水平的电脑间)的速度。
unity官方文档:
好啦,这就是这次学习的小小总结!