当屏幕上不再显示时,使对象消失

时间:2018-01-26 23:14:31

标签: c# unity3d unity5

我在Unity中制作了一个简单的ApplePicker原型,并且在销毁对象方面遇到了麻烦。在我附加到我的购物篮对象的脚本中,我想在我的if函数中添加Update()语句,该函数表示如果苹果达到某个y值(即不在视图范围内),则销毁其中一个篮子。

if(...) {
    Destroy(this.gameObject);
}

但我不知道该把什么作为一个条件。有人可以帮我吗?如果需要,苹果对象有标签" Apple"

1 个答案:

答案 0 :(得分:4)

transform变量是一种Transform,用于访问场景中任何GameObject的位置,旋转和缩放。

您必须使用if (transform.position.y < someValue)查看该位置是否小于任何值,或if (transform.position.y > someValue)以检查该位置是否超过该值。

void Update()
{
    float someValue = 10;
    if (transform.position.y < someValue)
    {
        Destroy(this.gameObject);
    }
}

对于旋转和缩放,请分别使用transform.localEulerAnglestransform.localScale

  

我可以从附加的脚本中检查苹果的位置   篮子对象,因为我需要检查苹果的位置   不是篮子

这是同样的事情。从其他脚本中查找苹果,存储引用,然后执行上述相同的操作。

GameObject apple;

void Start()
{
    //Find apple by tag
    apple = GameObject.FindWithTag("Apple");
}

void Update()
{
    float someValue = 10;
    if (apple.transform.position.y < someValue)
    {
        Destroy(apple);
    }
}

有一种更好的方法可以在销毁之前检查对象是否不再存在。这消除了对someValue值进行硬编码的需要。只需检查屏幕尺寸。

GameObject apple;

void Start()
{
    //Find apple bt tag
    apple = GameObject.FindWithTag("Apple");
}

void Update()
{
    if (!IsVisibleOnScreen(apple))
    {
        Destroy(apple);
    }
}

private bool IsVisibleOnScreen(GameObject target)
{
    Camera mainCam = Camera.main;
    Vector3 targetScreenPoint = mainCam.WorldToScreenPoint(target.GetComponent<Renderer>().bounds.center);

    if ((targetScreenPoint.x < 0) || (targetScreenPoint.x > Screen.width) ||
            (targetScreenPoint.y < 0) || (targetScreenPoint.y > Screen.height))
    {
        return false;
    }

    if (targetScreenPoint.z < 0)
    {
        return false;
    }
    return true;
}