• Error CS1061 unity how to fix the error (Blockchain Game using Moralis, Unity, C#)?

    @STrel564 Автор вопроса
    The second part of the code(189-326):
    void StoreNavMeshDataIfInPrefab(NavMeshSurface surfaceToStore)
            {
                var prefabStage = PrefabStageUtility.GetPrefabStage(surfaceToStore.gameObject);
                var isPartOfPrefab = prefabStage != null && prefabStage.IsPartOfPrefabContents(surfaceToStore.gameObject);
                if (!isPartOfPrefab)
                    return;
    
                // check if data has already been stored for this surface
                foreach (var storedAssetInfo in m_PrefabNavMeshDataAssets)
                    if (storedAssetInfo.Surface == surfaceToStore)
                        return;
    
                if (m_PrefabNavMeshDataAssets.Count == 0)
                {
                    PrefabStage.prefabSaving -= DeleteStoredNavMeshDataAssetsForOwnedSurfaces;
                    PrefabStage.prefabSaving += DeleteStoredNavMeshDataAssetsForOwnedSurfaces;
    
                    PrefabStage.prefabStageClosing -= ForgetUnsavedNavMeshDataChanges;
                    PrefabStage.prefabStageClosing += ForgetUnsavedNavMeshDataChanges;
                }
    
                var isDataOwner = true;
                if (PrefabUtility.IsPartOfPrefabInstance(surfaceToStore) && !PrefabUtility.IsPartOfModelPrefab(surfaceToStore))
                {
                    var basePrefabSurface = PrefabUtility.GetCorrespondingObjectFromSource(surfaceToStore) as NavMeshSurface;
                    isDataOwner = basePrefabSurface == null || surfaceToStore.navMeshData != basePrefabSurface.navMeshData;
                }
                m_PrefabNavMeshDataAssets.Add(new SavedPrefabNavMeshData { Surface = surfaceToStore, NavMeshData = isDataOwner ? surfaceToStore.navMeshData : null });
            }
    
            bool IsCurrentPrefabNavMeshDataStored(NavMeshSurface surface)
            {
                if (surface == null)
                    return false;
    
                foreach (var storedAssetInfo in m_PrefabNavMeshDataAssets)
                {
                    if (storedAssetInfo.Surface == surface)
                        return storedAssetInfo.NavMeshData == surface.navMeshData;
                }
    
                return false;
            }
    
            void DeleteStoredNavMeshDataAssetsForOwnedSurfaces(GameObject gameObjectInPrefab)
            {
                // Debug.LogFormat("DeleteStoredNavMeshDataAsset() when saving prefab {0}", gameObjectInPrefab.name);
    
                var surfaces = gameObjectInPrefab.GetComponentsInChildren<NavMeshSurface>(true);
                foreach (var surface in surfaces)
                    DeleteStoredPrefabNavMeshDataAsset(surface);
            }
    
            void DeleteStoredPrefabNavMeshDataAsset(NavMeshSurface surface)
            {
                for (var i = m_PrefabNavMeshDataAssets.Count - 1; i >= 0; i--)
                {
                    var storedAssetInfo = m_PrefabNavMeshDataAssets[i];
                    if (storedAssetInfo.Surface == surface)
                    {
                        var storedNavMeshData = storedAssetInfo.NavMeshData;
                        if (storedNavMeshData != null && storedNavMeshData != surface.navMeshData)
                        {
                            var assetPath = AssetDatabase.GetAssetPath(storedNavMeshData);
                            AssetDatabase.DeleteAsset(assetPath);
                        }
    
                        m_PrefabNavMeshDataAssets.RemoveAt(i);
                        break;
                    }
                }
    
                if (m_PrefabNavMeshDataAssets.Count == 0)
                {
                    PrefabStage.prefabSaving -= DeleteStoredNavMeshDataAssetsForOwnedSurfaces;
                    PrefabStage.prefabStageClosing -= ForgetUnsavedNavMeshDataChanges;
                }
            }
    
            void ForgetUnsavedNavMeshDataChanges(PrefabStage prefabStage)
            {
                // Debug.Log("On prefab closing - forget about this object's surfaces and stop caring about prefab saving");
    
                if (prefabStage == null)
                    return;
    
                var allSurfacesInPrefab = prefabStage.prefabContentsRoot.GetComponentsInChildren<NavMeshSurface>(true);
                NavMeshSurface surfaceInPrefab = null;
                var index = 0;
                do
                {
                    if (allSurfacesInPrefab.Length > 0)
                        surfaceInPrefab = allSurfacesInPrefab[index];
    
                    for (var i = m_PrefabNavMeshDataAssets.Count - 1; i >= 0; i--)
                    {
                        var storedPrefabInfo = m_PrefabNavMeshDataAssets[i];
                        if (storedPrefabInfo.Surface == null)
                        {
                            // Debug.LogFormat("A surface from the prefab got deleted after it has baked a new NavMesh but it hasn't saved it. Now the unsaved asset gets deleted. ({0})", storedPrefabI
    
                            // surface got deleted, thus delete its initial NavMeshData asset
                            if (storedPrefabInfo.NavMeshData != null)
                            {
                                var assetPath = AssetDatabase.GetAssetPath(storedPrefabInfo.NavMeshData);
                                AssetDatabase.DeleteAsset(assetPath);
                            }
    
                            m_PrefabNavMeshDataAssets.RemoveAt(i);
                        }
                        else if (surfaceInPrefab != null && storedPrefabInfo.Surface == surfaceInPrefab)
                        {
                            //Debug.LogFormat("The surface {0} from the prefab was storing the original navmesh data and now will be forgotten", surfaceInPrefab);
    
                            var baseSurface = PrefabUtility.GetCorrespondingObjectFromSource(surfaceInPrefab) as NavMeshSurface;
                            if (baseSurface == null || surfaceInPrefab.navMeshData != baseSurface.navMeshData)
                            {
                                var assetPath = AssetDatabase.GetAssetPath(surfaceInPrefab.navMeshData);
                                AssetDatabase.DeleteAsset(assetPath);
    
                                //Debug.LogFormat("The surface {0} from the prefab has baked new NavMeshData but did not save this change so the asset has been now deleted. ({1})",
                                //    surfaceInPrefab, assetPath);
                            }
    
                            m_PrefabNavMeshDataAssets.RemoveAt(i);
                        }
                    }
                } while (++index < allSurfacesInPrefab.Length);
    
                if (m_PrefabNavMeshDataAssets.Count == 0)
                {
                    PrefabStage.prefabSaving -= DeleteStoredNavMeshDataAssetsForOwnedSurfaces;
                    PrefabStage.prefabStageClosing -= ForgetUnsavedNavMeshDataChanges;
                }
            }
        }
    }