static void EditorApplication_ProjectChanged()
 {
     //--projectWindowChanged已过时
     //--全局监听Project视图下的资源是否发生变化(添加 删除 移动等)
     //EditorApplication.projectChanged += HandleForAssetsChange;
     //PrefabStage.prefabSaving += HandleForAssetsChange;
     AddressableUtil.AddCallBackForAssetChange(HandleForAssetChange);
 }
    /// <summary>
    /// 初始化数据
    /// </summary>
    public static void InitData()
    {
        //获取所有组
        allGroup = AddressableUtil.FindAllGrop();
        //获取保存数据
        string dataSave = FileUtil.LoadTextFile($"{pathSaveData}/{saveDataFileName}");

        if (dataSave.IsNull())
        {
            addressableSaveData = new AddressableSaveBean();
        }
        else
        {
            addressableSaveData = JsonUtil.FromJsonByNet <AddressableSaveBean>(dataSave);
        }
    }
Example #3
0
 protected override void InitTask()
 {
     LogTool.Log($"{TaskName.Value}", LogEnum.TaskLog);
     label.labelString = LabelName;
     AddressableAsync.LoadAssetsAsync <GameObject>(label, (go) =>
     {
         LogTool.Log($"{go.name}");
         AddressableUtil.InstantiateGo(go, true);
     }, (completed) =>
     {
         if (completed.Status == AsyncOperationStatus.Succeeded)
         {
             LogTool.Log($"资源加载完成", LogEnum.TaskLog);
             IsFinish = true;
         }
     });
 }
    /// <summary>
    /// 所有资源刷新
    /// </summary>
    public static void HandleForAllAssetChange()
    {
        List <AddressableAssetEntry> listAllData = AddressableUtil.FindAllAsset();
        List <AddressableAssetEntry> listData    = new List <AddressableAssetEntry>();

        for (int i = 0; i < listAllData.Count; i++)
        {
            AddressableAssetEntry addressableAsset = listAllData[i];
            if (addressableAsset.parentGroup.name.Equals("Built In Data"))
            {
            }
            else
            {
                listData.Add(addressableAsset);
            }
        }
        HandleForRefreshAssets(listData);
    }
    /// <summary>
    /// 刷新Addressable资源
    /// </summary>
    /// <param name="listChangeAssetEntry"></param>
    public static void HandleForRefreshAssets(List <AddressableAssetEntry> listChangeAssetEntry)
    {
        InitData();
        if (addressableSaveData == null)
        {
            return;
        }
        for (int i = 0; i < listChangeAssetEntry.Count; i++)
        {
            EditorUI.GUIShowProgressBar("刷新进度", "资源", (float)i / listChangeAssetEntry.Count);

            AddressableAssetEntry itemAssetEntry = listChangeAssetEntry[i];
            LogUtil.Log($"资源修改 address:{itemAssetEntry.address} AssetPath:{itemAssetEntry.AssetPath}");
            if (itemAssetEntry.AssetPath.LastIndexOf("/") == 0)
            {
                LogUtil.Log($"--------- address:{itemAssetEntry.address} AssetPath:{itemAssetEntry.AssetPath}");
            }
            string assetPathFile = itemAssetEntry.AssetPath.Remove(itemAssetEntry.AssetPath.LastIndexOf("/"));
            //查询保存的路径
            foreach (var itemSaveGroup in addressableSaveData.dicSaveData)
            {
                string groupName = itemSaveGroup.Key;

                List <string> listSavePath = itemSaveGroup.Value.listPathSave;
                //遍历路径 如果再这个路径里 则分配要这个组
                for (int f = 0; f < listSavePath.Count; f++)
                {
                    string savePath = listSavePath[f];
                    if (assetPathFile.Equals(savePath))
                    {
                        AddressableUtil.MoveAssetEntry(itemAssetEntry, groupName);
                        AddressableUtil.ClearAllLabel(itemAssetEntry);
                        AddressableUtil.SetLabel(itemAssetEntry, itemSaveGroup.Value.listLabel);
                        break;
                    }
                }
            }
        }
        EditorUtil.RefreshAsset();
        EditorUI.GUIHideProgressBar();
    }
    /// <summary>
    /// 创建所有方块的mesh数据
    /// </summary>
    public static void CreateBlockMeshData()
    {
        FileInfo[] files = FileUtil.GetFilesByPath($"{Path_Block_MeshModel}");
        if (files.IsNull())
        {
            LogUtil.Log("CreateBlockMeshData Fail No Block");
            return;
        }
        AddressableAssetGroup addressableAssetGroup = AddressableUtil.FindOrCreateGroup("BlockMesh");

        for (int i = 0; i < files.Length; i++)
        {
            FileInfo itemFile = files[i];
            if (itemFile.Name.Contains(".meta"))
            {
                continue;
            }
            LogUtil.Log($"CreateBlockMeshData:{itemFile.Name}");
            GameObject obj           = EditorUtil.GetAssetByPath <GameObject>($"{Path_Block_MeshModel}/{itemFile.Name}");
            Collider   colliderModel = obj.GetComponentInChildren <Collider>();
            //首先获取主体
            Transform  tfModel         = obj.transform.Find("Model");
            MeshFilter meshFilterModel = null;
            if (tfModel != null)
            {
                meshFilterModel = tfModel.GetComponentInChildren <MeshFilter>();
            }
            MeshDataCustom meshData;
            if (meshFilterModel != null)
            {
                Vector3 offsetPosition = new Vector3(0.5f, 0f, 0.5f);
                if (tfModel != null)
                {
                    offsetPosition += (tfModel.localPosition - new Vector3(0.5f, 0.5f, 0.5f));
                    offsetPosition += meshFilterModel.transform.localPosition + new Vector3(0f, 0.5f, 0f);
                }
                meshData = new MeshDataCustom(colliderModel, meshFilterModel.sharedMesh, 0.03125f, offsetPosition, meshFilterModel.transform.localEulerAngles);
            }
            else
            {
                meshData = new MeshDataCustom(colliderModel, 0.03125f, new Vector3(0.5f, 0f, 0.5f), Vector3.zero);
            }
            //获取Other
            List <Mesh>    listMesh0ther   = new List <Mesh>();;
            List <float>   listSizeOther   = new List <float>();
            List <Vector3> listOffsetOther = new List <Vector3>();
            List <Vector3> listRotateOther = new List <Vector3>();
            for (int f = 1; f < 10; f++)
            {
                Transform tfOther = obj.transform.Find($"Other{f}");
                if (tfOther == null)
                {
                    continue;
                }
                MeshFilter meshFiltertfOther = tfOther.GetComponentInChildren <MeshFilter>();
                Collider   colliderOther     = tfOther.GetComponentInChildren <Collider>();

                if (meshFiltertfOther != null)
                {
                    Vector3 offsetPosition = new Vector3(0.5f, 0f, 0.5f);
                    offsetPosition += (tfOther.localPosition - new Vector3(0.5f, 0.5f, 0.5f));
                    offsetPosition += meshFiltertfOther.transform.localPosition + new Vector3(0f, 0.5f, 0f);
                    listSizeOther.Add(0.03125f);
                    listOffsetOther.Add(offsetPosition);
                    listMesh0ther.Add(meshFiltertfOther.sharedMesh);
                    listRotateOther.Add(meshFiltertfOther.transform.localEulerAngles);
                }
            }
            if (!listMesh0ther.IsNull())
            {
                meshData.SetOtherMeshData(listMesh0ther, listSizeOther, listOffsetOther, listRotateOther);
            }

            string jsonData     = JsonUtil.ToJson(meshData);
            string saveFileName = $"{itemFile.Name.Replace(".prefab", "").Replace(".obj", "")}";
            //创建文件
            FileUtil.CreateTextFile($"{Application.dataPath}/Prefabs/BlockMeshData", $"{saveFileName}.txt", jsonData);
            //添加到addressable中
            string addressName = $"Assets/Prefabs/BlockMeshData/{saveFileName}.txt";
            AddressableUtil.AddAssetEntry(addressableAssetGroup, addressName, addressName);
        }
        EditorUtil.RefreshAsset();
    }