码迷,mamicode.com
首页 > 编程语言 > 详细

unity3d 资源打包加密 整理

时间:2014-11-10 17:31:59      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   os   sp   for   文件   div   on   

资源打包脚本,放到Assets\Editor 文件夹下

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()
    {

    }
}

 加载加密和不加密的资源

unity3d 资源打包加密 整理

标签:blog   io   ar   os   sp   for   文件   div   on   

原文地址:http://www.cnblogs.com/dragon2012/p/4087548.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!