获取输入
先写一个playerInput2D类来获取玩家得输入,对于用户的输入可以分为两种类型的信号,
一是持久性的信号例如移动等长按型的信号,还有种是像攻击,跳跃这种瞬间型的信号。
public float horizon;//因为是2d游戏所以,通过这个浮点数的正负来决定角色的水平速度
public bool isattack;//按了攻击 瞬间信号
public bool isjump;//按了跳跃 瞬间信号
public KeyCode attack;//把相应键为公开出来以便unity调试可修改
public KeyCode jump;
在update函数里去检测用户的输入,在这里使用的是GetAixsRaw它较于GetAixs不同的是,通过这个方法获取到的水平轴向信息输入(按了a d或者方向键盘的左右的话,会返回值,否则为0,另外如果两个键一起按 也是0)只有+1 -1,而GetAixs则能给输入信息进行插值过渡处理,会从0,到0.1到…到1,能使输入更加平滑。个人认为2d游戏不需要这种效果所以选择了raw。
void Update()
{
horizon = Input.GetAxisRaw("Horizontal");//horizontal为水平输入信息,Vertical为垂直方向信息
if (Input.GetKeyDown(attack)) { isattack = true; }
if (Input.GetKeyDown(jump)){ isjump = true;}
}
在这里我对攻击 跳跃信息的处理是,按了对应按键就把信号值设置为true,然后在另外一个脚本里去检测这个脚本里的这些信号,如果为true则执行相应的函数,并把它设置为false,以便接受下次信号。
之所以这么处理,
- 是功能单一原则
- 是如果直接在输入脚本的update里去把信号值设为true然后再设置为false,我担心今后的开发过程中代码很多,代码执行顺序不清晰,可能会导致获取不到用户的信号输入。
控制角色移动
UNITY2D游戏中有两种控制移动的方法
- 通过直接修改玩家角色的transform组件里的translate方法来控制玩家的移动。
- 赋予玩家角色刚体(Rigbody2D)组件,再去修改刚体组件的速度属性,来达到移动。
建议使用第二种方法来控制玩家移动,因为在之后的开发中有很多交互依赖于刚体组件,所以就算移动不加刚体组件后面也还要加上。