原址:http://www.cnblogs.com/solq/archive/2012/08/29/2661288.html
今天很难过,辛辛苦苦熬了一年,到头来白白浪费,唉~什么都要重头来过。。。。。。。
我们组开发的项目有点希望,最终还是停掉,,,太可惜·!最糟糕的是,所有人都停雇。。我们项目经理也很难过。
我对游戏这个行业已经心灰意冷,,都是山寨一个模式,所谓的最受欢迎游戏也是刷上去的。
没办法,人家出钱刷,搞创意的就这样永远刷下去。
现在国内用unity来开发web的少之又少,几乎webgame都是山寨,而且还是山寨最受欢迎的。
所有搞正规的公司都是这样做,,,你不做就倒闭。我也不想进这样的公司,什么是农码,进去就知道。
我把我研究的分享出去:就当打点广告吧。我觉得应该算是国内首发吧,其实这例子很早就写出来了
转载请注明:http://www.cnblogs.com/solq
解决思路 用unity 自带的压缩 BuildPipeline.BuildAssetBundle 来压缩 生成的u3d 文件之后 再读回来,因为是 byte 格式的,所以转换成 string js 就能识别跟调用了,而 js 网页是可以缓存的。 换句话就是unity 缓存转换成 浏览器缓存 将 byte 转换成 stirng ,由于我的水平也有限,加上只用了两三天的时间才磨出来的。只想到用 将 byte 转换成 base64 格式。 需要解决的问题: 剩下的就是分类转换,按类型读取、宣染。还有读取数据内存释放的问题了,这个就要看你的项目的怎么做的
webtpl:
我用了 headjs 库来加载untiy 生成资源的 base64 string 文件
请看生成的格式:
(function($){ var solq={}; var unityData={}; if (typeof console == "undefined") { var console=function(){}; $.console=console; } $.debug=$.console; $.unityData=unityData; $.solq=solq; })(window); function GetUnity() { if (typeof unityObject != "undefined") { return unityObject.getObjectById("unityPlayer"); } return null; } function getData(file) { head.js("js/"+file+".js",function(){ if (typeof window.unityData[file] != "undefined") { sendToUnity(window.unityData[file]); }else { debug.log("出错"); } }); } function sendToUnity(data) { GetUnity().SendMessage("Cube", "jsCallMe", data); //Cube unity 里的对象, jsCallMe 是该对象绑定的脚本方法 }
1.用全局 window.unityData 来保存所有 unity资源
2.unity生成的JS flie 格式,大家看编码就知道了
window.unityData.img1="VW5pdHlXZWIAAAAAAjMueC54ADMuNC4wZjUAAAAIGQAAADgAAAABAAAAAQAAB+EAABbQAAAIGQBdAACAANAWAAAAAAAAAABn/qjoEwenCLuz+otfJQ8ExzwVgfBgOH/zCEraM4oXXjRBI";
这样JS读取UNITY资源 缓存api 就这样写好了,,,你能相信吗?
3.unity 生成 base64string


using UnityEngine; using System.Collections; using System.Threading; using System; using System.IO; //cnblogs.com/solq public class SCacheAPI : MonoBehaviour { public string calljs = "getData"; public string file = "";//加载文件 string data = "没有加载"; void jsCallMe(string base64_data) //js call c sharp { StartCoroutine(load_data(base64_data)); } IEnumerator load_data(string base64_data) //页面加载处理 { byte[] buf = Convert.FromBase64String(base64_data); AssetBundleCreateRequest req = AssetBundle.CreateFromMemory(buf); //在内存创建,并且异步方式加载 yield return req; //或者以下面方式,自己去实现,不过就用内部的吧 /* while (!req.isDone) { Thread.Sleep(100); yield return null; }*/ Texture t = (Texture)req.assetBundle.mainAsset; renderer.material.mainTexture = t; data = "页面完成加载"; } /* 本地读取资源有两个方式,直接读生成的 base64 格式, 还有一种就是读 u3d 格式 */ void load_locahost_data() //本地编辑器加载处理 { string path = Application.dataPath + "/../BuildData/text/" + file+".txt"; if (!File.Exists(path)) { Debug.Log("路径 文件出错"); Debug.Log(path); return ; } //以c sharp 方式去读 u3d 文件,,或者你可以用 unity 自带的方式去读 FileStream fs = File.OpenRead(path); int len=(int)fs.Length; byte[] buf = new byte[len]; fs.Read(buf, 0, len); fs.Close(); //将读好的文件 byte 或者成 base64 string base64_data = System.Text.Encoding.Default.GetString(buf); StartCoroutine(load_data(base64_data)); //Debug.Log(req.url + " " + Application.dataPath); } public void initLoad() { if (Application.isWebPlayer) { Application.ExternalCall(calljs, file); } else if (Application.isEditor) //加载本地的资源 { load_locahost_data(); } else if (Application.isPlayer) // pc ios android { } } void OnGUI() { data = GUI.TextArea(new Rect(50, 100, 500, 100), data); } }
4.通过 unity call js
Application.ExternalCall("getData", file);
代码我就不详细讲解了,大家看工程示例吧
http://files.cnblogs.com/solq/solq_unity_web_cache.rar
另外帖上开发测试,今天我去了面试,那人连看都不看,还给了我应届生的侍遇,唉`这个行业真是惨酷