当物品掉到地上时,团结光线打击三次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当物品掉到地上时,团结光线打击三次相关的知识,希望对你有一定的参考价值。

每次接触地面时,我从一个球到地面的光线投射都要三次。

我只需要一次和toptup动画。电话是这样的:

  private void FixedUpdate()
    {
        if (!Physics.Raycast(transform.position, -Vector3.up, distanceground + 0.1f))
        {
            Debug.Log("intheair");

        }
        else {
            dropped = true;
            Debug.Log("dropped");
            if (dropped && !GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsTag("topup"))
            {
                GetComponent<Animator>().SetTrigger("topup");
                Debug.Log("trigged");
            }
        }
答案

这可以解决您的问题。

        if (!Physics.Raycast(transform.position, -Vector3.up, distanceground + 0.1f) && !dropped)
    {
        Debug.Log("intheair");

    }
    else {
        dropped = true;
        Debug.Log("dropped");
        if (dropped && !GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsTag("topup"))
        {
            GetComponent<Animator>().SetTrigger("topup");
            Debug.Log("trigged");
        }
    }
另一答案

一旦你的对象在里面

distanceground + 0.1f

然后

if (!Physics.Raycast(transform.position, -Vector3.up, distanceground + 0.1f))

将返回false每个FixedUpdate()并推迟到你的else区块,所以问题不在于Raycast

问题很可能在于你在GetCurrentAnimatorStateInfo(0)检查FixedUpdate()。在较低的帧速率下,FixedUpdate()可以被称为每个Update()几次,导致

if (dropped && !GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsTag("topup"))

评估true,因为视觉动画状态可能还没有时间更新。

我建议把它全部移到Update()

以上是关于当物品掉到地上时,团结光线打击三次的主要内容,如果未能解决你的问题,请参考以下文章

csharp 团结,光线投射,bulletholes.cs

光线行进时的 GLSL 伪影

SpriteKit + Swift - 如何通过缓动移动节点?

如何为光线投射生成相机光线

俄罗斯方块游戏开发系列教程4:形状碰撞检测(上)

当在 Swift Spritekit 中触摸并按住屏幕时,我将如何向上移动我的节点?