En este momento estás viendo He visto muchas de estas soluciones de error, pero no pude encontrar ninguna que pudiera ayudarme a resolver esto.  Realmente espero que algunos de ustedes puedan ayudar.  Gracias [duplicate]

 – Unity

He visto muchas de estas soluciones de error, pero no pude encontrar ninguna que pudiera ayudarme a resolver esto. Realmente espero que algunos de ustedes puedan ayudar. Gracias [duplicate] – Unity

He visto muchas de estas soluciones de error, pero no pude encontrar ninguna que pudiera ayudarme a resolver esto. Realmente espero que algunos de ustedes puedan ayudar. Gracias [duplicate]

– UnityAssets3Free

bienvenido , por aqui Camilo y aqui os traigo
esta nueva pregunta

Esta pregunta ya tiene respuestas aquí: ¿Qué es una NullReferenceException y cómo la soluciono? (27 respuestas) Cerrado el año pasado.

MissingReferenceException: el objeto de tipo ‘GameObject’ ha sido destruido, pero aún está intentando acceder a él. Su secuencia de comandos debe verificar si es nulo o no debe destruir el objeto. ObjectPooler.GetPooledObject() (en Activos/Scripts/ObjectPooler.cs:31) PlatformGenerator.Update() (en Activos/Scripts/PlatformGenerator.cs:57)



PlatformGenerator

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

public class PlatformGenerator : MonoBehaviour

    public GameObject thePlatform;
    public Transform generationPoint;
    public float distanceBetween;

    private float platformWidth;

    public float distanceBetweenMin;
    public float distanceBetweenMax;

    //public GameObject[] thePlatforms;
    private int platformSelector;
    private float[] platformWidths;



    public ObjectPooler[] theObjectPools;

    //public GameObject[] thePlatforms;




    // Start is called before the first frame update
    void Start()
    
        //platformWidth = thePlatform.GetComponent<BoxCollider2D>().size.x;
        //to search which of the platform has BC2D with sz

        platformWidths = new float[theObjectPools.Length];

        for(int i = 0; i < theObjectPools.Length; i++)
        
            platformWidths[i] = theObjectPools[i].pooledObject.GetComponent<BoxCollider2D>().size.x;
        

    

    // Update is called once per frame
    void Update()
    
        if (transform.position.x < generationPoint.position.x)
        
            distanceBetween = Random.Range (distanceBetweenMin, distanceBetweenMax);

            platformSelector = Random.Range(0, theObjectPools.Length);

            transform.position = new Vector3 (transform.position.x + (platformWidths[platformSelector] / 2) + distanceBetween, transform.position.y, transform.position.z);

            //Instantiate(/* thePlatform */ thePlatforms[platformSelector], transform.position, transform.rotation);

            GameObject newPlatform = theObjectPools[platformSelector].GetPooledObject();

            newPlatform.transform.position = transform.position;
            newPlatform.transform.rotation = transform.rotation;
            newPlatform.SetActive(true);


            transform.position = new Vector3(transform.position.x + (platformWidths[platformSelector] / 2), transform.position.y, transform.position.z);

        
    


agrupador de objetos

using System.Collections;

usando System.Collections.Generic; utilizando UnityEngine;

ObjectPooler de clase pública: MonoBehaviour GameObject público pooledObject;

public int pooledAmount;

List<GameObject> pooledObjects;

// Start is called before the first frame update
void Start()

    pooledObjects = new List<GameObject>();

    for(int i = 0; i < pooledAmount; i++)
    
        //casting mtd
        GameObject obj = (GameObject) Instantiate(pooledObject);
        obj.SetActive(false);
        pooledObjects.Add(obj);
    


public GameObject GetPooledObject()

    for (int i = 0; i < pooledObjects.Count; i++)
    
        if (!pooledObjects[i].activeInHierarchy)
        
            return pooledObjects[i];
        
    

    GameObject obj = (GameObject)Instantiate(pooledObject);
    obj.SetActive(false);
    pooledObjects.Add(obj);
    return obj;


1 respuesta 1

Deberías poner algo de código para que se entienda mejor. Normalmente no creo una instancia de objeto usando el operador NUEVO a menos que sea absolutamente necesario. Esto evita la tarea de destruir el objeto que creó en la memoria del montón.

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

sin mas,espero que te funcione

Deja una respuesta