#c# #unity3d #physics #instance-variables
#c# #unity3d #физика #переменные экземпляра
Вопрос:
У меня есть сборный объект под названием Beam, который содержит несколько объектов, но один из них — это объект, который при столкновении с его экземпляром и его запуске должен уничтожить сам себя.
В настоящее время у меня есть скрипт, который генерирует все экземпляры в переменной с именем Beams. Показано здесь:
Когда это выполняется, внутри него создаются клоны. Смотрите здесь:
На последнем изображении вы также увидите сборный элемент Beam, в котором содержится файл cookie. В этом 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, скрипт не имеет доступа к экземплярам, или я что-то упускаю? Заранее благодарю вас!
Комментарии:
1. Все ли ваши файлы cookie находятся в разных позициях, чтобы вы не вводили все их коллайдеры одновременно?
2. Да, определенно, в разных позициях.
3. Не могли бы вы показать инспектору объект, к которому у вас прикреплен ваш
Collectibles
скрипт4. Ваш
Collectibles
скрипт прикреплен к вашему игровому объекту «Cookie» или к объекту «collectibles»? Еслиcollectibles
скрипт прикреплен к вашему игровому объекту «Collectibles», он удалит этот игровой объект вместе со всеми его дочерними элементами. Если вы просто хотите удалить файл cookie, который попал в коллайдер, вам нужно прикрепитьCollectibles
скрипт к игровому объекту «Cookie»
Ответ №1:
Если я понимаю ваш вопрос, вы хотите, чтобы при столкновении «player» с экземпляром «beam» уничтожался только экземпляр Cookie (или gameobject, содержащий скрипт), в данном случае это делалось бы с тегом:
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, в collider или, если вы предпочитаете, с помощью метода invoke через N секунд.
Не думаю, что я очень хорошо понял ваш вопрос, но в этих задачах я предпочитаю использовать метку, и это также зависит от характера вашей игры
Комментарии:
1. Убедитесь, что объект имеет метку Cookie
2. Я не думаю, что это то, чего хочет OP, это также уничтожит все экземпляры GameObject с тегом «Cookie», а не только тот, с которым столкнулся. OP поправьте меня, если я ошибаюсь.
3. да, вы правы, я неправильно понял вопрос, в таком случае это было бы то же самое, но без использования цикла:
4. public void destroyCookie() { Уничтожить(GameObject. Найдите gameobjectswithtag(«Cookie»)); }
5. Полезность этой схемы заключается в том, что вы можете уничтожить только некоторые объекты, например, последние два экземпляра: