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)指定的距离。

Unity中控制物体运动相关推荐

  1. unity中控制游戏物体移动最基本的三种方法

    **unity**中控制游戏物体移动的最基本的三种方法 第一种移动方法-transform.Translate,游戏物体按照你给的方向和速度进行运动 代码如下: Public float speed; ...

  2. 计算机游戏物体运动代码,Flash游戏教程:控制物体运动三法 -电脑资料

    教程|控制 现在用Flash开发的游戏是越来越多了, 方法一:通过单击按钮实现物体的单位运动 这种方法一般在需要按键的游戏中使用.你也可以给某个实体加上这段代码,然后通过单击这个实体达到某种游戏效果. ...

  3. Flash游戏教程:控制物体运动三法

    现在用Flash开发的游戏是越来越多了.很多朋友也很想学习用Flash制作游戏的方法.大家知道,不管在什么游戏中,实现物体的运动是游戏的前提,而不同的游戏里物体移动的方式又不尽相同.所以,想学习制作F ...

  4. Unity中的物体渲染顺序

    big seven 文章目录 前言 一.摄像机渲染 二.划分渲染队列 三.不透明物体的渲染 四.透明物体的渲染 五.UGUI元素的渲染 总结 前言 Unity中物体的渲染顺序 提示:以下是本篇文章正文 ...

  5. Unity3D总结记录(四) Unity中控制AudioSourse播放多条不同的声音文件

    Unity中,如果需要让播放声音,只需要给游戏对象添加AudioSourse组件即可,但,默认的组件中,仅支持一条音源的播放,如要实现多条音源的播放,可在代码中实现,具体方法如下: 首先在类中申请多个 ...

  6. [教程] 在Unity中制作物体破碎效果

    这篇教程将教大家如何在Unity中制作一个简单的碎片效果.当物体撞击或销毁时,我们将物体分裂为更小的碎片来取代之前的仅仅直接"删除"物体. 需求 这篇教程需要最新版本的Unity, ...

  7. Unity手势控制物体球形旋转

    目的:当我想让物体绕Y轴旋转时,无论他当前的朝向都可以绕绝对Y轴转,同理X轴,Z轴.同时不可以有万向锁. 原理:当我们物体绕轴旋转时,其实是矩阵相乘,所以我们需要先算出当前要旋转角度的旋转矩阵,代码如 ...

  8. 【Unity】控制小球运动

    跟着B站教程,做了个简单的控制小球运动的场景,记录一下: 文章目录 搭建场景 小球运动脚本 相机跟随小球运动脚本 效果展示 搭建场景 建立地面Plane.小球Player和四面墙Wall. 小球运动脚 ...

  9. (二)ROS中控制机器人运动(示例运行)

    ROS中让机器人运动的步骤如下: (1)新建机器人模型 (2)运行.launch文件加载模型 (3)加载rviz的配置文件 (4)发布消息使用机器人运动 首先使用<ROS_by_example& ...

  10. unity中控制主角的移动和旋转

    在游戏中我们通常要控制玩家的移动和旋转 首先我们说一下移动: 移动的本质就是在Update()或LateUpdate()中不断修改物体的position来实现移动,移动的方法有4中: (1):tran ...

最新文章

  1. Python 常用Web框架的比较
  2. 可视化自编码器训练结果
  3. Google Drive客户端
  4. Maven学习之 仓库镜像
  5. setTimeout(fn,0)
  6. 2016值得关注的5大IT趋势
  7. js如何将跨域打开的窗口放到最前面_程序员的强迫症-便捷打开常用网站
  8. sublime运行node.js报[Decode error - output not cp936]错误
  9. 聊聊rocketmq的FileAppender
  10. Service通信详解
  11. Linux(CentOS)下安装tesseract-ocr以及配置依赖leptonica
  12. python学生信息管理系统 实验报告_Python学生信息管理系统的开发
  13. linux adobe flash 安装,Ubuntu 12.10下为Firefox安装Adobe Flash Player
  14. 搭载rtmp直播服务器
  15. 百人计划(图形部分)Bump Mapping(凹凸贴图映射技术)
  16. 微信小程序怎么获取到data数据?
  17. idea 类存在,但是报错
  18. 进阶实验5-3.2 新浪微博热门话题 (字符串操作)
  19. python游戏开发(贪吃蛇游戏、五子棋游戏、大球吃小球游戏)
  20. FileLock——Java文件锁

热门文章

  1. unixbench测试CPU性能工具/mbw测试内存
  2. Bumped! (最短路)
  3. jsp页面打开为空白页
  4. jsp文件打开为记事本怎么办
  5. vc9.vc11.vc14_vc解释了为什么vc现在如此生气
  6. 武林外传自动寻路CALL
  7. 传世单机架设,账号登陆后,无法选择服务器,点击无效,无法进入游戏。
  8. Java真的是低糖语言吗?
  9. 上古卷轴5:重制版AFT管理随从导致瑟拉娜Serana有关的MOD眼睛变金色的问题解决
  10. 金蝶云星空html5的网页主界面如何修改,金蝶云星空启用科目管控后,科目相关的值更新事件无法生效原因及解决办法...