# Virtual Therapist 前端 ## 環境 1:IOS * 平臺:iPad Pro 11 * Unity 版本:2021.3.0f1 * 專案:http://140.115.54.26:4000/110522166/VirtualTherapist * 分支: ``` master:成年人版本 Version2022:青年人修改版 ``` * 相關文件: * [Virtual Therapist 虛擬心理師 人物動畫](https://hackmd.io/2oGO0XjlQ4mkMK1ah5uMAQ) * [Virtual Therapist 資源連結](https://hackmd.io/UulFQF8CSHCZaH4qSFeswA) * 輸出建置: * [Unity To Xcode(憑證申請)](https://faliangstudio.com/unity-ios-xcode/) * 裝置綁定 * App 專案憑證 * [TestFlight 上線、建置流程](https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/%E4%BD%BF%E7%94%A8-testflight-%E9%82%80%E8%AB%8B-internal-tester-%E6%B8%AC%E8%A9%A6-app-7c762aa1cb82) * **說明文件**:https://hackmd.io/@ncuxrlab/SkToK-vMR * internal tester * [Xcode App 上傳](https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/%E5%B0%87-app-%E4%B8%8A%E5%82%B3%E5%88%B0-app-store-connect-2891ea8a758e) * 其他教學連結 * 主要參考:https://ithelp.ithome.com.tw/articles/10330724 * 輸出到 iPad:https://www.youtube.com/watch?v=9xQw0p0w9Ac * https://veryenjoy.tw/enjoy/article/89 ## 環境 2:Android * 平臺:任意 Android * Unity 版本:2021.3.0f1 * 專案:http://140.115.54.26:4000/110522166/VirtualTherapist_Android # 開發(Android) ## 專案備註 - 專案結構以場景 Scene 為主  - Test 中為測試用場景(可以視狀況刪除): - ARTest:攝影機測試模組 - Debug、UIDebug:UI 測試場景 - ModelScene:原測試虛擬人物模型,目前被 CC/iC Importer 3D 展示功能取代 - RASAConnect:RASA 直接跟後台機器人聊天(Canvas 下有個關掉的 ChatSample 物件)的場景,類似於移動設備版 RasaX - 程式腳本、資源、UI 根據場景放於資料夾 - 如果是全局腳本,則會放在最上層的 Script - 程式腳本中,如果有註解 #TODO 需要特別注意,如果看不懂備註在詢問我 ## 外部資源、套件 - Best HTTP:Socket 連線 - DlibFaceLandmarkDetector:臉部特徵點抓取 - LeanGUI:UI 動畫(資料夾位置 Plugins -> CW) - NuGet:Github 套件抓取 - Packages - jose-jwt.4.0.0:原 Socket 連線加密用 - protobuf-net.3.1.17:Protobuf 格式需求 - TextMesh Pro:新版字體 - XR:原 AR 用,有攝影機就不建議刪除它 #### 安裝包(Packge Manager) - Asset Bundle Browser:資源系統(虛擬人物語音用) - CC/iC Importer 3D:轉換模型 - Android Logcat:Android 用 Debug 查看 ## 全域程式 - Data:跨場景資料 和 因子設定(影響結算功能) - ExtensionMethods:一些常用的小功能程式,包括重要的 ByteArray 和 Proto 的 格式雙向轉換 - JsonHelper:修正 Json 檔格式 - Loader、LoaderUpdate:場景讀取 - virtualtherapists 資料夾:Protobuf 自動生成格式檔,**勿動,請用生成檔自動生成** - Proto 需到後端程式碼進行設置 - proto 資料夾底下,執行指令 ```bash <!-- Google.Proto 版本(伺服器) --> protoc --proto_path="." --csharp_out="./output" <目標檔案 (virtualtherapists/v1/study.proto)> <!-- Protobuf.net(Unity) 版本 --> protogen --csharp_out=".\exportFolder" <目標檔案 (.\virtualtherapists\v1\study.proto)> 也可以執行 VTprotogen.bat (沒有 protogen 可能要載一下) ``` - Editor 資料下的程式(直接改動 Unity 內部程式) - EnableFileSharingPostBuildProcessor:IOS 輸出權限修改程式 - BuildTool:原跨平台輸出程式,廢棄 - ModifyUnityAndroidAppManifestSample:同時使用 Unity Manifest 和自行修改的程式 --- ## 場景 ### MainUI - 代表資料夾:**0_UI** - Import:無用 - Prefab:專案通用的 UI 預置物件,Canvas 和 Button - Script:場景切換程式 - UIAssets:專案通用的各式 UI 套件與圖案 - 腳本程式 - MainUIController - 掛載物件:MainUI - 備註功能: - 利用 SetActive 切換 UI 介面 - 新增使用者 - UI_Start - 掛載物件:UI_StartMenu - 備註功能: - 根據輸入 IP 尾數設定 Data 中 Serverip - UI_User - 掛載物件:UI_StartMenu - 備註功能: - 根據輸入設定 Data 中 user.name、user.birth、user.gender、user.job - 偵測生日輸入必須為正常西元格式、8 位數,而且各欄位不得有空,否則跳出錯誤文字(3秒) - UI_Choose - 掛載物件:UI_StartMenu - 備註功能: - 根據輸入設定 Data 中 therapist - 呼叫 Loader.Load 讀取 GameScene - 場景物件 - BGPlayer:利用循環播放 Video Player 為背景畫面 ### Loading - 利用全域腳本對 GameScene 進行預載入,避免切換場景有卡頓感 ### GameScene - 代表資料夾:**1_Game** - AssetBundles:包含虛擬人物的男女兩種語音,為 AssetBundle 做資源結構準備 - Envirovent:場景的 3D 背景資源 - Material:3D UI 材質資源(原 AR 框出受試者臉部用的) - Model:虛擬人物的男女模型,透過 CC/iC Importer 3D 處理過後放入這裡**避免增加 Unity Editor 讀取場景負擔/無限讀取(OS系統有時會)** - 目前是使用 F81、M81 版本 <div style="background-color: #48494C"> > **模型實作流程**: > iClone 建置後會取得 4個資料 (.fbm, .fbx, texture, .json) > 模型 iClone to Unity 參考:[iClone to Unity](https://hackmd.io/2oGO0XjlQ4mkMK1ah5uMAQ#iClone--gt-Unity) > 實作影片:https://www.youtube.com/watch?v=tgirPjknAv4 > 實作影片2:https://youtu.be/EwdMSC8UjSY?si=cWdV-ZDh9f3WHtZv&t=74 </div> - Prefab:UI 預置物件 - Resouces:場景測試資源 - Script:場景程式 - UI:UI 圖案資源 --- #### 腳本程式 **ChatHandler** - ChatHandler_HTTP - 掛載物件:ChatHandler - 備註功能: - 場景主要功能、控制流程程式 - Socket 連線後台伺服器(SocketManager) - 傳送後臺需要資料(語音、畫面、眼動) - 反應後台對話內容(對話 UI) - 控制 虛擬人物 - 播放動畫(TherapistAnimator) - 播放語音(AudioPlayer_Bundle) - 控制受試者回答錄音(MicroPhoneManager) - Debug UI 開關控制 - MicroPhoneManager - 掛載物件:ChatHandler - 備註功能: - 啟動移動裝置錄音功能 - 接收 ChatHandler_HTTP 需要播放虛擬人物動畫 命令 - 轉換音訊檔為 BinaryType 符合 Proto 傳送格式(GetLocalAudioData,Editor 中預設轉換一個 ans.wav) - TherapistAnimator - 掛載物件:ChatHandler - 備註功能: - 接收 ChatHandler_HTTP 需要錄製/播放錄音 命令 - PointsManager - 掛載物件:PointsManager(ScorePanel下) - 備註功能: - 根據 Data.factors 和 Data.factorMax 自動生成分數畫面(ShowPoint) - 傳入文字必須依照格式(後台設定),如: > "經過評量,你的分數為:\n憂鬱症狀因子 5 / 8\n風險症狀因子 1 / 5\n身體症狀因子 2 / 8\n認知症狀因子 1 / 3\n焦慮因子 2 / 4\n孤獨因子 1 / 3\n性症狀因子 2 / 3\n精神病症狀因子 0 / 2\n物質使用因子 1 / 3\n整體功能因子 1 / 1" --- #### 腳本程式 AudioPlayer <div style="background-color: #48494C"> > 實作流程: > 使用 AssetBundle 系統,減少一般的 Resources 系統讀取負擔、資源浪費 > 配合 **Assets/1_Game/AssetBundles/Voice 資料夾**使用,需要預先使用 AssetBundle 套件對特定平臺生成資源包(Window -> AssetBundles Browser) > 語音包直接拖入,將其包裝成一個 Bundles,最後將其 Build 成指定的系統格式 (我們是使用 iOS 格式, **Copy to StreamingAssets 要勾**) </div> - AudioPlayer_Bundle(舊版本 AudioPlayer) - 掛載物件:AudioPlayer - 備註功能: - 接收 ChatHandler_HTTP 需要播放虛擬人物語音 命令 - 男聲(yunyang)、女聲(xiaoxiao) - 音檔生成可以使用 https://ttsmaker.com/zh-hk --- #### 腳本程式 WebCamManager - WebCam_Dlib - 掛載物件:WebCamManager - 備註功能: - 控制前置相機(WebCam)開啟關閉 - 啟動**臉部資料收集流程**(LandMarkProcess) > 請修改此不需要的邏輯 > ```chatHandler.target == ChatHandler_HTTP.Target.Face``` - 使用 Dlib 套件分析畫面特徵點(RunDlib) > 測試效能問題:在 Start 中預設每秒 1 次,請調整到至少 1 秒 10 次以上進行測試 ```InvokeRepeating(nameof(LandMarkProcess), 1f, 1f) #修改這行``` - 旋轉畫面圖片(RotateTexture:獲得的圖片會是歪 90 度的,不同平台狀況不同) - 分析畫面特徵點後傳出臉部資料(SendMessage,測試時註解,正式使用記得打開) - 控制有關 Dlib 的 Debug UI --- #### 腳本程式 EyeTracking - SeeSoEyeTracking(請移除相關功能) - 掛載物件:EyeTracking - 備註功能: - **已經預設關閉其功能**,場景中相關物件可以用於其他眼動追蹤套件 - CalibrationBG、CalibrationPoint 校正點、黑色背景 - btn_StartCalibration、btn_StartTracking、btn_StopTracking 眼動系統控制按鈕 - GazePoint 注視點 - 眼動追蹤、校準流程等等 - 沒有使用到 WebCam,自帶相機控制,所以跟目前系統衝突 - TrackerText - 掛載物件:EyeTracking - 備註功能: - 顯示抓到的眼動數據 - 場景物件 - btn_Start:測試開始按鈕 - LeanTransition:UI 動畫系統 - SceneCamera:虛擬場景用相機 - WebCamImage(WebCamImageNoRotaion):預覽前置相機畫面用,注意其 Z 軸旋轉了 90 度,根據不同平臺自行決定使用 WebCamImage 或 WebCamImageNoRotaion - Debug:所有 Debug 用 UI - WebCamPanel:Dlib 抓取臉部特徵測試 - EyeTrackPanel:眼動數據展示 - btn_PlayRecord:播放上一段錄音 - btn_SwitchCamera:切換前置或後置鏡頭(基本上沒用) - PanelLayout:對話用 UI - ScorePanel:因子分數的結束畫面 --- #### 多國語言 Localization 使用路徑:window -> Asset Manager -> Localization Tables
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up