根据浮动播放不同的着陆动画?

时间:2018-03-17 21:56:01

标签: c# unity3d

我试图向我的第三人称控制器添加不同的着陆动画,但我不确定如何编写浮动计时器。这是我到目前为止所得到的。我想到了一个名为airTime的浮动,并将它添加到我的groundCheck中。当播放器未接地时,此浮动的值应该会增加,当播放器再次接地时,此计时器应该重置。

我所拥有的代码:

private float airTime = 0f;

if (GroundCheck())
{
    // The airTime timer should be reset here?
    velocityY = 0;
    if (airTime > 10f) // I think, this should be in frames?
    {
        anim.SetTrigger("HardLanding");
    }
    else
    {
        anim.SetTrigger("NormalLanding");
    }
}
else
{
    anim.SetTrigger("onAir");
    // The airTime timer should start counting in frames
}

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题。你想知道角色在空中有多长时间?

你的代码示例在哪里,这是在每个帧调用的Update方法中吗?如果您正在使用更新,那么当您在空中时,您可以将Time.deltaTime添加到每个帧的计时器,因为它返回自上一帧以来的时间(以秒为单位)。

或者您也可以使用Time.time属性,该属性返回自游戏开始以来的秒数。

然后,当你开始进入空中时,你可以将Time.time存储在一个浮动字段中,例如调用它" airStartTime"。

然后,当您想要降落时,您可以再次使用Time.time并计算差异,Time.time - airStartTime将返回您在空中的秒数。

但我不确定这是不是你想要的。

编辑:

private float airTime = 0f; // put this variable as a field of your class
// Since this check is done every Update you can add the delta time to the airTime variable
if (GroundCheck())
{
     // The airTime timer should be reset here?
     velocityY = 0;
     if (airTime > 10f) // I think, this should be in frames? -> the airTime will be in seconds with this method
     {
         anim.SetTrigger("HardLanding");
     }
     else
     {
         anim.SetTrigger("NormalLanding");
     }

     // Reset the time after the checks
     airTime = 0f;
}
else
{
    anim.SetTrigger("onAir"); // -> Currently this is set at every frame as long as the controller is in the air, 
    //you might need a additional check if you only want to set the trigger once when the character leaves the ground

    // The airTime timer should start counting in frames

    // Add the delta time here
    airTime += Time.deltaTime;
}