拍摄决定着陆动画播放的光线投影

时间:2018-03-21 01:44:31

标签: c# unity3d unityscript

正如标题所说,我试图创建一个决定第三人控制器应该着陆的机制。玩家有一个" HardLanding"和#34; NormalLanding"动画。起初我尝试使用计时器实现这一点,但这并没有提供预期的行为(当玩家向前跳时它也会播放HardLanding动画,这不是应该发生的事情)。我使用的是字符控制器组件,因此没有刚体或对撞机(只有CharacterController和脚本)。

我已经设置了一个向下光线投射的空白,当播放器没有接地时,这个目前正在进行。问题是groundCheck每帧都在更新,因为它在更新功能中。这意味着每条帧都会发出此光线并给出不同的值。我认为这条射线应该只射一次,所以有一个值决定了玩家的高度,或者只要玩家没有接地,当前射出的射线应该检查其最高值而不是我可以做点什么。 if(rayheight数字高于x){play HardLanding} else {play NormalLanding}。当玩家明显重新接地时,着陆动画应该开始播放。

到目前为止,这是我的gotton,但是还没有工作:

void CheckFallingDistance()
{
    RaycastHit hitFall;
    Vector3 bottom = controller.transform.position - new Vector3(0, controller.height / 2, 0);

    if (Physics.Raycast(bottom, dirDown, out hitFall))
    {
        rayDistance = hitFall.distance;
    }

    Debug.DrawRay(bottom, dirDown * hitFall.distance, Color.cyan, 10f);
}

下面你可以看到我当前的地面检查,它仍然包含决定哪个着陆动画应该播放的计时器。计时器部分应替换为光线投射检查下降高度。

if (GroundCheck())
    {
        velocityY = 0;
        if (airTime > airTimeHandler)
        {
            //Debug.Log("Hard landing");
            anim.SetBool("hardLanding", true);
            anim.SetBool("onAir", false);
            anim.SetBool("onAirIdle", false);
        }
        else
        {
            //Debug.Log("Normal landing");
            anim.SetBool("hardLanding", false);
            anim.SetBool("onAir", false);
            anim.SetBool("onAirIdle", false);
        }
        airTime = 0f;
    }
    else
    {
        CheckFallingDistance();
        if (animationSpeedPercent < 0.51f)
        {
            anim.SetBool("onAirIdle", true);
        }
        else
        {
            anim.SetBool("onAir", true);
        }
        anim.SetBool("hardLanding", false);
        airTime += Time.deltaTime;
    }

2 个答案:

答案 0 :(得分:0)

你知道你的球员的绝对位置(y分量),剩下的就是找到此时的高度。如果你的楼层在y = 0,那么这是微不足道的,但是既然你提到了光线投射,我假设不是。 我假设您只需要在最高点测量高度,您可以在离开地面时启动Coroutine(最好避免更新()),并检查该协程中每个帧中的垂直位置。在跳跃的开始阶段,位置将增加,但在某些时刻,当前位置将变得低于最后一帧中的位置。这是拍摄光线投影时的帧,并决定您播放哪种动画。你可以在此时结束你的协程(除非你的地面非常不均匀)。

您还可以在着陆前测量球员速度,并根据

决定

答案 1 :(得分:0)

最终我决定抛弃光线投射部分并去检查角色控制器组件的Y速度。