需求是本地可替换模型,图片,文档,最后发布EXE程序。
在网上找了好多资料都零零散散的,自己拼来拼去各种坑累成狗,现在把经验记录下来,希望大家少采坑。
1.本地路径加载
路径加载使用:Application.persistentDataPath 这个是一个本地可读写路径,默认位置在:
C:/Users/Administrator/AppData/LocalLow/DefaultCompany/项目名称
2.本地加载文档:
使用时这样写,用WWW调用,现在WWW过时了,改为UnityWebRequest,但是www不影响使用;
WWW www1 = new WWW("file:///" + Application.persistentDataPath + "/name01.txt");
name.text = www1.text;
这里有个坑,不加"file:///" 的话在编辑器里可以正常调用,发布为EXE的时候就不能了,而且还必须是三道杠,两道还不行。
在类型转换的时候还有个坑,文本内容是8889,赋值的时候提示需要将string类型转换为int,代码为:
udpserver.udp端口 = Convert.ToInt32(www.text);
按道理没问题,结果运行的时候unity老报错,提示string类型输入不规范,折腾了好几个小时,后来就打印了一下www.text的长度,显示为5,
明明只有4位,就是显示5位,想了想,不知道在哪里搜索的时候有网友建议TXT文档编码要为UTF-8,就这里改动过,就把UTF-8改回ANSI,
再打印www.text的长度,显示为4,这下正常了,代码也没报错。
3.本地加载模型FBX
加载模型也是搜索了不少资料,各种对比下来,还是使用TriLib插件比较靠谱,插件官网地址 https://ricardoreis.net/ 使用方法也很简单,
将插件拷贝进unity工程,在unity工程里新建C#脚本,将下列代码复制进Start(),注意faircraft09.fbx这个是路径文件夹里的模型文件,可根据自身模型重新命名!
var assetLoader = new AssetLoader(); var assetLoaderOptions = AssetLoaderOptions.CreateInstance(); var wrapperGameObject = gameObject; var myGameObject = assetLoader.LoadFromFile(Application.persistentDataPath + "/faircraft09.fbx", assetLoaderOptions,wrapperGameObject);
把脚本拖进空物体的组建面板,运行的时候在空物体的子级就会出现加载的模型,可谓简单高效!
3.本地加载图片
按照需求需要替换精灵图片,使用路径加载,先开协程:
IEnumerator GetTexture01(string url) { WWW www1 = new WWW(url); yield return www1; if (www1.isDone && www1.error == null) { img01 = www1.texture; sprite01 = Sprite.Create(img01, new Rect(0, 0, img01.width, img01.height), new Vector2(0.5f, 0.5f)); scene01.AddComponent<SpriteRenderer>().sprite = sprite11; } }
再在Start()里开始协程:
StartCoroutine(GetTexture01("file:///"+Application.persistentDataPath + "/Icon01.png"));
这里也有个坑,因为要改变精灵的组件内容,所以使用 AddComponent<SpriteRenderer> 但是原有的SpriteRenderer组件本身还在,就会显示不了图片,
正确做法是把原有的SpriteRenderer组件删除,变成空物体,代码里会增加SpriteRenderer组件,这样就不会冲突,显示也正常了。
以上就是本地路径加载发布PC端EXE文件遇到的一些坑。