• unity3d 资源打包加密 整理


    资源打包脚本,放到AssetsEditor 文件夹下

    using UnityEngine;
    using System.Collections;
    using UnityEditor;
    using System.IO;
    
    public class assetPack : Editor
    {
    
    
    /*
    [MenuItem("Custom Editor/Build AssetBundle From Selection - Track dependencies")]
    static void ExportResource2()
    {
        // Bring up save panel
        string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "unity3d");
        if (path.Length != 0)
        {
            // Build the resource file from the active selection.
            Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
            BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path,
                              BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets);
            Selection.objects = selection;
        }
    }
     * */
    /*
    [MenuItem("Custom Editor/Build AssetBundle Complited  to  bytes")]
    static void ExportResource5()
    {
        // Bring up save panel
        string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "unity3d");
        if (path.Length != 0)
        {
            // Build the resource file from the active selection.
            Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
            BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path,
                              BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets, BuildTarget.StandaloneWindows);
            Selection.objects = selection;
    
    
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
            byte[] buff = new byte[fs.Length];
            fs.Read(buff, 0, (int)fs.Length);
            string password = "shanghaichaolan";
            packXor(buff,buff.Length,password);
            Debug.Log("filelength:"+ buff.Length);
            fs.Close();
            File.Delete(path);
    
            string BinPath = path.Substring(0, path.LastIndexOf('.')) + ".bytes";
            FileStream cfs = new FileStream(BinPath,FileMode.Create);
            cfs.Write(buff, 0, buff.Length);
            Debug.Log("filelength:" + buff.Length);
            buff = null;
            cfs.Close();
     
        }
    }
        */
    
    [MenuItem("Custom Editor/Save Scene2")]
    static void ExportResource()
    {
        // Bring up save panel
        string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "unity3d");
        if (path.Length != 0)
        {
            // Build the resource file from the active selection.
            Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
            BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path,
                                BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets);
            Selection.objects = selection;
        }
    }
    
    [MenuItem("Custom Editor/Make unity3d file to bytes file")]
    static void ExportResourceNoTrackSS()
    {
        string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "unity3d");
        if (path.Length != 0)
        {
    
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
            byte[] buff = new byte[fs.Length];
            fs.Read(buff, 0, (int)fs.Length);
            string password = "shanghaichaolan";
            packXor(buff, buff.Length, password);
            Debug.Log("filelength:" + buff.Length);
            fs.Close();
            File.Delete(path);
    
            string BinPath = path.Substring(0, path.LastIndexOf('.')) + ".bytes";
            FileStream cfs = new FileStream(BinPath, FileMode.Create);
            cfs.Write(buff, 0, buff.Length);
            Debug.Log("filelength:" + buff.Length);
            buff = null;
            cfs.Close();
    
        }
    }
    
    static void packXor(byte[] _data, int _len, string _pstr)
    {
        int length = _len;
        int strCount = 0;
    
    
        for (int i = 0; i < length; ++i)
        {
            if (strCount >= _pstr.Length)
                strCount = 0;
            _data[i] ^= (byte)_pstr[strCount++];
    
    
        }
    
    
    }
    
    }
    

     菜单上就会出现两个, 把要打包的资源做成Prefab,选中资源,然后菜单Custom Editor/Save Scene2  输入名字

    新生成的文件,再选中新生成的文件,点击菜单Custom Editor/Make unity3d file to bytes file   输入名字

    又生成了一个文件,再点击这个文件,菜单Custom Editor/Save Scene2  ,这样就打包加密好了

    using UnityEngine;
    using System.Collections;
    
    public class loadnew : MonoBehaviour 
    {
        public string filename;
        private string BundleURL;
        private string AssetName;
        void Start()
        {
            //StartCoroutine(loadScenee());
            StartCoroutine(LoadResource());
        }
    
        IEnumerator loadScenee()
        {
            string path;
            path = "file://" + Application.dataPath + "/" + filename + ".unity3d";
            Debug.Log(path);
            WWW www = new WWW(path);
            yield return www;
            AssetBundle bundle = www.assetBundle;
            //GameObject go = bundle.Load("gCube",typeof(GameObject)) as GameObject;
    
            GameObject ObjScene = Instantiate(www.assetBundle.mainAsset) as GameObject;
            bundle.Unload(false);
    
        }
    
        IEnumerator LoadResource()
        {
            BundleURL = "file://" + Application.dataPath + "/" + filename + ".unity3d";
            Debug.Log("path:" + BundleURL);
            WWW m_Download = new WWW(BundleURL);
    
            yield return m_Download;
            if (m_Download.error != null)
            {
                //   Debug.LogError(m_Download.error);
                Debug.LogError("Warning errow: " + "NewScene");
                yield break;
            }
    
            TextAsset txt = m_Download.assetBundle.Load(filename, typeof(TextAsset)) as TextAsset;
            byte[] data = txt.bytes;
    
            byte[] decryptedData = Decryption(data);
            Debug.Log("decryptedData length:" + decryptedData.Length);
            StartCoroutine(LoadBundle(decryptedData));
        }
    
        IEnumerator LoadBundle(byte[] decryptedData)
        {
            AssetBundleCreateRequest acr = AssetBundle.CreateFromMemory(decryptedData);
            yield return acr;
            AssetBundle bundle = acr.assetBundle;
            Instantiate(bundle.mainAsset);
    
        }
    
        byte[] Decryption(byte[] data)
        {
            byte[] tmp = new byte[data.Length];
            for (int i = 0; i < data.Length; i++)
            {
                tmp[i] = data[i];
            }
                         //   shanghaichaolan
            string password ="shanghaichaolan";
            packXor(tmp,tmp.Length,password);
            return tmp;
    
        }
        static void packXor(byte[] _data, int _len, string _pstr)
        {
            int length = _len;
            int strCount = 0;
    
    
            for (int i = 0; i < length; ++i)
            {
                if (strCount >= _pstr.Length)
                    strCount = 0;
                _data[i] ^= (byte)_pstr[strCount++];
    
    
            }
    
    
        }
    
        void update()
        {
    
        }
    }
    

     加载加密和不加密的资源

  • 相关阅读:
    不用keytool,tomcat打开https
    sqlserver获取某一张表中的所有列中的最大长度
    不用keytool,tomcat打开https
    到底私钥和公钥哪个是用来加密 哪个是用来解密的
    空间支持php解压
    到底私钥和公钥哪个是用来加密 哪个是用来解密的
    sqlserver获取某一张表中的所有列中的最大长度
    数字签名(代码签名)流程
    功夫电影中非常经典(武术非常实用)
    数字签名(代码签名)流程
  • 原文地址:https://www.cnblogs.com/dragon2012/p/4087548.html
Copyright © 2020-2023  润新知