left
我使用此脚本。一切正常,但是如果我的void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag == "Wall")
{
Destroy(gameObject);
}
}
在中 bullet
产卵,则不会与墙反应。它在墙上飞。
那么,如果它在内墙内产生,我应该怎么用来立即销毁子弹?
子弹生成方法:
Wall
答案 0 :(得分:2)
因为当在另一个对撞器中实例化GameObject时,对撞器会带来麻烦。我建议您首先检查子弹是否将在Wall内实例化,在这种情况下,请不要直接实例化它。我相信这将使代码更高效。
因此,首先需要在“图层”中添加墙(Here,您将看到如何创建新图层并将墙分配给该图层)。将其作为参数传递给用于实例化项目符号的脚本(例如,坦克的脚本)。
public LayerMask wallLayer;
将坦克的变换保存在变量中
// Variable with position of the Tank
Transform _transform;
void Awake () {
_transform = GetComponent<Transform> ();
}
您生成的下一件事Physics2D.Linecast
。 Source。假设您使用附在坦克GameObject上的脚本来发射子弹:
// Linecase goes from the tank position to the place where you would be instantiating the bullet
boolean insideWall = Physics2D.Linecast(_transform.position, firepoint1.position, wallLayer);
然后,仅当您不会在墙内实例化子弹时,才实例化子弹。
if(!insideWall)
Instantiate(bullet1, firepoint1.position, firepoint1.rotation);