我试图向我的第三人称控制器添加不同的着陆动画,但我不确定如何编写浮动计时器。这是我到目前为止所得到的。我想到了一个名为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
}
答案 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;
}