Unity中控制物体运动


      在介绍控制物体运动时,首先需要了解一些基本知识:

      1. Input类的常用方法

方法内容
GetAxis       返回指定坐标轴的值
       比如Input.GetAxis(“Mouse X”)便是获取鼠标的X轴移动速度;
        Input.GetAxis(“Mouse Y”)便是获取鼠标的y轴移动速度
GetKey       当指定的按键被按下时返回true
       比如在Update方法中添加如下代码,它将判断键盘方向键“上”是否被按住。
       if(Input.GetKey(KeyCode.UpArrow))
       {
             Debug.Log(“按下上键”);
       }
GetKeyDown       当指定的按键被用户按下后返回true
GetMouseButton       当指定鼠标被按住时返回true。参数0代表鼠标左键,参数1代表鼠标右键,参数2代表鼠标中键。用法如下所示:
       void Update()
        {
              if(Input.GetMouseButton(0))
                   Debug.Log("按下鼠标左键“);
              if(Input.GetMouseButton(1))
                   Debug.Log("按下鼠标右键“);
              if(Input.GetMouseButton(2))
                   Debug.Log("按下鼠标中键“);
       }
GetTouch      返回一个存放触摸信息的对象

      2. Transform类常用的属性和方法

属性或方法描述
position       世界坐标系的位置
localPosition       相对于父级的位置
eulerAngles       旋转的欧拉角度
localEulerAngles       相对于父级的欧拉角度
right
up
forward
       物体本身x,y,z三个轴的方向
Translate()       以指定方向和距离移动物体
Rotate()       旋转物体
LookAt()       旋转物体,使他对准目标
Find()
FindChild()
        通过名字查找子物体,在如下的结构中,通过father.transform.Find(“child1”)即可获取child1.transform
                       在这里插入图片描述
GetChild()       通过索引获取子物体,在上述的结构中,通过father.transform.GetChild(0)即可获取child1.transform,通过father.transform.GetChild(1)即可获取child2.transform

控制物体上下左右移动

     在Unity中创建任意物体(Object),在Project面板中创建名为Tank(其他命名也可以,注意类名和脚本名一致)的脚本,编写代码拖到物体上,物体就能上下左右运动啦,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Tank : MonoBehaviour
{
   //每帧执行一次
    void Update()
    {
        //速度
        float speed = 1;
        //上
        if (Input.GetKey(KeyCode.UpArrow))
        {
            transform.eulerAngles = new Vector3(0, 0, 0);
            transform.position += transform.forward * speed;
        }
        //下
        else if (Input.GetKey(KeyCode.DownArrow))
        {
            transform.eulerAngles = new Vector3(0, 180, 0);
            transform.position += transform.forward * speed;
        }
        //左
        else if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.eulerAngles = new Vector3(0, 270, 0);
            transform.position += transform.forward * speed;
        }
        //右
        else if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.eulerAngles = new Vector3(0, 90, 0);
            transform.position += transform.forward * speed;
        }
    }
}

控制物体转向和前后移动

     上面代码是按下左键,物体会向左方移动;按下右键,物体向右移动;按下上键,物体前进;按下下键,物体后退。现在,我想改变一下,按下“左右”键时,物体不会移动,只是改变方向进行旋转角度,按下“上下”键时,物体前进或者后退。代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Tank : MonoBehaviour
{
 //每帧执行一次
  void Update()
  {
      //旋转,steer是旋转速度
      float steer = 20;
      float x = Input.GetAxis("Horizontal");
      transform.Rotate(0, x * steer * Time.deltaTime, 0);
      //前进后退
      float speed = 3f;
      float y = Input.GetAxis("Vertical");
      Vector3 s = y * transform.forward * speed * Time.deltaTime;
      transform.transform.position += s;   
  }
}

     有三个知识点需要了解一下:

  1. 获取轴向:Input.GetAxis(“Horizontal”)为获取横轴轴向的方法,当按下“左”键,该方法返回-1,“右”键返回1。Input.GetAxis(“Vertical”)为获取纵轴轴向的方法,按下“上”键时,该方法返回1,按下“下”键时,该方法返回-1.
  2. Time.deltaTime:指的是两次执行Update的时间间隔。因为 “ 距离 = 速度 * 时间 ”,所以物体,每次Update的移动距离应为 “ 距离 = 速度 * Time.detalTime” 。
  3. 速度的方向:transform的right、up和forward分别代表物体自身坐标系x,y,z这3个轴的方向,其中forward代表z轴,及物体前进的方向。由于速度是矢量,因此“ 速度 = transform.forward * speed ”指的是在坦克前进的方向上,每秒移动速度值(speed)指定的距离。
  • 11
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值