切換
舊版
前往
大廳
主題

【Unity x C# 學習筆記】用Interface改良以前的畫面物件選取工具

%%鼠 拒收病婿 | 2021-01-26 22:02:18 | 巴幣 10 | 人氣 512

先上半成品demo
說明:
紅色的是怪物,玩家是比較大顆的綠色球球,可以召喚小綠球(近戰)、藍球(遠程),召喚需要扣HP,召喚物死掉後變食物(灰色大便條),吃掉可以回血。(怪物會去可以吃)

地板上的紫線別管它,懶得弄QQ

腳本:連結

程式構想等等介紹,先看看新舊差別:

舊的是限定某個類別可以選取

現在改成特定interface

滑鼠單擊選取看不太出差別,但畫面框選就差滿多的。
舊的:

新的:
程式碼變長主要是專案需求,多了些變化,但主要概念還是164~170行


以下簡單介紹程式構想:
因滑鼠操作有分 左鍵(選取友方)、右鍵(選取攻擊目標),因此可被左鍵選取的Selectable為真、可被右鍵選取的Targetable為真。兩者不衝突。







最近接觸interface的心得是:
同目標的工作,但做法都不同 => 用介面 (interface)
作法大同小異,唯參數要調整 => 用類別 (class)

還有感謝大佬說的 (回顧留言區):
介面是將處理所需的資料與處理做法分離,讓處理泛型腳本的類別或某個功能的Manager可以專心在整體的邏輯。


這裡負責管理這些介面的Manager是"ScreenObjPicker"類別。
一開始先產生自己的instance。



HashSet 結構《HashSet<T>類別提供高效能設定作業。 集合是不包含重複專案,且其元素沒有特定順序的集合。》(微軟文件), 跟List的差別可以參考看看這篇

這裡27、28行的Hashset變數用來管理場上繼承該介面的物件,物件生成時註冊進來,這樣就不用每次選取時都抓一次。

Unit類別為例:

在檢視器長這樣

第43-58行指定Manager的HashSet,別的腳本若需要存取該資料,則可透過介面的Container或TargetableList變數去存取,而不是直接指定Manager的資料,這樣以後改了個Manager或換其他資料來源,只要改介面的變數即可。

有趣的是,若兩個介面的變數名稱相同,則實作時只需寫一個就好。



其他都是些基本滑鼠操作,加了些event讓其他腳本接收訊息這樣。

畫出框與範圍選取:

157行被註解掉是因為執行foreach時修改到陣列長度會造成"Collection was modified; enumeration operation may not execute" error,所以158行後面加個ToList()會複製一個集合。




雜談:
我討厭這個專案= = 害我壓力山大,逃避了一大堆時間,有點不太想做,但又怕損老師面子。

需求只說有主角A(玩家)、主角B(電腦),他們在小房間裡面追逐打架,想自己加什麼都行,就是盡量不要增加美術工作量,然後先試試看LOL的操作方式。 聽美術說專業的建模要花1、2月做一隻角色,不過都要走卡通風了,只能抱著半信半疑的態度。

這玩法怎麼想都覺得好玩不起來,也許是我還沒想到有什麼變化? 覺得還是第一個版本比較好玩。請問各位有什麼想法?

  但說到底因為個人情緒影響到程式品質感覺很慚愧...... (後面能動就好沒甚麼想管了= =)

送禮物贊助創作者 !
0
留言

創作回應

悠閒紅茶
看到程式碼先舉白旗QwQ
2021-01-26 22:46:25
%%鼠 拒收病婿
你可以的wwww
2021-01-29 09:21:24
I2OI3
回合制有沒有戲
2021-01-27 02:40:10
%%鼠 拒收病婿
回合制進攻嗎? 感覺不錯耶
2021-01-29 09:18:57
蘇姆INKO_IQ
感覺有點像即時戰略,光看現在的成品可能可以做成什麼外星生物互相爭取生存的東西
2021-01-27 16:02:32
%%鼠 拒收病婿
感謝建議[e16]
美術提供的地圖不會太大,不知道適不適合
2021-01-29 09:21:15
追蹤 創作集

作者相關創作

更多創作