Remote File Explorer是一個跨平臺的遠程文件瀏覽器,用戶通過Unity Editor就能操作運行在手機上的游戲或是應用的的目錄文件。比如當項目打包運行到設備上時,可通過Remote File Explorer直接瀏覽設備上的目錄文件,并進行下載,上傳,刪除等操作。尤其是Unity+Lua開發(fā)環(huán)境下的調試利器,當然,這里的調試不是指代碼的逐行調試,而是泛指定位排查問題
用武之地
在很多場景下利用Remote File Explorer都可以極大的提高開發(fā)調試效率。例如:
- 應用真機上運行時出現(xiàn)異常情況,推測可能是關鍵資源丟失導致。此時可以通過本工具直接瀏覽手機上的相關文件,查看關鍵資源是否存在
- 通過本工具直接拉取手機上的日志文件或內存分析文件等各類文件,從此告別數(shù)據(jù)線
- 如果項目采用了XLua或SLua開發(fā),在真機開發(fā)調試時,可通過本工具直接上傳修改后的Lua代碼,重啟應用即可生效。從而避免每修改一次代碼就重新構建一次應用的繁瑣過程,大大提高調試效率
接下來,將以一些具體的案例,來演示Remote File Explorer工具的使用。下面用例的代碼都可以在Remote File Explorer Demo找到
用例1-無需重新打包修改代碼邏輯
- 客戶端打包,啟動后,初始界面如下圖所示。其中"Hello, Wlrod"的文本故意拼寫錯誤,用來演示如何不重新打包,通過Remote File Explorer來修復此錯誤
- 在UnityEditor中,通過"Window > Remote File Explorer"打開Remote File Explorer工具窗口,通過Stats面板可以查看服務端IP
- 在客戶端輸入正確的服務端IP,然后點擊Connect。連接成功后Stats面板的State將顯示為"Established"
- 拼寫錯誤是在這個文件changetextcontent.lua內寫錯的,如下所示修改文件內容(主要是將"Hello, Wlrod"拼寫修正為"Hello, World")
local obj = CS.UnityEngine.Object.FindObjectOfType(typeof(CS.Game.ChangeTextColor))
local textComponent = obj:GetComponent(typeof(CS.UnityEngine.UI.Text));
textComponent.text = "Hello, World"
- 通過Remote File Explorer工具窗口,GoTo到Application.persistentDataPath目錄。這個目錄下的Lua文件將會被優(yōu)先加載(這是工程內的Lua加載機制決定的,詳情可參考XLuaManager.cs)
- 拖拽changetextcontent.lua文件上傳到該目錄。之后重啟客戶端,"Hello, Wlrod"的拼寫錯誤將會被修復。完整的操作流程如下所示
- 另外,利用xLua的hotfix特性,還可以修改C#代碼的邏輯。例如,"Hello, World"文本的顏色是由C#代碼設置的紅色,可以通過修改changetextcontent.lua文件將文本設置為綠色,內容如下所示
local obj = CS.UnityEngine.Object.FindObjectOfType(typeof(CS.Game.ChangeTextColor))
local textComponent = obj:GetComponent(typeof(CS.UnityEngine.UI.Text));
textComponent.text = "Hello, World"
xlua.hotfix(CS.Game.ChangeTextColor, "Start", function(self)
self:GetComponent(typeof(CS.UnityEngine.UI.Text)).color = CS.UnityEngine.Color.green
xlua.hotfix(CS.Game.ChangeTextColor, "Start", nil)
end)
- 之后同樣的操作,將文件上傳到Application.persistentDataPath目錄,重啟客戶端后,文本顏色將改變。完整的操作流程如下所示
用例2-直接拉取手機上的日志文件
- 如果某個固定文件會被頻繁拉取,比如日志文件或是性能分析文件??梢酝ㄟ^配置CustomMenuAttribute為該文件添加一個自定義拉取操作。以拉取日志文件game.log為例,新增一個CustomMenuAttribute修飾的方法
using UnityEngine;
using RemoteFileExplorer.Editor;
public class TestAttribute
{
[CustomMenu("pull game log")]
public static void PullLog(ManipulatorWrapper manipulator)
{
string remoteLogPath = manipulator.GetRemotePath("Application.persistentDataPath") + "/Logs/game.log";
manipulator.Download(remoteLogPath, Application.dataPath.Replace("/Assets", "") + "/Logs/game.log"); // 將log文件下載到本地
}
}
- 代碼添加后,重新打開Remote File Explorer工具窗口將出現(xiàn)"Custom"菜單,點擊該菜單后會執(zhí)行PullLog方法
- 連接建立成功后,通過"pull game log"操作可以一鍵拉取game.log文件。完整的操作流程如下所示
安裝
本工具是采用Unity的包形式,可以通過Unity Package Manager直接安裝
這里介紹兩種常用方式
- 打開"Window > Package Manager"窗口后,單擊狀態(tài)欄左側的"+"按鈕,選擇"Add package from git URL",然后在文本框中輸入本工具的git地址
https://github.com/iwiniwin/unity-remote-file-explorer.git
,單擊"Add"按鈕后完成安裝 - 或直接克隆本工具到項目的"Packages"目錄下
詳細安裝方式可以查看使用文檔,更多將本工具作為包進行安裝的方式可查看Unity官方文檔
使用
安裝本工具后,可通過"Window > Analysis > Remote File Explorer"打開本工具窗口,將自動啟動服務器
給項目的任意游戲對象添加FileExplorerClient組件
如果是固定連接到某臺機器上,可直接通過Inspector面板在"Host"域輸入這臺機器的IP地址,然后勾選"Connect Automatically",則會在應用啟動時自動連接
如果希望應用啟動后能主動選擇連接到哪臺機器,則可在Debug模式下封裝一套簡單的UI,使開發(fā)人員能夠輸入想要連接到的IP地址。例如在自己的菜單中添加一個條目或按鈕,點擊后彈出輸入窗口。在成功獲取到的IP地址后,將其賦值給FileExplorerClient組件的"Host"屬性,然后調用FileExplorerClient組件的"StartConnect"方法開啟連接
也可以使用本工具自帶的一個簡易UI,給項目的任意游戲對象添加FileExplorerWindow組件(此時不用再額外添加FileExplorerClient組件)
游戲啟動后將自動打開連接窗口
功能列表
詳細的圖文功能介紹請查看使用文檔
- 通過狀態(tài)欄的"GOTO"可直接跳轉到Unity預定義的一些路徑
- 通過單擊路徑欄可打開輸入框,以直接輸入路徑跳轉或復制當前路徑
- 右鍵所選中的文件夾或文件支持下載
- 右鍵所選中的文件夾或文件支持刪除
- 右鍵空白區(qū)域支持上傳文件夾或文件
- 右鍵空白區(qū)域支持刷新當前路徑的內容
- 支持直接從Unity Project窗口拖拽文件夾或文件到本工具上傳
- 支持直接從系統(tǒng)文件瀏覽器拖拽文件夾或文件到本工具上傳
- 通過本工具"status"面板可查看連接狀態(tài)以及已連接設備的信息,可用于辨別連接的是哪臺設備
- 通過配置BeforeUploadAttribute自定義上傳時的額外操作,例如上傳lua代碼時自動加密
- 通過配置CustomMenuAttribute自定義操作菜單
鏈接
- Remote File Explorer https://github.com/iwiniwin/unity-remote-file-explorer
- Remote File Explorer Demo https://github.com/iwiniwin/RemoteFileExplorerDemo
本文摘自 :https://www.cnblogs.com/