C# 为什么板条箱要打开/关闭?靠近板条箱时,不停止?

C# 为什么板条箱要打开/关闭?靠近板条箱时,不停止?,c#,unity3d,C#,Unity3d,我希望当玩家靠近板条箱时,它会打开一次,然后当玩家离开板条箱超过1.5f距离时,关闭板条箱一次,如果再次靠近,则打开一次 但是当玩家现在接近它时,它会很快地打开/关闭,不停。 如果玩家离它越来越远,它将关闭一次,但问题是当接近它时 脚本,可能是我为“打开”和“关闭”所做的逻辑有问题 using System.Collections; using System.Collections.Generic; using UnityEngine; public class UnlockCrate : M

我希望当玩家靠近板条箱时,它会打开一次,然后当玩家离开板条箱超过1.5f距离时,关闭板条箱一次,如果再次靠近,则打开一次

但是当玩家现在接近它时,它会很快地打开/关闭,不停。 如果玩家离它越来越远,它将关闭一次,但问题是当接近它时

脚本,可能是我为“打开”和“关闭”所做的逻辑有问题

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UnlockCrate : MonoBehaviour
{
    public GameObject carte;
    public Animation anim;

    private bool playAnimOnce = false;

    private void Update()
    {
        var distance = Vector3.Distance(carte.transform.position, transform.position);
        if(distance < 1.5f && playAnimOnce == false)
        {
            anim.Play("Crate_Open");

            playAnimOnce = true;
        }
        else
        {
            if(playAnimOnce == true)
            {
                anim.Play("Crate_Close");

                playAnimOnce = false;
            }
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类解锁箱:单行为
{
公共游戏对象点菜;
公共动画;
private bool playAnimOnce=假;
私有void更新()
{
变量距离=向量3.距离(carte.transform.position,transform.position);
if(距离<1.5f&&playAnimOnce==false)
{
动画游戏(“板条箱打开”);
playAnimOnce=真;
}
其他的
{
if(playAnimOnce==true)
{
动画游戏(“板条箱关闭”);
playAnimOnce=假;
}
}
}
}

代码看起来是这样的(旁边的变量奇怪地命名为“板条箱打开”):

  • 如果播放器小于(1.5个单位),且机箱未打开
    • 打开板条箱
  • 否则
    • 如果板条箱是打开的
      • 关上板条箱
因此,当你靠近时,它会打开,然后下次通过此代码时,它会关闭它,无论你在哪里,甚至在“打开”范围内

请尝试以下方法:

if (distance < 1.5f)
{
    if (!playAnimOnce)
    {
        anim.Play("Crate_Open");
        playAnimOnce = true;
    }
}
else if (playAnimOnce)
{
    anim.Play("Crate_Close");
    playAnimOnce = false;
}
if(距离<1.5f)
{
如果(!playanimone)
{
动画游戏(“板条箱打开”);
playAnimOnce=真;
}
}
else if(播放动画一次)
{
动画游戏(“板条箱关闭”);
playAnimOnce=假;
}
现在,它将只打开板条箱,如果你在范围内,它是关闭的,并将只关闭它,如果你在范围外