Unity(7)-控制2D物体移动
文章目录
- 前言
- 相关介绍
- 其他介绍
- 上一篇笔记
- 下一篇笔记
- 一、项目结构
- 二、水平轴和垂直轴
- 二、脚本
- [1]. 获取键盘输入
- [2]. 移动
- [3]. 方向判断
- [4]. 图片切换
- [5]. 全部代码
前言
通过修改2D物体的位置和图片达到移动的效果,素材来自爱给网
写一下笔记方便记忆,如果有出现错误可在下发评论告知。
Unity版本: 2019.4.26
Visual Studio版本: 2019
相关介绍
unity3d输入与控制——键盘事件
Unity3D InputManager官方介绍(英文)
Unity3D InputManager官方介绍(中文)
transform.Translate方法-游戏蛮牛
Time.deltaTime 增量时间-游戏蛮牛
其他介绍
微软官方C#函数文档
Unity官方API文档(英文)
Unity官方API文档(中文)
Unity官方用户手册(中文)
Unity游戏蛮牛API文档(中文)
Unity教程-C语言中文网
Unity用户手册-unity圣典
Unity组件手册-unity圣典
Unity脚本手册-unity圣典
上一篇笔记
Unity(6)-通过脚本修改图片sprite
下一篇笔记
Unity(8)-开启或关闭背景音乐
一、项目结构
二、水平轴和垂直轴
在2D的场景中,可以将其分为水平和垂直两个轴
之后我们就需要通过获取这两个轴向的键盘输入来实现移动2D物体
水平轴:Horizontal
垂直轴:Vertical
要是不记得这两者的英文名称可以去翻译一下,也可以在
Project Setting
设置中查看Input Manager
如果我们需要添加新的轴时,可以通过修改
Size
值实现
添加了新的轴,就会在下方添加名为
Cancel
的轴
修改
Name
参数的时候会让下三角右侧的名称发生变动
下方表格内容来自Unity官方中文手册,Unity3D InputManager官方介绍(中文)
属性 | 功能 |
---|---|
Name | 轴名称,使用此名称可以通过脚本来访问轴。 |
Descriptive Name, Descriptive Negative Name | 这些值已弃用,不起作用。以前在启动时会在 Rebind Controls 屏幕上为用户显示这些值,但该屏幕也已弃用。 |
Negative Button, Positive Button | 用于分别沿负向和正向推动轴的控件。这些控件可以是键盘上的键,也可以是游戏杆或鼠标上的按钮。 |
Alt Negative Button, Alt Positive Button | 用于分别沿负向和正向推动轴的备用控件。 |
Gravity | 不存在输入时,轴下降到中性点的速度(以单位/秒表示)。 |
Dead | 在应用程序对移动操作进行记录之前,用户需要移动模拟摇杆的距离。在运行时,所有模拟设备在该范围内的输入将被视为 null。 |
Sensitivity | 轴向目标值移动的速度(以单位/秒表示)。仅用于数字设备。 |
Snap | 如果启用此属性,按下对应于反方向的按钮时,轴值将重置为零。 |
Type | 这是控制此轴的输入类型。从以下值中进行选择: 键或鼠标按钮 (Key or Mouse button)、 鼠标移动 (Mouse Movement)、游戏杆轴 (Joystick Axis) |
Axis | 这是用于控制此轴的连接设备的轴。 |
JoyNum | 这是控制此轴的连接游戏杆。可以选择特定游戏杆,或查询所有游戏杆的输入。 |
二、脚本
[1]. 获取键盘输入
- 当我们按下
D
或→
时,Input.GetAxis("Horizontal")
会返回正值;当按下A
或←
时会返回负值;不按就返回0
- 当按下
W
或↑
时,Input.GetAxis("Vertical")
返回正值;当按下S
或↓
时返回负值;不按返回0
- 获取水平轴输入:
Input.GetAxis("Horizontal")
获取垂直轴输入:Input.GetAxis("Vertical")
void Update(){float x = Input.GetAxis("Horizontal");//获取水平轴输入float y = Input.GetAxis("Vertical");//获取垂直轴输入}
[2]. 移动
移动需要使用到
transform.Translate
方法,该方法需要传入2
个参数
第一个为Vector3
三维向量信息(与x
轴、y
轴、z
轴坐标有关)和参考坐标系对于
2D
的物体来说,z
轴是不需要的第一个参数的格式为:
方向 * 速度 * 时间增量
传入与时间有关的参数
Time.deltaTime
,表示每秒
运行指定的距离
不填写Time.deltaTime
时会每帧
运行指定的距离,容易导致错误
- 参考坐标系有两种,世界坐标系和自身坐标系
世界坐标系:Space.World
自身坐标系:Space.Self
- 通过
Input.GetAxis("Horizontal")
和Input.GetAxis("Vertical")
就可以来控制方向,
Vector3.right * 数值
中,数值
为正值时表示向右,为负值时表示向左;
Vector3.up * 数值
中,数值
为正值时表示向上,为负值时表示向下。
变量 | 介绍 |
---|---|
Vector.right | 在世界空间坐标变换的红色轴,即x轴正方向 |
Vector.up | 在世界空间坐标变换的绿色轴,即y轴正方向 |
Vector.forward | 在世界空间坐标变化的蓝色轴,即z轴正方向 |
void Update(){float x = Input.GetAxis("Horizontal");//获取水平轴输入float y = Input.GetAxis("Vertical");//获取垂直轴输入transform.Translate(Vector3.right * x * moveSpeed * Time.deltaTime,Space.World);//水平移动,x为正向右,x为负向左transform.Translate(Vector3.up * y * moveSpeed * Time.deltaTime,Space.World);//垂直移动,y为正向上,y为负向下}
[3]. 方向判断
- 当我们按下
D
或→
时,Input.GetAxis("Horizontal")
会返回正值;当按下A
或←
时会返回负值;不按就返回0
- 当按下
W
或↑
时,Input.GetAxis("Vertical")
返回正值;当按下S
或↓
时返回负值;不按返回0
void Update(){float x = Input.GetAxis("Horizontal");//获取水平轴输入float y = Input.GetAxis("Vertical");//获取垂直轴输入transform.Translate(Vector3.right * x * moveSpeed * Time.deltaTime, Space.World);//水平移动,x为正向右,x为负向左transform.Translate(Vector3.up * y * moveSpeed * Time.deltaTime, Space.World);//垂直移动,y为正向上,y为负向下if (x > 0)//向右移动{}else if (x < 0)//向左移动{}else if (y > 0)//向上移动{}else if (y < 0)//向下移动{}}
[4]. 图片切换
- 你可以根据下方的文章来学习图片切换的内容,此篇文章不再介绍
Unity(6)-通过脚本修改图片sprite- 引用时还需要注意图片在
Sprite
数组中的下标
void Update(){float x = Input.GetAxis("Horizontal");//获取水平轴输入float y = Input.GetAxis("Vertical");//获取垂直轴输入transform.Translate(Vector3.right * x * moveSpeed * Time.deltaTime, Space.World);//水平移动,x为正向右,x为负向左transform.Translate(Vector3.up * y * moveSpeed * Time.deltaTime, Space.World);//垂直移动,y为正向上,y为负向下if (x > 0)//向右移动{sr.sprite = pic[1];}else if (x < 0)//向左移动{sr.sprite = pic[2];}else if (y > 0)//向上移动{sr.sprite = pic[3];}else if (y < 0)//向下移动{sr.sprite = pic[0];}}
[5]. 全部代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Move : MonoBehaviour
{//属性值public float moveSpeed = 2;//移动速度//引用public Sprite[] pic;//图片private SpriteRenderer sr;//组件void Start(){sr = GetComponent<SpriteRenderer>();//获取该物体的SpriteRendderer组件}void Update(){float x = Input.GetAxis("Horizontal");//获取水平轴输入float y = Input.GetAxis("Vertical");//获取垂直轴输入transform.Translate(Vector3.right * x * moveSpeed * Time.deltaTime, Space.World);//水平移动,x为正向右,x为负向左transform.Translate(Vector3.up * y * moveSpeed * Time.deltaTime, Space.World);//垂直移动,y为正向上,y为负向下if (x > 0)//向右移动{sr.sprite = pic[1];}else if (x < 0)//向左移动{sr.sprite = pic[2];}else if (y > 0)//向上移动{sr.sprite = pic[3];}else if (y < 0)//向下移动{sr.sprite = pic[0];}}
}
Unity(7)-控制2D物体移动相关推荐
- unity中控制游戏物体移动最基本的三种方法
**unity**中控制游戏物体移动的最基本的三种方法 第一种移动方法-transform.Translate,游戏物体按照你给的方向和速度进行运动 代码如下: Public float speed; ...
- unity控制2D物体移动,2D碰撞器Box Collider却没有效果
首先,给主角添加2D刚体和2D碰撞器,为了让主角不受重力的影响,设置2D刚体的Body Type属性为Kinematic运动学,还有给需要碰撞的物体添加上2D碰撞器. 准备工作做好以后,控制主角移动却 ...
- Unity—实现通过按键控制2D游戏物体的移动
控制游戏物体的移动 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ...
- 【0909】unity作业:2d箭头跟随指引物体方向,箭头始终在屏幕内。
[0909]unity作业:2d箭头跟随指引物体方向,箭头始终在屏幕内. 第一步:对需要用到的箭头进行抠图: 上课老师说用Sprite Editor.不过那个,好像是用来切片的,不能抠图-参考了一篇文 ...
- Unity鼠标控制摄像机 围绕物体旋转
Unity鼠标控制摄像机 围绕物体旋转 角度范围判定 // An highlighted block using UnityEngine;public class CameraCtrl : MonoB ...
- 【UnityIUnity精灵Unity物体】生成控制大量物体的时间考究
生成控制大量物体考究 如果要控制大量的物体,这些物体所花的时间为多少 ----------------------------------------------------------准备Prepa ...
- Unity 4.3 2D 教程:新手上路
这篇文章译自 Christopher LaPollo 先生的 Unity 4.3 2D 教程的第一部分 Unity 4.3 2D Tutorial: Getting Started 感谢这套优秀教程的 ...
- unity 摄像机追随指定物体
unity 摄像机追随指定物体, 摄像机离远离近,围绕物体旋转using System.Collections; using System.Collections.Generic; using Uni ...
- unity键盘控制移动操作(WASD)篇
今天仔细重新研究了下移动操作,发现input.key那种方法纯属是讨巧操作,实际上它并不好用,在高性能电脑中,我们的电脑每帧有可能会运行上千帧,如果采用这种方法会发生发卡顿,远远没有以下方案丝滑 方案 ...
最新文章
- Win7下的修改grub工具bcdedit
- BZOJ4893: 项链分赃 BZOJ4895: 项链分赃(增强版)
- 在学习Python基础中需要知道的知识点:运算符大全,收藏,以后方面查询(算术运算符、赋值运算符、比较运算符、位运算符、逻辑运算符、成员运算符、身份运算符、运算符优先级))
- CSS 选择器 :last-child与:last-of-type的区别
- python比较两个数的和_Python中的is和==比较两个对象的两种方法
- 利用SQL Server 2005特性删除表中重复数据
- poi 不自动计算 设置单元格公式_Java POI:如何读取Excel单元格的值而不是计算公式?...
- 九、Citrix服务器虚拟化Xenserver虚拟机模版
- bat批量剪切命令_批处理剪切文件夹的dos指令怎么写
- 国军标-Gjb软件设计说明书模板
- 算法精解----快速排序(方式1)
- V.PhyloMaker:维管束植物系统发育树构建实践
- 百度地图API之根据经纬度查询地址信息(Android)
- 高性能软件系统设计中应该考虑的问题
- html map插件,jQuery谷歌地图插件maplace.js
- PE、PM、PD、PR分别是什么岗位?
- clover写入efi_关于黑苹果clover写入EFI后Deepin无法正常引导的解决方法
- 我的所有优质博客全部开源啦(我自己原创的《ACM模板》《算法全家桶》《算法竞赛中的初等数论》 PDF免费下载)
- T---EXCEL表格换行
- [附源码]java毕业设计汽车票售票系统lunwen