###### tags: `Unity對話` # Dialogue System [toc] # 基礎設定 ## import Dialogue System Asset store登入下載 ## Dialogue Manager 大部分跟對話有關的內容都靠Dialogue Manager來管理調整,所以先將此物件拉出來。  ## 建立DB 還沒建立前,可以在Dialogue Manager點這個位置建立  or 直接在project建立  P.S. 如果已經有舊DB,最好不要新創,因為兩者無法同時使用!!! # 調整prefab UI   # 資料庫 進入資料庫,對DB按Edit,會跳出Dialogue Database的視窗。  裡面有不同的標籤可以進行調整  ## Conversations標籤 顧名思義就是用來建立聊天的,按下+可以新增新的對話  - **Title**可以更改名稱  對著橘色按下去的子節點為一般對話  節點右邊Inspector的資訊個別為 - **Actor:** 演出這段對話的演員,即是說這句話的人 - **Conversant:** 聆聽這句話的人 - **Dialogue Text:** 這句話的內容 (台詞打在這) - **Sequence:** 說這句台詞時會播放的動畫 (相機不同角度拍攝...etc) - **Condictions:** 放入條件,條件為true才會執行這段對話。 - **Script:** 進行對話時會執行的程式碼  ### sequence #### 以對話時相機拍攝的角度為例  **Subject:** 放想觀察的對象 **Camera Angle Collection:** 產生出來的角度(空物件)存放在Hierachy的哪裡  按下「+」可以新增角度空物件  為了方便聊解目前的角度長怎樣,==我們將空物件新增一個子物件的相機給他==  1. 先將相機的位置reset 2. 調整好角度 由於相機是空物件的子物件,因此我們直接調整空物件就可以讓相機跟著移動旋轉。而我們最主要是需要子物件的相機視角,這樣才知道目前的角度長怎樣 3. 將相機刪除 4. 打開對話,將合適的對話Node的sequence欄位打上 ```csharp= Camera(角度空物件名稱); {{default}} ```  #### 延遲幾秒鐘 ```csharp= Delay(3) ``` #### 播放Timeline 建立timeline時,一定要在Hierarchy建立一個空物件,並加上component `Playable Diretor`,並且把`.playable`檔放上該元件。 ==必須注意的是,如果Dialogue System有設定「離NPC過遠就終止對話」可能會導致,NPC在播放動畫時離玩家太遠而讓動畫中斷。== ```csharp= Timeline(play,Timeline在Hierarchy的物件名稱) ``` ### condition - 以隨機對話內容為例 作用很像寫程式的if-else。 直接參考下方連結講得清楚明瞭,而且我懶惰。 [隨機對話內容](https://www.pixelcrushers.com/phpbb/viewtopic.php?t=374) ### Events - 達到類似ButtonClick的功能 1. 新增一空物件、以及一物件並將程式碼掛在底下  **ScriptsTest:** 的作用是將程式碼掛在該物件底下  **Empyt:** 能否將此物件關閉,可以的話代表事件(event)觸發成功。 就真的是空物件所以底下啥都沒有。  2. 將寫好的程式碼掛在物件底下 為了測試點選選項後是否有用,我們設定點了選項後可以將某個物件關閉 ```csharp= public GameObject Empty; public void TTTTClick() { Empty.SetActive(false); } ```  3. Dialogue Conversations新增事件 - 點選Add Scene Event  - 新增事件 **On Execute(GameObject):** 如果有成功運行就會執行底下的內容。言下之意就是如果這個選項有被選才會去執行底下的內容。 OnExecute一定要選這個,不能選上面沒有GameObject的,上面的是直接掛著程式碼,但不知為何無法選擇Function。 On Execute(GameObject)則可以掛著物件,所以我將程式碼掛在物件下,再把該物件掛在On Execute(GameObject)。  - 空格的欄位放入物件(ScriptTest) 因為ScriptTest底下掛有程式碼。   - 選擇我們剛剛寫的Function  - 執行結果  # 觸發對話 - 必須有Collider - component新增Dialogue System Trigger  根據不同的觸發對話需求有不同的trigger  ## OnUse trigger Add Action > start conversaction  選擇conversaction  將角色選擇好  將可以「點及觸發對話」的物件掛上Usable component Max Use Distance:為觸發的最大範圍  最後將player的物件掛上Selector Scripts  可透過Selector Scripts 修改用哪個按鍵觸發  # 以程式碼開啟對話 [以程式碼開啟對話(有效)](https://www.pixelcrushers.com/phpbb/viewtopic.php?t=1603) ```csharp= using PixelCrushers.DialogueSystem; [ConversationPopup] public string conversation; public Transform actor; public Transform conversant; ... void StartMyConversation() { DialogueManager.StartConversation(conversation, actor, conversant); } ```
×
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