Unity 简记(2)--2D移动

目录

  • 1.输入

    • 1.1直接检测按下哪个按键
    • 1.2.检测水平输入和垂直输入
  • 2.移动
    • 2.1.Transform组件
    • 2.2.RigidBody组件
    • 2.3.NavMeshAgent组件
    • 2.4.CharacterController组件
    • 2.5.Vector 3
  • 3.手感优化
  • 4.符合自己的游戏

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横版移动跳跃问题——关于一段跳与二段跳

原文地址:https://www.cnblogs.com/AMzz/p/11802547.html

时间: 2024-10-07 23:02:32

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

Unity 4.3 2D 教程:推开大门

这篇文章译自 Christopher LaPollo 先生的 Unity 4.3 2D 教程的第一部分 Unity 4.3 2D Tutorial: Getting Started 感谢这套优秀教程的作者@Chris!译者水平有限,翻译不准确的地方请参考原文,文中所有Unity的关键字都没有翻译. 译者@wangzexi,转载请保留出处和原文链接.   如果你尝试用更早版本的Unity来制作2D游戏,那当然没问题,但你也知道必须先解决一些问题. 可能你通过给quad应用纹理,使用脚本调整纹理参数

unity, polygon collider 2D 添加顶点

正常情况下只要按下了Edit Collider按钮,鼠标停在polygon collider 2D的一条边上,就会出现一个虚拟的新顶点,此时如果按下鼠标,新顶点就创建出来了. 但是我今天遇到一个奇怪的情况就是鼠标放到polygon collider 2D的边上,并不出现虚拟新顶点,点击也不会创建新顶点.后来发现,原来是我的gameObject的Scale值太大了,是一千多,而其上添加的polygon collider 2D是常规尺寸,也就是说此polygon collider 2D在gameOb

【Unity Shader】2D动态云彩

写在前面 赶在年前写一篇文章.之前翻看2015年的SIGGRAPH Course(关于渲染的可以去selfshadow的博客里找到,很全)的时候看到了关于体积云的渲染.这个课程讲述了开发者为游戏<地平线:黎明时分>所开发的动态天气系统,重点讲了里面的云的模拟和渲染,很有参考价值. 其中,云的建模主要使用了raymarching的方法,他们的启发应该和shadertoy有关,但多了更多的程序控制和艺术效果等.可以从上面的图片看出来,效果很好. SIGGRAPH上的这个演讲讲的主要是3D动态云彩的

Unity 简记(1)--TileMap

## Tilemap是unity中自带的快速构建2D场景的工具,优点是省时省力, 1 使用方法 在场景创建一个Tilemap 打开TilePalette ? 3.创建一个新的Palette,将地图切割好拉进去,点一下要画的格子,再点一下笔,就可以开始画了 2. 要点 1.若画的图片小于方格 则可在Grid的cell size处更改方格大小 若还存在缝隙问题可见下面分享博文 2.绑定碰撞体,给Grid的Tilemap添加Tilemap collider2D和rigidbody 2D组件,然后为了让

Unity 2d Game Development - epub + code

unity 2D Game Development By Dave Calabrese2014 | 126 Pages | ISBN: 1849692564 Combine Classic 2D With Today's Technology To Build Great Games With Unity's Latest 2D ToolsOverviewBuild A 2D Game Using The Native 2D Development Support In Unity 4.3 Cr

【Unity3D基础教程】给初学者看的Unity教程(三):通过制作Flappy Bird了解Native 2D中的Sprite,Animation

作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 上一次我们讲了MonoBehaviour的前世今生,了解了游戏中的每一个GameObjec都是由脚本控制的,这一次我们开始将Unity中Native 2D中的Sprite,并且使用Animation来让Sprite动起来. 在接下来的几篇博客里,我会通过做一个Flappy Bird来讲解Unity中各个组件的使用,项目的源代码在这里:U

年末重磅 | 12月Unity 2D新功能发布会现已开放报名!

12月17日,Unity将在北京首次举办Unity 2D技术新功能发布会!届时,来自新加坡的Unity 2D核心研发团队将首次来华,为国内开发者分享Unity最新的2D开发功能以及未来2D功能的研发规划! 现场更有关于Unity 2D游戏开发新功能的圆桌讨论,开发者将有机会基于自己开发的2D游戏作品,与Unity 2D开发专家面对面探讨2D游戏的开发新方向以及开发过程中遇到的问题! 除了阵容强劲的Unity 2D研发团队外,本次活动还请到了Intel的技术大使,赵天奇先生为参会者分享Intel

Unity之2D Sprite Outline外轮廓效果

操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity5.3.8f1 Unity提供了2D Object Sprite对象,但是没有提供外轮廓Outline效果的支持,本次将会使用扩展版本的默认sprite着色器以及一个简单的组件来添加sprite的轮廓.这可以用于突出鼠标上的精灵,突出显示环境中的元素,或仅仅使精灵从周围环境中脱颖而出. 首先,在您的项目中创建一个名为Sprite-Outline的新着色器. 这个着色器提供了默认sprite着色器的所有功能,并

【转】通过制作Flappy Bird了解Native 2D中的Sprite,Animation

作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 上一次我们讲了MonoBehaviour的前世今生,了解了游戏中的每一个GameObjec都是由脚本控制的,这一次我们开始将Unity中Native 2D中的Sprite,并且使用Animation来让Sprite动起来. 在接下来的几篇博客里,我会通过做一个Flappy Bird来讲解Unity中各个组件的使用,项目的源代码在这里:U