unity学习:控制人物的移动

目录

一、导入

代码

代码使用分析

 二、使用Input.GetKey来获取键盘中按下的键

代码 

代码使用分析

三、获取水平输入与竖直输入

代码 

代码使用分析

四、帧为参照改为秒为参照

代码 

代码使用分析


先解释一下代码中会出现的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官方文档:

https://docs.unity3d.com/ScriptReference/Time-deltaTime.htmlhttps://docs.unity3d.com/ScriptReference/Time-deltaTime.html

好啦,这就是这次学习的小小总结! 

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值