Unity 简记--2D移动

Posted amzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 简记--2D移动相关的知识,希望对你有一定的参考价值。

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

以上是关于Unity 简记--2D移动的主要内容,如果未能解决你的问题,请参考以下文章

Unity 2D人物移动实现

Unity 2D人物移动实现

Unity 2D人物移动实现

unity2d垂直移动逻辑错误

Unity-控制2D物体移动

Unity 2D Top Down Shooter 运动问题 C#