我在Unity中制作了一个简单的ApplePicker原型,并且在销毁对象方面遇到了麻烦。在我附加到我的购物篮对象的脚本中,我想在我的if
函数中添加Update()
语句,该函数表示如果苹果达到某个y值(即不在视图范围内),则销毁其中一个篮子。
if(...) {
Destroy(this.gameObject);
}
但我不知道该把什么作为一个条件。有人可以帮我吗?如果需要,苹果对象有标签" Apple"
答案 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.localEulerAngles
和transform.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;
}