Esto nunca me ha pasado, así que estoy un poco confundido.
GameObject someObject = Instantiate (Resources.Load ("Prefabs/Items/" + someName)) as GameObject;
Esto arroja un error, pero el objeto en realidad se instancia y todo funciona según lo previsto. El error no detiene el programa, no importa cuántas veces reproduzco esto.
¿Puedo ignorar este error o hay algún problema que no estoy viendo?
Respuestas:
Si el objeto se instancia correctamente a pesar de que la
Intantiate()
línea arroja una excepción, entonces el error proviene de otra instancia del script: es posible que accidentalmente tenga una segunda copia en su escena.Una instancia está configurada correctamente y se realiza
Instantiate()
como se esperaba sin errores, por lo que el objeto se crea como se desea.Otra instancia está configurada incorrectamente y arroja un error. Pero si solo está mirando la instancia configurada correctamente, este error parecerá provenir de la nada y no tendrá consecuencias visibles.
Puede imprimir la ruta al objeto en Inicio, o en una comprobación nula justo antes de la línea ofensiva, para ayudar a localizar duplicados de escenas no deseadas.
Absolutamente no debe ignorar este error.
En el mejor de los casos, está quemando ciclos de cómputo innecesariamente. En el peor de los casos, es una señal de que su juego está haciendo algo que no comprende completamente, y que puede ser la raíz de problemas mucho más grandes en el futuro.
fuente
Responder
Permítanme comenzar respondiendo su pregunta directamente:
Usted podría . No deberías , porque significa que algo va mal. Te acostumbrarías a este error, pero podría "esconderse" o causar otro error.
Actualmente tiene un mensaje de error y aún funciona correctamente. ¡Al revés, no funciona y no tiene (o más bien: no reconoce) comentarios por qué, es mucho peor!
Consejo
Para saber de dónde viene esto, divide todo esto en varias líneas.
Un error solo te dice en qué línea sucedió. Si el error ocurre en este código, el número de línea le informará más sobre qué parte salió mal aquí. Además, recomendaría usar la versión genérica de
Resources.Load
, que en realidad nos daría un paso menos de qué preocuparnos:Averiguando por qué
Instantiate()
.prefab
esnull
.Resources.Load
devolucionesnull
.Resources.Load
dice " Devuelve el activo enpath
si se puede encontrar, de lo contrario devuelve nulo " .resourceLocation
)Algo está mal con este camino, por lo que el primer paso obvio sería ver lo que realmente termina siendo, con Debug.Log. Como "todo funciona según lo previsto", es probable que haya alguna duplicación donde una versión funciona y la otra le da este error.
En ese caso, es una buena idea usar la versión de 2 parámetros de Debug.Log
Debug.Log(resourceLocation, gameObject);
. Ahora, si hace clic en el mensaje de registro en el editor de Unity, seleccionará deGameObject
dónde vino.fuente