Задать вопрос
@NickNovicov

Как сделать уничтожение пули при столкновении в Unity?

Добрый вечер! Скажите, где в коде пули:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class Bullet : MonoBehaviour
{

    public float speed = 100f;
    public Rigidbody2D rb;
    public GameObject bullet;
    // Start is called before the first frame update
    void Start()
    {     
        rb.velocity = transform.right*speed;
    }
    void OnTriggerEnter2D(Collider2D collider)
    {
        if(collider.gameObject.name != "Player")
        {
            Destroy(gameObject);
        }
    }

Что-то сделано неправильно? При запуске игры выдаёт ошибку:
The object of type 'GameObject' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
В уроках в интернете такой-же код.
  • Вопрос задан
  • 2443 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@HLudens
Что бы не было подобных глюков нужно не уничтожать объект, а помечать как уничтоженный.
Ну а потом, уже после отработки всех столкновений, или уничтожать его или откладывать в пул для переиспользования .
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Попробуйте проверить наличие объекта до обращения к его свойству:
if(gameObject && collider.gameObject.name != "Player")
        {
            Destroy(gameObject);
        }

2. Если в момент столкновения пули идёт выстрел, то объект пули не уничтожается, а помещается перед стволом - меняются только координаты.
Как бы, образуется цепной конвейер, что позволяет сильно снизить нагрузку клиента при быстром создании и удалении объектов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы