1.输入

Unity输入方式有三种:

1.1直接检测按下哪个按键

​ 直接检测有两种:

A. 直接检测按键,优点:简单方便,效率高 缺点:修改按键麻烦

if(Input.GetKeyDown(KeyCode.X))  //X代表键盘上的某个按键
。。。

B. 间接检测按键,优点:方便修改按键

public KeyCode JumpButton = KeyCode.Space;  //提前设置好不同功能对应按键

if(Input.GetKeyDown(JumpButton))
。。。

1.2.检测水平输入和垂直输入

​ 分为两种:

A.键盘类(适合横版过关)

​ 1.Vertical 对应键盘上面的上下箭头或W,S键,当按时触发

​ 2.Horizontal 对应键盘上面的左右箭头或A,D键,当按时触发

B.鼠标类(适合飞机弹幕)

​ 1.Mouse X 鼠标沿着屏幕X移动时触发

​ 2.Mouse Y 鼠标沿着屏幕Y移动时触发

​ 3.Mouse ScrollWheel 当鼠标滚动轮滚动时触发

ps:Mouse Y和ScrollWheel操作手感不佳,X则挺正常的

​ 读取时分为两种:

  1. Input.GetAxisRaw("XXX"); 返回值是-1,0或1
  2. Input.GetAxis("XXX"); 按下按键后返回值是一个变化过程,从返回一个类似加速度的值 0.1-->0.3 -->0.1然后将会依次减少..类似刹车和开车.适用于赛车加速

使用例子:

float x = Input.GetAxisRaw("Horizontal");
transform.Translate(Vector3.right * x * moveSpeed * Time.deltaTime, Space.World); float y = Input.GetAxisRaw("Vertical");
transform.Translate(Vector3.up * y * moveSpeed * Time.deltaTime, Space.World);

Vertical和Horizontal输入的键可以通过打开Unity顶部栏的Edit->Project Setting->Input,进行修改。

Note:“XXX”中的XXX名字注意不要拼错,否则无效

双人游戏快速改键位:https://blog.csdn.net/w1095471150/article/details/52642636


2.移动

Unity常用移动方式有四个组件和Vector3:

(未注明属性的均为函数)

2.1.Transform组件

  • translate -- 相某方向移动多少距离(本地坐标系)(无惯性,但若移动设置过大可能穿模)
  • position属性 -- 世界空间坐标物体的位置

2.2.RigidBody组件

  • Velocity属性 -- 给予刚体速度向量(瞬间速度变为所给的速度向量) (一般有惯性)
  • AddForce -- 添加一个力给物体(若力能使物体移动,是一个变化过程)(一般有惯性)
  • MovePosition -- 移动物体到Position位置 (与translate类似)

2.3.NavMeshAgent组件

  • SetDestination -- 设置自动Pat目标点

2.4.CharacterController组件

  • Move -- 一个更加复杂的运动函数,每次都绝对运动
  • SimpleMove -- 以一定速度移动物体

2.5.Vector 3

  • Lerp -- 两个向量之间的线性插值,“像弹簧一个跟随目标物体”。
  • Slerp -- 两个向量之间的球形插值,“在日出和日落之间动画弧线”。
  • MoveToward -- 当前的地点移向目标和Vector3.Lerp相同,maxDistanceDelta限速。
  • SmoothDamp -- 随着时间的推移,逐渐改变一个向量朝向预期的目标。

Unity3D的位移、旋转的3D数学模型:https://blog.csdn.net/sxbluebird/article/details/43225401

3.手感优化

前提:了解rigidbody2D面板各参数含义,才能根据自己的游戏所需效果调成自己想要的

可参考:https://blog.csdn.net/zhenghongzhi6/article/details/82381537

内容在新版本上加入了Linear Drag线性阻力以及以后其他新功能

1.加入移动,跳跃动画,甚至加入蓄力跳

2.加入音效

3.调整重力参数,线性阻力

博客分享:

Unity性能优化——Rigidbody2D详解:https://blog.csdn.net/SerenaHaven/article/details/78851089

Unity 2D 平台类游戏 人物移动 Rigidbody2D详解及其常用API:http://www.pianshen.com/article/8423262368/

4.符合自己的游戏

​ 不同的游戏需要不同效果的移动方式,一开始选择恰当的移动方式会省去不少后期重新选择更改的时间以及无用功。

简单可以分为有惯性有重力,有惯性无重力,无惯性有重力,无惯性无重力

2D游戏分为以下几种:

1.格斗游戏(无惯性有重力):需要随时左右移动,加入惯性后可能手感不佳

2.飞机射击类游戏(无惯性无重力):需要在一堆子弹中穿梭,所以需要需灵敏的控制,移除惯性和重力

3.超级玛丽类横板跳跃游戏(有惯性有重力)

4.太空模拟(有惯性无重力)

根据自己的游戏再细分,比如有了惯性,那惯性的程度,跳起来在空中能否左右移动等,这些都是可以灵活思考的。

关于跳跃可以看看我的另一篇博文:Unity2D横版移动跳跃问题——关于一段跳与二段跳

转载标明出处:作者AMzz 博客: https://www.cnblogs.com/AMzz/

Unity 简记(2)--2D移动的更多相关文章

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

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

  2. 介绍用C#和VS2015开发基于Unity架构的2D、3D游戏的技术

    [Unity]13.3 Realtime GI示例 摘要: 分类:Unity.C#.VS2015 创建日期:2016-04-19 一.简介 使用简单示例而不是使用实际示例的好处是能让你快速理解光照贴图 ...

  3. unity, polygon collider 2D 添加顶点

    正常情况下只要按下了Edit Collider按钮,鼠标停在polygon collider 2D的一条边上,就会出现一个虚拟的新顶点,此时如果按下鼠标,新顶点就创建出来了. 但是我今天遇到一个奇怪的 ...

  4. 【Unity Shader】2D动态云彩

    写在前面 赶在年前写一篇文章.之前翻看2015年的SIGGRAPH Course(关于渲染的可以去selfshadow的博客里找到,很全)的时候看到了关于体积云的渲染.这个课程讲述了开发者为游戏< ...

  5. 使用Unity实现动态2D水效果

    http://forum.china.unity3d.com/thread-16044-1-1.html 在这片教程里面我们将会用简单的物理效果来模拟动态的2D水效果.我们将会使用Line Rende ...

  6. Unity 简记(1)--TileMap

    ## Tilemap是unity中自带的快速构建2D场景的工具,优点是省时省力, 1 使用方法 在场景创建一个Tilemap 打开TilePalette ​ 3.创建一个新的Palette,将地图切割 ...

  7. [Unity] 3D数学基础 - 2D旋转矩阵

    2D矩阵的旋转: NewX = X * Cos(α) - Y * Sin(α) NewY = X * Sin(α) + Y * Cos(α) 一般在三角函数中使用的是弧度,我们可以通过下面的公式将角度 ...

  8. Unity 3D制作2D游戏的几种方法

    1.使用本身UGUI. 2.把摄像机的投影改为正交投影,不考虑Z轴. 3.使用Untiy自身的2D模式. 4.使用2D TooKit插件.

  9. |原创|unity 4.3 2D功能SpriteRenderer修改颜色的方法

    4.3增加了不少2D功能,然后实在没有找到有人分享,在国外查资料研究一下午然后给个简单的教程 ===================================================== ...

随机推荐

  1. 机器学习中梯度下降法原理及用其解决线性回归问题的C语言实现

    本文讲梯度下降(Gradient Descent)前先看看利用梯度下降法进行监督学习(例如分类.回归等)的一般步骤: 1, 定义损失函数(Loss Function) 2, 信息流forward pr ...

  2. 2. SOFAJRaft源码分析—JRaft的定时任务调度器是怎么做的?

    看完这个实现之后,感觉还是要多看源码,多研究.其实JRaft的定时任务调度器是基于Netty的时间轮来做的,如果没有看过Netty的源码,很可能并不知道时间轮算法,也就很难想到要去使用这么优秀的定时调 ...

  3. python-Flask模版注入攻击SSTI(python沙盒逃逸)

    一篇以python Flask 模版渲染为例子的SSTI注入教学~ 0x01 Flask使用和渲染 这里简化了flask使用和渲染的教程 只把在安全中我们需要关注的部分写出来 来一段最简单的FLASK ...

  4. 代码审计-四叶草杯线下awd比赛源码web2

    今晚简单来看看那天比赛的源码吧,比赛的时候还是有些慌没有好好去静下心看代码. awd给的题中的漏洞,都是那种可以快速让你利用拿到权限后得到flag的那种,特别复杂利用的一般没有. 建议先黑盒去尝试,例 ...

  5. Oier们的幸运数字

    题目描述 JerryC对数字痴迷到了一种非正常的境界.每天JerryC都有喜欢的一些数字.第 iii 天JerryC就喜欢Ai−BiA_i-B_iAi​−Bi​中的数字.但是他觉得这样并不是很有趣,于 ...

  6. Halcon一日一练:图像分割之阈值分割1

    先了解什么是阈值,度娘告诉我的是:一个领域或一个系统的界限称为阈,其数值称为阈值.在图像中,我们把图像看成一个由像素灰度值组成的数集,那么阈,就是这个图像中,根据目标与背景灰度值的差异,选取的一个合适 ...

  7. 在WPF中使用.NET Core 3.0依赖项注入和服务提供程序

    前言 我们都知道.NET Core提供了对依赖项注入的内置支持.我们通常在ASP.NET Core中使用它(从Startup.cs文件中的ConfigureServices方法开始),但是该功能不限于 ...

  8. vue,element列表大数据卡顿问题,vue列表渲染慢,element表格渲染慢,表格渲染慢(卡),表格全选卡

    https://github.com/livelyPeng/pl-table 一个表格组件(完美解决万级数据渲染卡顿问题),流畅渲染万级数据并不会影响到el-table的原有功能 分析: 前端UI框架 ...

  9. foreach数组并直接改变数组内容

    <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr is ...

  10. Scrapy 实现爬取多页数据 + 多层url数据爬取

    项目需求:爬取https://www.4567tv.tv/frim/index1.html网站前三页的电影名称和电影的导演名称 项目分析:电影名称在初次发的url返回的response中可以获取,可以 ...