c# - 如何防止销毁 Unity 中对象的所有实例?
问题描述
我有一个名为 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 的地方,脚本无法访问实例,或者我错过了什么?先感谢您!
解决方案
如果我理解你的问题,你希望当“玩家”与“光束”的实例发生碰撞时,只破坏 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 秒后使用调用方法。
我认为我没有很好地理解您的问题,但是在这些问题中我更喜欢使用标签,这也取决于您的游戏性质
推荐阅读
- sql - 使用子字符串在sql中分隔名称
- ios - Flutter登录Apple无法在iOS模拟器上运行(无限加载器)
- mysql - 仅当日期有效时才在 MySQL 中插入日期
- javascript - 了解 React JS 中的 .env 文件和环境变量
- django-rest-framework - 使用 postman 或 django-rest-framework 测试
- sql - SQL 语句的建议格式
- matlab - 在 Matlab 中用计数命名
- javascript - 如何等待函数内部的猫鼬承诺?
- heroku - 为什么 Heroku 会引发这个不寻常的错误?
- javascript - 在 javascript 中收听网页上的传出请求