La experiencia de solución de problemas de una casa prefabricada faltante [falta la casa prefabricada XX en el índice n] y [use código para encontrar casas prefabricadas en la escena]

1. Descripción de los síntomas

(1) Al saltar de [Escena principal] a [Escena determinada], se informa un error: falta la casa prefabricada [falta la casa prefabricada]
inserte la descripción de la imagen aquí
(2) Cuando la escena se inicia por separado en el editor, no se informa ningún error

2. Trazabilidad de los síntomas

Hay instancias prefabricadas en la escena, pero eliminé los recursos prefabricados.

3. Proceso de resolución

  • (1) Verifique manualmente las casas prefabricadas.
    Revisé todos los objetos del juego en la escena manualmente. No hay casas prefabricadas azules. Pero el error persiste.
  • (2) Búsqueda de código para casas prefabricadas.
    Pensé que la inspección manual lo había pasado por alto, así que escribí un script de edición para buscar casas prefabricadas en la escena, pero nunca las encontré. (ver apéndice para el código fuente)
  • (3) Descubra al verdadero
    culpable. Revisé los objetos en la escena sin rumbo a mano y de repente encontré un objeto [terreno]. Me sorprendió, tal vez el árbol del interior decía que estaba vacío.
    Haga clic en él y verá que realmente falta cierto árbol.
    inserte la descripción de la imagen aquí
  • (4) Falta manija

4. Apéndice del código fuente: uso del código para buscar casas prefabricadas en la escena: script del editor

using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
#endif
/// <summary>
/// 查找场景中的预制体
/// </summary>
public class FindPrefabs : MonoBehaviour
{
    
    
#if UNITY_EDITOR
    void SearchPrefabs()
    {
    
    
        GameObject[] objects = FindObjectsOfType<GameObject>();
        foreach (GameObject go in objects)
        {
    
    
            // 检查是否是预制体实例
            if (PrefabUtility.GetPrefabInstanceHandle(go) != null)
            {
    
    
                Debug.Log(go.name + " is a prefab instance");
            }
            else
            {
    
    
                //Debug.Log(go.name + "不是预制体");
            }

            // 获取预制体根对象  
            GameObject prefabRoot = PrefabUtility.GetNearestPrefabInstanceRoot(go);
            if (prefabRoot)
            {
    
    
                Debug.Log(go.name + " is part of prefab " + prefabRoot.name);
            }

        }
    }

    [ContextMenu("查找预制体")]
    void Test()
    {
    
    
        SearchPrefabs();
    }
#endif
}

Supongo que te gusta

Origin blog.csdn.net/dzj2021/article/details/132756797
Recomendado
Clasificación