美文网首页工作生活
Unity——#02 Run

Unity——#02 Run

作者: MisakiMel | 来源:发表于2019-07-02 19:24 被阅读0次

      在实现了角色行走的基础上,再为其加上跑步的功能就易如反掌了。下面简述一下其实现方式以及其中遇到的问题。

    1.设置按压型信号(Pressing Type Signal)

      按照我们对游戏的认知,一般的fps或rpg游戏都是按住left shift键去操控游戏角色进行奔跑,这就是用到了按压型信号,按压型信号的取信号时间段为当玩家按下按键直到松开。于此,我们应该使用bool作信号,用Input.GetKey()取信号。
       首先宣告一个string变量keyA,并且初始化为"left shift"(在unity里左shift键的KeyCode为left shift),然后再宣告一个bool变量记录玩家是否按了"left shift":

    public string keyA = "left shift";
    public bool run;
    

      然后使用Input.GetKey()判断玩家的输入:

    run = Input.GetKey (keyA);
    

       为什么使用GetKey()而不是其他诸如GetKeyDown()呢?因为按照官网的描述:

    public static bool GetKey(string name);
    Description
    Returns true while the user holds down the key identified by name.

    public static bool GetKeyDown(string name);
    Description
    Returns true during the frame the user starts pressing down the key identified by name.

       GetKey()实现的是当玩家按住指定键时返回true,而GetKeyDown()实现的是当玩家键入指定键的那一帧(frame)返回true。显然GetKey()完胜。
       言归正传,我们可以先测试一下这几行代码能否实现我想要的:


    按住left shift触发Run信号

       显然没什么问题,然后就可以Next了。

    2.添加Run动画

       再往我们的ground的Blend Tree里添加Run的动画之后,可以看到参数forward的阈值范围变为0-2,新添加的Run动画的Threshold也自动变成1-2,可以通过拉动滑杆看看效果:


    拖动forward

       然后需要在代码上跟进forward值的修改:

    //修改前
    anim.SetFloat("forward", pi.Dmag);.
    //修改后,加一三元比较符让其与bool型变量run联系起来:
    anim.SetFloat("forward", pi.Dmag * (pi.run ? 2.0f : 1.0f));
    

       除此以外,还需要修改原本保存角色移动信息的变量:

    //修改前
    movingVec = pi.Dmag * model.transform.forward;
    //我们只需在这串代码后加一三元比较符让其与bool型变量run联系起来:
    movingVec = pi.Dmag * model.transform.forward * (pi.run ? runSpeed : 1.0f);
    

       逻辑为当run的信号为true时,就在当前步行的速度值上乘上一个额外的值,让其在跑步时具有合适的速度;反之就维持角色步行。runSpeed是一个public float变量,写活使得能在运行时修改其值以得到符合动画播放速度的速度值,这就不会出现脚底抹油的情况。

    public float runSpeed = 2.0f;
    
      虽然,我给了runSpeed一个初始值为2.0f,但我在Inspector里把它修改为了2.5:

      至此,应该就能实现角色的奔跑了,来看看实际的效果如何:


    Run

      基本上ok,但依旧有点瑕疵,问题如下:
    1.起跑很突兀,从步行到奔跑没有平滑处理,在forward值上也有体现,从1到2是瞬间完成,也就是说需要插值。
    2.Dmag斜向1.414的问题,在奔跑的情况下,40%的移动速度加成比在步行状态下更明显。
      这将在后续解决。

    相关文章

      网友评论

        本文标题:Unity——#02 Run

        本文链接:https://www.haomeiwen.com/subject/ibqocctx.html