когда созданный игровой объект уничтожен, он больше не производит клонов - PullRequest
0 голосов
/ 03 июля 2018

Я делаю 2D-игру, в которой мяч продолжает создаваться красным, зеленым, синим или желтым цветом. Есть квадратное весло со всеми 4 цветами. если мяч попадает в тот же цвет, он должен уничтожить себя. Я сделал скрипт для создания экземпляра объекта.

Это тот сценарий:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ballSpawn : MonoBehaviour {

    public GameObject ball;
    public Transform ballSpawnTransform;
    private float startTime = 2f; 
    private float repeatRate = 2f;

    // Use this for initialization
    void Start () {
        InvokeRepeating ("BallSpawn", startTime, repeatRate);
    }

    // Update is called once per frame
    void Update () {

    }

    public void BallSpawn(){
        ball = Instantiate (ball, ballSpawnTransform.position, ballSpawnTransform.rotation);
    }
}

Я прикрепил метод смены цвета и метод уничтожения с префабом. скрипт для этого приведен ниже: -

public class ball_controller : MonoBehaviour {

    [SerializeField]
    public int colorInt;
    Rigidbody2D rb;

    // Use this for initialization
    void Start () {
        //rb = this.gameObject;
        colorInt = Random.Range (1, 5);
        switch (colorInt) {
        case 1:
            gameObject.GetComponent<Renderer> ().material.color = Color.red;
            break;
        case 2:
            gameObject.GetComponent<Renderer> ().material.color = Color.green;
            break;
        case 3:
            gameObject.GetComponent<Renderer> ().material.color = Color.blue;
            break;
        case 4:
            gameObject.GetComponent<Renderer> ().material.color = Color.yellow;
            break;
        }
        rb = this.gameObject.GetComponent<Rigidbody2D> ();
        rb.velocity = new Vector3 (0f, -5f, 0f);
    }

    // Update is called once per frame
    void Update () {

    }

    void OnTriggerEnter2D(Collider2D hit){
        if (hit.gameObject.GetComponent<Renderer> ().material.color == gameObject.GetComponent<Renderer> ().material.color) {
            Destroy (this.gameObject);
        } else {
            DestroyObject (this.gameObject);
        }

    }
}

но когда это уничтожает игровой объект. Это дает следующую ошибку.

"MissingReferenceException: объект типа 'GameObject' был уничтожен, но вы все еще пытаетесь получить к нему доступ. Ваш сценарий должен либо проверьте, является ли он нулевым, либо не следует уничтожать объект. "

Он больше не создает шары и продолжает выдавать эту ошибку за каждый шар, который должен был начаться. Я хочу, чтобы мой скрипт продолжал создавать экземпляры клонов.

1 Ответ

0 голосов
/ 03 июля 2018

Я полагаю, что это может быть потому, что вы перезаписываете ball новым экземпляром мяча. Как только этот шар уничтожен, ссылка на этот компонент не работает. Вместо этого у вас должно быть две отдельные переменные Gameobject - одна для хранения префаба шара, а другая для ссылки на новый шар в вашем скрипте:

public GameObject ball; //the prefab you want to spawn
private GameObject spawnedball; //a local temporary reference

public void BallSpawn(){
    spawnedball = Instantiate (ball, ballSpawnTransform.position, ballSpawnTransform.rotation);
}
...