需求是本地可替換模型,圖片,文檔,最后發布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文件遇到的一些坑。