Unity中控制物体运动
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; }
}
有三个知识点需要了解一下:
- 获取轴向:Input.GetAxis(“Horizontal”)为获取横轴轴向的方法,当按下“左”键,该方法返回-1,“右”键返回1。Input.GetAxis(“Vertical”)为获取纵轴轴向的方法,按下“上”键时,该方法返回1,按下“下”键时,该方法返回-1.
- Time.deltaTime:指的是两次执行Update的时间间隔。因为 “ 距离 = 速度 * 时间 ”,所以物体,每次Update的移动距离应为 “ 距离 = 速度 * Time.detalTime” 。
- 速度的方向:transform的right、up和forward分别代表物体自身坐标系x,y,z这3个轴的方向,其中forward代表z轴,及物体前进的方向。由于速度是矢量,因此“ 速度 = transform.forward * speed ”指的是在坦克前进的方向上,每秒移动速度值(speed)指定的距离。
Unity中控制物体运动相关推荐
- unity中控制游戏物体移动最基本的三种方法
**unity**中控制游戏物体移动的最基本的三种方法 第一种移动方法-transform.Translate,游戏物体按照你给的方向和速度进行运动 代码如下: Public float speed; ...
- 计算机游戏物体运动代码,Flash游戏教程:控制物体运动三法 -电脑资料
教程|控制 现在用Flash开发的游戏是越来越多了, 方法一:通过单击按钮实现物体的单位运动 这种方法一般在需要按键的游戏中使用.你也可以给某个实体加上这段代码,然后通过单击这个实体达到某种游戏效果. ...
- Flash游戏教程:控制物体运动三法
现在用Flash开发的游戏是越来越多了.很多朋友也很想学习用Flash制作游戏的方法.大家知道,不管在什么游戏中,实现物体的运动是游戏的前提,而不同的游戏里物体移动的方式又不尽相同.所以,想学习制作F ...
- Unity中的物体渲染顺序
big seven 文章目录 前言 一.摄像机渲染 二.划分渲染队列 三.不透明物体的渲染 四.透明物体的渲染 五.UGUI元素的渲染 总结 前言 Unity中物体的渲染顺序 提示:以下是本篇文章正文 ...
- Unity3D总结记录(四) Unity中控制AudioSourse播放多条不同的声音文件
Unity中,如果需要让播放声音,只需要给游戏对象添加AudioSourse组件即可,但,默认的组件中,仅支持一条音源的播放,如要实现多条音源的播放,可在代码中实现,具体方法如下: 首先在类中申请多个 ...
- [教程] 在Unity中制作物体破碎效果
这篇教程将教大家如何在Unity中制作一个简单的碎片效果.当物体撞击或销毁时,我们将物体分裂为更小的碎片来取代之前的仅仅直接"删除"物体. 需求 这篇教程需要最新版本的Unity, ...
- Unity手势控制物体球形旋转
目的:当我想让物体绕Y轴旋转时,无论他当前的朝向都可以绕绝对Y轴转,同理X轴,Z轴.同时不可以有万向锁. 原理:当我们物体绕轴旋转时,其实是矩阵相乘,所以我们需要先算出当前要旋转角度的旋转矩阵,代码如 ...
- 【Unity】控制小球运动
跟着B站教程,做了个简单的控制小球运动的场景,记录一下: 文章目录 搭建场景 小球运动脚本 相机跟随小球运动脚本 效果展示 搭建场景 建立地面Plane.小球Player和四面墙Wall. 小球运动脚 ...
- (二)ROS中控制机器人运动(示例运行)
ROS中让机器人运动的步骤如下: (1)新建机器人模型 (2)运行.launch文件加载模型 (3)加载rviz的配置文件 (4)发布消息使用机器人运动 首先使用<ROS_by_example& ...
- unity中控制主角的移动和旋转
在游戏中我们通常要控制玩家的移动和旋转 首先我们说一下移动: 移动的本质就是在Update()或LateUpdate()中不断修改物体的position来实现移动,移动的方法有4中: (1):tran ...
最新文章
- Python 常用Web框架的比较
- 可视化自编码器训练结果
- Google Drive客户端
- Maven学习之 仓库镜像
- setTimeout(fn,0)
- 2016值得关注的5大IT趋势
- js如何将跨域打开的窗口放到最前面_程序员的强迫症-便捷打开常用网站
- sublime运行node.js报[Decode error - output not cp936]错误
- 聊聊rocketmq的FileAppender
- Service通信详解
- Linux(CentOS)下安装tesseract-ocr以及配置依赖leptonica
- python学生信息管理系统 实验报告_Python学生信息管理系统的开发
- linux adobe flash 安装,Ubuntu 12.10下为Firefox安装Adobe Flash Player
- 搭载rtmp直播服务器
- 百人计划(图形部分)Bump Mapping(凹凸贴图映射技术)
- 微信小程序怎么获取到data数据?
- idea 类存在,但是报错
- 进阶实验5-3.2 新浪微博热门话题 (字符串操作)
- python游戏开发(贪吃蛇游戏、五子棋游戏、大球吃小球游戏)
- FileLock——Java文件锁
热门文章
- unixbench测试CPU性能工具/mbw测试内存
- Bumped! (最短路)
- jsp页面打开为空白页
- jsp文件打开为记事本怎么办
- vc9.vc11.vc14_vc解释了为什么vc现在如此生气
- 武林外传自动寻路CALL
- 传世单机架设,账号登陆后,无法选择服务器,点击无效,无法进入游戏。
- Java真的是低糖语言吗?
- 上古卷轴5:重制版AFT管理随从导致瑟拉娜Serana有关的MOD眼睛变金色的问题解决
- 金蝶云星空html5的网页主界面如何修改,金蝶云星空启用科目管控后,科目相关的值更新事件无法生效原因及解决办法...