文章目录

  • 前言
    • 相关介绍
    • 其他介绍
    • 上一篇笔记
    • 下一篇笔记
  • 一、项目结构
  • 二、水平轴和垂直轴
  • 二、脚本
    • [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物体移动相关推荐

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

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

  2. unity控制2D物体移动,2D碰撞器Box Collider却没有效果

    首先,给主角添加2D刚体和2D碰撞器,为了让主角不受重力的影响,设置2D刚体的Body Type属性为Kinematic运动学,还有给需要碰撞的物体添加上2D碰撞器. 准备工作做好以后,控制主角移动却 ...

  3. Unity—实现通过按键控制2D游戏物体的移动

    控制游戏物体的移动 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ...

  4. 【0909】unity作业:2d箭头跟随指引物体方向,箭头始终在屏幕内。

    [0909]unity作业:2d箭头跟随指引物体方向,箭头始终在屏幕内. 第一步:对需要用到的箭头进行抠图: 上课老师说用Sprite Editor.不过那个,好像是用来切片的,不能抠图-参考了一篇文 ...

  5. Unity鼠标控制摄像机 围绕物体旋转

    Unity鼠标控制摄像机 围绕物体旋转 角度范围判定 // An highlighted block using UnityEngine;public class CameraCtrl : MonoB ...

  6. 【UnityIUnity精灵Unity物体】生成控制大量物体的时间考究

    生成控制大量物体考究 如果要控制大量的物体,这些物体所花的时间为多少 ----------------------------------------------------------准备Prepa ...

  7. Unity 4.3 2D 教程:新手上路

    这篇文章译自 Christopher LaPollo 先生的 Unity 4.3 2D 教程的第一部分 Unity 4.3 2D Tutorial: Getting Started 感谢这套优秀教程的 ...

  8. unity 摄像机追随指定物体

    unity 摄像机追随指定物体, 摄像机离远离近,围绕物体旋转using System.Collections; using System.Collections.Generic; using Uni ...

  9. unity键盘控制移动操作(WASD)篇

    今天仔细重新研究了下移动操作,发现input.key那种方法纯属是讨巧操作,实际上它并不好用,在高性能电脑中,我们的电脑每帧有可能会运行上千帧,如果采用这种方法会发生发卡顿,远远没有以下方案丝滑 方案 ...

最新文章

  1. Win7下的修改grub工具bcdedit
  2. BZOJ4893: 项链分赃 BZOJ4895: 项链分赃(增强版)
  3. 在学习Python基础中需要知道的知识点:运算符大全,收藏,以后方面查询(算术运算符、赋值运算符、比较运算符、位运算符、逻辑运算符、成员运算符、身份运算符、运算符优先级))
  4. CSS 选择器 :last-child与:last-of-type的区别
  5. python比较两个数的和_Python中的is和==比较两个对象的两种方法
  6. 利用SQL Server 2005特性删除表中重复数据
  7. poi 不自动计算 设置单元格公式_Java POI:如何读取Excel单元格的值而不是计算公式?...
  8. 九、Citrix服务器虚拟化Xenserver虚拟机模版
  9. bat批量剪切命令_批处理剪切文件夹的dos指令怎么写
  10. 国军标-Gjb软件设计说明书模板
  11. 算法精解----快速排序(方式1)
  12. V.PhyloMaker:维管束植物系统发育树构建实践
  13. 百度地图API之根据经纬度查询地址信息(Android)
  14. 高性能软件系统设计中应该考虑的问题
  15. html map插件,jQuery谷歌地图插件maplace.js
  16. PE、PM、PD、PR分别是什么岗位?
  17. clover写入efi_关于黑苹果clover写入EFI后Deepin无法正常引导的解决方法
  18. 我的所有优质博客全部开源啦(我自己原创的《ACM模板》《算法全家桶》《算法竞赛中的初等数论》 PDF免费下载)
  19. T---EXCEL表格换行
  20. [附源码]java毕业设计汽车票售票系统lunwen

热门文章

  1. sqlite表更新添加字段——sqlite3
  2. 风云岛行动怎么用电脑玩 风云岛行动模拟器玩法教程
  3. 【SQL SERVER】递归查询
  4. 设计模式(17)之组合模式
  5. 数据结构:赫夫曼编码
  6. 一张图看 android 事件分发
  7. Cannot access defaults field of Properties
  8. JS自学Day6-内置对象
  9. 队列——数组实现环形队列
  10. 解决2021年之后 CentOS 6 Yum 源无效 停止维护404错误