Remote File Explorer是一個跨平臺的遠程檔案瀏覽器,用戶通過Unity Editor就能操作運行在手機上的游戲或是應用的的目錄檔案,比如當專案打包運行到設備上時,可通過Remote File Explorer直接瀏覽設備上的目錄檔案,并進行下載,上傳,洗掉等操作,尤其是Unity+Lua開發環境下的除錯利器,當然,這里的除錯不是指代碼的逐行除錯,而是泛指定位排查問題

用武之地
在很多場景下利用Remote File Explorer都可以極大的提高開發除錯效率,例如:
- 應用真機上運行時出現例外情況,推測可能是關鍵資源丟失導致,此時可以通過本工具直接瀏覽手機上的相關檔案,查看關鍵資源是否存在
- 通過本工具直接拉取手機上的日志檔案或記憶體分析檔案等各類檔案,從此告別資料線
- 如果專案采用了XLua或SLua開發,在真機開發除錯時,可通過本工具直接上傳修改后的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檔案將會被優先加載(這是工程內的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工具視窗將出現"Custom"選單,點擊該選單后會執行PullLog方法

- 連接建立成功后,通過"pull game log"操作可以一鍵拉取game.log檔案,完整的操作流程如下所示

安裝
本工具是采用Unity的包形式,可以通過Unity Package Manager直接安裝
這里介紹兩種常用方式
- 打開"Window > Package Manager"視窗后,單擊狀態欄左側的"+"按鈕,選擇"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,使開發人員能夠輸入想要連接到的IP地址,例如在自己的選單中添加一個條目或按鈕,點擊后彈出輸入視窗,在成功獲取到的IP地址后,將其賦值給FileExplorerClient組件的"Host"屬性,然后呼叫FileExplorerClient組件的"StartConnect"方法開啟連接
也可以使用本工具自帶的一個簡易UI,給專案的任意游戲物件添加FileExplorerWindow組件(此時不用再額外添加FileExplorerClient組件)

游戲啟動后將自動打開連接視窗
功能串列
詳細的圖文功能介紹請查看使用檔案
- 通過狀態欄的"GOTO"可直接跳轉到Unity預定義的一些路徑
- 通過單擊路徑欄可打開輸入框,以直接輸入路徑跳轉或復制當前路徑
- 右鍵所選中的檔案夾或檔案支持下載
- 右鍵所選中的檔案夾或檔案支持洗掉
- 右鍵空白區域支持上傳檔案夾或檔案
- 右鍵空白區域支持重繪當前路徑的內容
- 支持直接從Unity Project視窗拖拽檔案夾或檔案到本工具上傳
- 支持直接從系統檔案瀏覽器拖拽檔案夾或檔案到本工具上傳
- 通過本工具"status"面板可查看連接狀態以及已連接設備的資訊,可用于辨別連接的是哪臺設備
- 通過配置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.uj5u.com/qita/458660.html
標籤:其他
