项目符号在墙内实例化,不会触发OnCollisionEnter2D

时间:2019-05-17 16:59:42

标签: c# unity3d

left

我使用此脚本。一切正常,但是如果我的void OnCollisionEnter2D(Collision2D col) { if (col.gameObject.tag == "Wall") { Destroy(gameObject); } } bullet产卵,则不会与墙反应。它在墙上飞。 那么,如果它在墙内产生,我应该怎么用来立即销毁子弹?

子弹生成方法:

Wall

enter image description here

1 个答案:

答案 0 :(得分:2)

因为当在另一个对撞器中实例化GameObject时,对撞器会带来麻烦。我建议您首先检查子弹是否将在Wall内实例化,在这种情况下,请不要直接实例化它。我相信这将使代码更高效。

因此,首先需要在“图层”中添加墙(Here,您将看到如何创建新图层并将墙分配给该图层)。将其作为参数传递给用于实例化项目符号的脚本(例如,坦克的脚本)。

public LayerMask wallLayer;

将坦克的变换保存在变量中

// Variable with position of the Tank
Transform _transform;

void Awake () {

    _transform = GetComponent<Transform> ();

}

您生成的下一件事Physics2D.LinecastSource。假设您使用附在坦克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);