我有一个名为Beam的预制对象,其中包含一些东西,但其中一个是当其实例与之碰撞并被触发时应自行销毁的对象。
当前,我具有在名为Beams的变量上生成所有实例的脚本。如图所示:
运行时,它将在其中创建克隆。在这里看到:
您还将在最后一个图像中看到其中包含Cookie的Beam预制件。该cookie是我有一个脚本的地方,如果我点击它,则销毁它。该代码如下所示:
...
public class Collectibles : MonoBehaviour
{
GameManager game;
// Start is called before the first frame update
void Start()
{
game = FindObjectOfType<GameManager> ();
}
...
void OnTriggerEnter2D(Collider2D other) {
if(other.tag == "Player"){
string coinType = "Cookie";
game.AddCollectible(coinType);
Destroy(gameObject);
}
}
}
当前,当我遇到一个cookie时,它将运行Destroy(gameObject)并销毁该cookie的所有实例(每个克隆一个)。
此代码位于Cookie上,而不位于Beams上。那是对的吗?我应该在其他地方有代码吗?我也尝试了Destroy(this),但这并没有达到我的预期(只是实例)。
是否有可能在我调用Destroy的地方脚本无法访问实例,或者我丢失了某些东西?预先谢谢你!
答案 0 :(得分:0)
如果我理解您的问题,您希望当“玩家”与“光束”实例碰撞时,仅销毁Cookie(或包含脚本的游戏对象)实例,在这种情况下,它将与标签:
public GameObject[] arrayofcookie;
public int destroyedinstances=1;
//this int will tell how many instances you want to be destroyed (from the last instantiated to the first)
//for this example the last instance will be deleted
public void destroyCookie()
{
arrayofcookie= GameObject.FindGameObjectsWithTag("Cookie");
for (int i = 0; i < destroyedinstances; i++)
{
Destroy(arrayofcookie[i].gameObject);
}
}
您可以在cookie脚本中,对撞机中调用此方法,或者如果愿意,可以在N秒后调用invoke方法。
我认为我不太了解您的问题,但是在这些问题中,我更喜欢使用标签,这也取决于您游戏的性质