首页 > 解决方案 > 为什么靠近箱子时箱子会不停地打开/关闭?

问题描述

我希望当玩家靠近板条箱时它会打开一次,然后当玩家离开它超过 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;
            }
        }
    }
}

标签: c#unity3d

解决方案


代码看起来像这样(奇怪地命名为“crate is open”变量除外):

  • 如果玩家小于(1.5 个单位)并且箱子未打开
    • 打开箱子
  • 除此以外
    • 如果箱子打开
      • 关闭板条箱

因此,它会在您接近时打开,然后在下一次通过此代码时将其关闭,无论您身在何处,即使在“打开”范围内也是如此。

试试这个:

if (distance < 1.5f)
{
    if (!playAnimOnce)
    {
        anim.Play("Crate_Open");
        playAnimOnce = true;
    }
}
else if (playAnimOnce)
{
    anim.Play("Crate_Close");
    playAnimOnce = false;
}

现在它只会在你在范围内并且它关闭时打开箱子,并且只有在你超出范围时才会关闭它。


推荐阅读