TyeUnityToolsResourcesCS

TyeUnityToolsResourcesCS.cs

using System;
using System.Collections;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class TyeUnityToolsResourcesCS : MonoBehaviour
{
    ///-- 1.1 场景加载: 异步带进度条
    ///StartCoroutine(yeSceneLoad("SceneMain", eSlider));
    public static IEnumerator yeSceneLoad(string eStrSceneName, Slider eSlider)
    {
        //int eIndex = SceneManager.GetActiveScene().buildIndex; //可获取当前场景序号:
        //SceneManager.LoadScene(eIndex+1); //直接同步加载到下一个序号的场景(也可用场景名来加载);

        float eProgress = 0; // 场景加载进度;
        eSlider.value = eProgress;

        AsyncOperation eOperation = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(eStrSceneName);
        eOperation.allowSceneActivation = false;//false:加载完不跳转场景, 默认true:加载完自动跳转;
        /// eOperation.allowSceneActivation = true;// 加载完自动跳转场景;

        while (!eOperation.isDone)//isDone:是否完成;
        {
            eProgress = eOperation.progress;
            eSlider.value = eProgress;
            //Debug.Log($"---场景加载进度条的更新:{eProgress}--");

            if (eOperation.progress >= 0.9f)//如果进度条已经到达90%
            {
                eProgress = 1; //那就让进度条的值编变成1 (体验会较好,其他的10%在进入新场景时会加载完)
                eSlider.value = eProgress;

                eOperation.allowSceneActivation = true;//跳转场景
                //if (Input.anyKey)//点击了任意按键才跳转 (PC端有效)
                //{
                //    eOperation.allowSceneActivation = true;//跳转场景
                //}
            }
            yield return null;
        }
    }

    ///-- 1.2 预制体的加载: 
    public static IEnumerator yeLoadPrefab(GameObject eObjFather, string eStrPrefabName = "Test/TyePrefab", string eStrDisName = "TyeShowName")
    { // Assets --> Resources --> Test/TyePrefab
        //GameObject eObjFather = GameObject.Find("Main Canvas");

        GameObject eObj = Instantiate(Resources.Load<GameObject>(eStrPrefabName)); // 实例化预制体;
        eObj.transform.parent = eObjFather.transform; //加到父类中;
        eObj.transform.localPosition = Vector3.zero;  //位置,Position(0,0,0);
        eObj.transform.localScale = Vector3.one;      //大小, Scale(1,1,1)
        eObj.name = eStrDisName; // 在场景中显示的名称;

        //yield return null;
        yield break;
        //Destroy(eObj); //删除;
    }


    ///-- 2.1 从 内部文件夹中(Assets-->Resources)  获取 泛型(eg: 图片) 资源: 
    //Sprite eSprite = TyeUnityToolsResourcesCS.yeGetDataForPathResources<Sprite>("Tye/ImgTye");
    public static T yeGetDataForPathResources<T>(string eStrPath, T eT = null, Image eImg = null, bool isAsync = true) where T : UnityEngine.Object
    { // Assets --> Resources --> Tye/ImgTye.png
        try
        {
            //Texture2D eTexture2D = Resources.LoadAsync<Texture2D>(eStrPath).asset as Texture2D; // 异步加载;
            //Sprite eSprite = Sprite.Create(eTexture2D, new Rect(0, 0, eTexture2D.width, eTexture2D.height), Vector2.zero);
            //eImg.sprite = eSprite;
            //Resources.UnloadAsset(eTexture2D); //释放资源;

            T eLoadT;
            if (isAsync)
            {
                eLoadT = Resources.LoadAsync<T>(eStrPath).asset as T; // 异步加载;
            } else {
                eLoadT = Resources.Load<T>(eStrPath); // 同步;
            }

            if (null != eImg && (eLoadT.GetType() == eImg.sprite.GetType()))
            { // 当eT 为 Sprite时:
                //TyeUnityToolsResourcesCS.yeDeleteSpriteForImage(eImg); // 不用删除, 也不能删除;
                eImg.sprite = eLoadT as Sprite;
            }

            if (null != eT)
            {
                eT = eLoadT;
            }
            
            //Resources.UnloadAsset(eLoadT); //释放资源;
            Resources.UnloadUnusedAssets(); //释放 所有 未使用的资源;
            return eLoadT;
        } catch (System.Exception e) {
            Debug.Log($"---yeImgFromPath,异常:{e}--");
            return null;
        }
    }

    ///-- 2.2 【只在编译器模式下有效】UnityEditor;  从Assets文件夹下去数据, eStrPath = "Assets/Tye/Tye.png", using UnityEditor;
    // !!! 【 不要用此方法 UnityEditor.AssetDatabase, 打包移动端时会报错 】
    public static void yeGetDataForAssetsUnityEditor<T>(string eStrPath, T eT = null, Image eImg = null, bool IsAsync=true) where T : UnityEngine.Object
    { //eStrPath = "Assets/Tye/Tye.png"
        T eLoadT = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(eStrPath);
        if (null != eImg && (eLoadT.GetType() == eImg.sprite.GetType())) {
            eImg.sprite = eLoadT as Sprite;
            Resources.UnloadAsset(eLoadT);
        } else{
            Debug.Log($"---获得的数据名:{eLoadT.name}--");
        }
        
        if (null != eT)
        {
            eT = eLoadT;
        }
        //UnityEditor.AssetDatabase.Refresh();
    }

    ///-- 2.2 从 外部 文件夹中获取 图片资源: UnityWebRequestTexture, (eg: 数据持久化路径 PersistentDataPath)
    public static IEnumerator yeGetImageForUnityWebRequest(string ePathImg, Image eImg = null)
    { // string ePathImg = $"file://{ePathImages}{eStrImgID}.png";
        //【UnityWebRequest加载本地文件地址头用 file://  , 加载网络文件地址头用 http:// 】
        UnityWebRequest eRequest = UnityWebRequestTexture.GetTexture(ePathImg);
        yield return eRequest.SendWebRequest();
        if (eRequest.isNetworkError || eRequest.isHttpError)
        {
            Debug.Log($"--- 加载资源错误:{eRequest.error}--");
        } else {
            //TyeUnityToolsResourcesCS.yeDeleteSpriteForImage(eImg);
            Texture2D eTexture2D = DownloadHandlerTexture.GetContent(eRequest);
            eImg.sprite = Sprite.Create(eTexture2D, new Rect(0, 0, eTexture2D.width, eTexture2D.height), Vector2.zero);
            eRequest.Dispose(); //释放请求;
            //Resources.UnloadAsset(eTexture2D); //释放资源;
            Resources.UnloadUnusedAssets(); //释放 所有 未使用的资源;
            yield return null;
        }
    }

    
    ///==
    public static void yeDeleteSpriteForImage(Image eImg)
    {
        if (null != eImg.sprite)
        {
            if (eImg.sprite.texture)
            {
                DestroyImmediate(eImg.sprite.texture);
            }
            Destroy(eImg.sprite);
        }

        if (null != eImg.sprite)
        {
            UnityEngine.U2D.SpriteAtlas.Destroy(eImg.sprite);
        }
    }


    ///-- 释放资源:
    public static void yeResourcesUnLoading<T>(T t) where T : UnityEngine.Object
    {
        //ResourcesUnLoading<T>(t);
        //Resources.UnloadAsset(eTexture2D); //释放资源;
        Resources.UnloadUnusedAssets(); //释放 所有 未使用的资源;
    }

    //--- 资源加载
    //public virtual void ResourcesLoading<T>(T t, string path, bool IsAsync) where T : UnityEngine.Object
    //{
    //    throw new NotImplementedException();
    //}


    public void yeSaveConfigForPlayerPrefs()
    {
        //---1.存数据
        PlayerPrefs.SetString("name", "中文");
        PlayerPrefs.SetInt("age", 15);
        PlayerPrefs.SetInt("sex", 1);
        PlayerPrefs.SetFloat("hight", 1.62f);
        PlayerPrefs.Save(); //立即保存;
        
        //---2.取数据
        Debug.Log(PlayerPrefs.GetString("name"));
        Debug.Log(PlayerPrefs.GetInt("age"));
        Debug.Log(PlayerPrefs.GetInt("sex"));
        Debug.Log(PlayerPrefs.GetFloat("hight"));

        //---3.查找删除
        if (PlayerPrefs.HasKey("name")) // 检测是否有此 key;
        {
            Debug.Log("Has the key");//第一次输出这个
            PlayerPrefs.DeleteKey("name"); // 删除;
        } else {
            Debug.Log("ELSE NOT FOUND");//第二次输出这个(被第一次删除了,找不到了)
        }

        //--- 4.
        string eStrName = PlayerPrefs.GetString("name");
        if (string.IsNullOrEmpty(eStrName))
        {
            Debug.Log("--- String 为空! --");
        }
    }

    // 系列化:
    public static byte[] yeObject2Bytes(object obj)
    {
        byte[] buff;
        using (MemoryStream ms = new MemoryStream())
        {
            IFormatter iFormatter = new BinaryFormatter();
            iFormatter.Serialize(ms, obj);
            buff = ms.GetBuffer();
        }
        return buff;
    }

    // 反系列化:
    public static object yeBytes2Object(byte[] buff)
    {
        object obj;
        using (MemoryStream ms = new MemoryStream(buff))
        {
            IFormatter iFormatter = new BinaryFormatter();
            obj = iFormatter.Deserialize(ms);
        }
        return obj;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值