Componentcreation - NDark/KobayashiMaruCommanderOS GitHub Wiki
請參閱關卡讀取
目前是一份單位樣板清單
其中標定每一個單位在創造之時,會取得的一份UnitData參數
樣板中的 component 就是單位的部件資料
請參考武器系統 UnitWeaponSystem.cs
暫時寫在此,是因為武器系統會常常使用這個資料結構,未來可能再調整重構。
單位創造時,因為prefab身上掛有 UnitWeaponSystem 這個部件
所以創造時會創造關於武器的所有物件.說明如下
- 先向 UnitData 取得部件中的武器清單 格式 Weapon_[Category][Type] 如 Weapon_Phaser_01
其中 Category 是大類 光炮類 光雷類
其中 Type 是小類 光炮1型 光炮2型
一個單位只能裝載一種武器,同樣的武器不能裝載在相同的位置。
也就是說不能裝載兩個 Weapon_Phaser01 避免名稱的衝突 - 開始填滿 武器集合資料結構 內的所有資料 請參考 WeaponDataSet.cs
- 大類 WeaponType
- 依照 武器3D物件樣板 Template_Unit_[WeaponComponent] 建立 武器3D物件 [UnitObjectName]:[WeaponComponent]
- 依照 武器特效樣板 Template_Effect_[WeaponComponent] 建立 武器特效物件 [UnitObjectName]:[WeaponComponent]_Effect
特效會依照武器的大類來有極大的不同。 - 每個武器配發發射音效,目前寫死,未來會把音效資源寫入參數檔。
請參考 被傷害系統 UnitDamageSystem.cs
單位創造時,因為prefab身上掛有 UnitDamageSystem 這個部件
所以創造時會創造關於防護罩的所有物件.說明如下
- 先向 UnitData 取得部件中的防護罩清單 格式 Shield_[Type] 如 Shield_Rear01
- 依照 防護罩3D物件樣板 Template_Unit_[ShieldComponent] 建立 防護罩3D物件 [UnitObjectName]:[ShieldComponent]
附帶一提 單位防護罩特效的創造 目前是動態產生 被一種武器打到就產生一個特效
未來防護罩與被傷害特效會再整合
由於同時間只會顯示 我方單位 的 UnitData GUI 以及 選擇到單位的 UnitData GUI
所以我們不能把所有單位如前述般一起在單位創造時創造出來。
所以 我方單位 的 UnitData GUI 的創造時機就是關卡讀取完畢(確認主角已經產生)
呼叫 GUIUpdate.cs 的 CreateMainCharacterUnitDataGUI() 創造之
而選擇到單位的 UnitData GUI 的創造時機就是 切換選擇時 請參看 UnitSelectionSystem.cs
其中 ActiveSelectInformation() 執行時若是選擇到 則是 呼叫 CreateUnitDataGUI() 產生對應單位的 UnitDataGUI
相反則是刪除那些物件。
兩種 UnitData GUI 雖然產生方式不同,但是資料結構都是存在 GUIUpdate.cs 中 讓他能夠每個畫格去更新部件上的資料。
資料上就是包含
- 單位名稱 用來找到該單位的 UnitData
- 創造出來的各式 GUI物件
更新時就是呼叫 UpdateSelectTargetUnitDataWeaponGUI() 然後再依照 GUI物件的 關鍵字 各自去更新 武器 與 防護罩 的細部物件
UpdateGUITextureOfWeapon()
UpdateGUITextureOfShield()
其中會分開的原因是武器必須有填充條,而防護罩沒有
創造GUI物件的流程目前寫在 UnitSelectionSystem 中,未來還會再調整。
其中CreateUnitDataGUI()說明如下
- 創造背景圖的樣板GUI物件名稱為
Template_GUI_SelectUnitDataBackground
Template_GUI_MainCharacterUnitDataBackground - 而樣板本身是沒有圖片的(尤其是被選到的單位)
- 依照樣板創造背景GUI的物件 名稱為
GUI_[UnitObjectName]:GUI_UnitDataBackground - 先依照單位的樣板名稱取得背景圖,一種船型有一張背景,透過即時的方式讀入。背景圖路徑為
Common/Textures/GUI_UnitDataBackground_[UnitTemplateName]Texture - 將背景物件掛在 GUICamera 下統一管理
- 依照部件清單
- 創造各防護罩的 GUI 物件
樣板名稱為 Template_GUI_Component_Shield 每個防護罩的樣板都相同
GUI物件名稱為
GUI_[UnitObjectName]:[ComponentName]- HP
- Label
- 創造各武器的 GUI 物件
樣板名稱為 Template_GUI_Component_Weapon 每個武器的樣板都相同
GUI物件名稱為
GUI_[UnitObjectName]:[ComponentName]- HP
- Reload
- Label
- 創造各防護罩的 GUI 物件
- 將創造出來的部件都掛在背景下
這些創造出來的物件名稱都記在清單中,讓GUIUpdate可以更新,摧毀時只要摧毀背景物件即可。
注意 背景清單的位置是用 position 去設定,寫死在 prefab上
而各部件的GUI物件的位置則是使用 GUITexture/GUIText 的pixel offset去設定 絕對位置(相對於背景物件)
注意 我方與敵人的 背景物件 的圖片必須反過來 (這是比較麻煩的地方)
注意 指定GUI物件時可以指定部件的2D位置,在參數中指定,但是由於背景圖相反,所以目前部件也必須手動注意此單位是敵人還是主角。才能把物件擺在正確位置。