[Unity中文課堂教程預(yù)告片] C#中級編程

[Unity中文課堂教程預(yù)告片] C#中級編程
01 創(chuàng)建屬性
- propety屬性命名
- 大寫開頭
- prop 快速創(chuàng)建
封裝成字段(fields)
作用:更好控制 何時、如何訪問
優(yōu)勢:
- 可以增加代碼
- 創(chuàng)建 自動實現(xiàn)的屬性 【prop 快速創(chuàng)建】
02 Ternary Operator
message = health > 0 ? "Player is Alive": "Player is Dead";
使用場景:簡單的if-else 每個選項也是簡單的
03 靜態(tài)
- 可以是變量和方法
- 一處更改,所有更改
使用 static 聲明,表示這個屬于類,不屬于 類的實例


- 這兩個案例,都是用于統(tǒng)計 游戲?qū)ο蟮臄?shù)量
方法 也可以是靜態(tài)的
Input.GetButton/Key/Axis 都是靜態(tài)方法,不用實例化就可以使用
注意:靜態(tài)方法里要用靜態(tài)變量
類 也可以是靜態(tài)的,如Input class
——————————————————
04 方法重載 Overloading
用同一個 函數(shù)名 實現(xiàn)不同的功能,如Add int / string

系統(tǒng)操作 3個步驟:精確匹配、最小更改、錯誤
05 通用 Generics
- 特征:可以把 類型(type) 當(dāng)作 參數(shù)(parameter) 來傳遞
- 作用:在不知道處理的具體數(shù)據(jù)類型時候 進行編程
GetComponent 就是一個 泛型方法
泛型方法的結(jié)構(gòu)

- T 是占位符,用T 是習(xí)慣
- 作用:作為基類,供繼承
- 增加限制:where T:后有4種類型

泛型類的結(jié)構(gòu)

06 繼承 Inheritance
定義:獲得父類的方法和參數(shù)
三種修飾符:public、protected、private
- public:可以被任何類訪問
- private:只能自己訪問,子類也訪問不了
- protected:可以被子類訪問,不能被其他類訪問
結(jié)構(gòu):類名: 父類

繼承是 有層級的

Is-a 關(guān)系:
構(gòu)造函數(shù)
07 多態(tài) Polymorphism
多態(tài):如何使用多態(tài) (Polymorphism)、向上轉(zhuǎn)換 (Upcasting) 和向下轉(zhuǎn)換 (Downcasting) 在繼承的類之間創(chuàng)建強大而動態(tài)的功能。
- 可以讓類有不同 態(tài)(types)
- 作用:可以讓子類代替父類,叫 派生類(derived class)
- 創(chuàng)建一個包含所有子類的集合
- 比如 collider 包含盒子、橢球、網(wǎng)格 碰撞體

> 不是很懂這個部分
08 成員隱藏:如何在派生類中實現(xiàn)基成員的隱藏。
方法:recreating / re-declaring(重聲明)
代碼:使用 new 來 重聲明

問題:這里說,當(dāng)集合里有 父類、子類(隱藏了yell方法)那子類調(diào)用 yell 是新方法還是父類方法?
09 覆蓋:如何用子類的成員覆蓋基類的成員。
Overriding
- 定義:子類 修改父類方法
- 直接寫 同名方法,unity 會報錯
- 代碼:virtual(父類) 和 override(子)

使用 base.Yell(); 可以調(diào)用父類的方法

10 接口:如何創(chuàng)建接口并在類中實現(xiàn)它們。
- 定義:關(guān)于功能的協(xié)定(a contract on functionality)
- 關(guān)鍵字 interface,接口命名 開頭有I+大寫名+able(非強制性)
- 公開
- 優(yōu)勢:使用多個接口,但不能繼承多個類,比如 車和墻沒有關(guān)聯(lián),但都可以被破壞,所以使用 IDamageable 接口使用相關(guān)功能

11 擴展方法:如何創(chuàng)建、實現(xiàn)和調(diào)用擴展方法。
Extension
- 功能:向類添加功能,不用更改原始類型(比如內(nèi)置函數(shù))
- 位置:非泛型、靜態(tài)類里
- 區(qū)別于靜態(tài):使用 this 關(guān)鍵字

使用:擴展的方法,成為原方法的一部分

12 命名空間:如何創(chuàng)建和使用命名空間來組織您的類。
- 定義:命名空間類似 類的容器,用來組織腳本,即讓編輯器建議的類 更有條理
- 把類放入 命名空間,用命名空間語法包裹

三種方法使用 命名空間的方法
- 腳本頭 using xxxNamespace;
- 使用 命名空間名.方法

- 把類放入 命名空間【不建議】,除非也要把方法放入命名空間
13 列表和字典:如何創(chuàng)建和使用列表和字典集合。
- 泛型集合
- List:動態(tài)大小
使用 Genneric【泛型?】
使用

這里為什么是<BadGuy>?
功能:索引[0], 計數(shù)(count),remove,removeat,insert,sort【基于 ICoumarable 接口】

字典:鍵值對,KVP

> 字典和列表是可以不提前確定 數(shù)據(jù)量的數(shù)據(jù)類型
14 協(xié)程:如何創(chuàng)建協(xié)程并使用它們來實現(xiàn)復(fù)雜的行為。
- 定義:按時間間隔來執(zhí)行的函數(shù)。(a function that is executed in intervals)
- 配合 yield 使用,有斷點,用于表示 用于控制協(xié)程的執(zhí)行流程,并在協(xié)程暫停時指定何時恢復(fù)執(zhí)行
yield return null;
,可以使協(xié)程讓出當(dāng)前幀的執(zhí)行權(quán),讓游戲引擎進行下一幀的更新,從而保持游戲的流暢性- 優(yōu)勢:不用寫 Update,也不用創(chuàng)建任何計時器,就可以寫 時間相關(guān)的函數(shù)

協(xié)程和屬性結(jié)合
公開屬性(property)
- 環(huán)境 點擊觸發(fā)協(xié)程

- 物體 協(xié)程控制運動

里面有 屬性、協(xié)程等編程技巧
15 四元數(shù):如何利用四元數(shù)系統(tǒng)來管理游戲?qū)ο蟮男D(zhuǎn)。
功能:處理旋轉(zhuǎn)的好工具
- x,y,z,w
- 管理旋轉(zhuǎn):歐拉角
- 問題:歐拉角遵循 萬向節(jié)鎖(gimbal lock),會阻礙增量旋轉(zhuǎn)
- 措施:使用 四元數(shù)
- 應(yīng)用
- Quaternion.LookRotation(Vector3 變量),類似 lookat

- lerp\ slerp
- lerp 均勻差值
- slerp 在曲線上差值,先慢后快

- 特殊數(shù):Quaternion.inentity() 0,0,0,0,
歐拉角、萬向節(jié)問題,四元數(shù)的解決方案
16 委托: 如何創(chuàng)建和使用委托在腳本中提供復(fù)雜的動態(tài)功能。
- 調(diào)用多個方法
- 功能:創(chuàng)建 可靠且復(fù)雜的行為(robust and complex behaviors),可看作函數(shù)的
- 一個委托 調(diào)用兩種方法,動態(tài)調(diào)用函數(shù)
- 容器,可被傳遞或像變量一樣使用
- 變量 包含數(shù)據(jù)
- 委托 包含函數(shù)
- 代碼:關(guān)鍵字 delegate

- 多播(multicasting):組合使用多個 函數(shù)

在委托執(zhí)行前,執(zhí)行是否為空的檢查,減少報錯
17 特性:使用特性可以將其他行為附加到所創(chuàng)建的方法和變量。在本視頻中,您將學(xué)習(xí)屬性的格式以及如何使用“Range”和“ExecuteInEditMode”屬性。
Attributes
- 功能:用于附加信息 在方法、變量、類上。
- [Range]:用來控制變量范圍,不影響腳本其他部分

- [ExecuteInEditMode]:用來讓腳本 在未運行場景時就執(zhí)行,
- 放在腳本最開頭

18 事件:如何使用事件創(chuàng)建動態(tài)的“廣播”系統(tǒng)。
- 定義:事件是特殊的委托,用來提醒其他類發(fā)生了某個事件。
- 廣播機制
- 代碼:EventManager
- 使用靜態(tài)事件

- 代碼:TeleportScript 訂閱者
- 將 Teleport做訂閱和退訂操作
- Teleport 也是類似 委托
- 退訂,很重要

- EventManager 只用管 事件本身和事件觸發(fā)器
- TeleportScript 訂閱者 不用管其他訂閱者
- 事件 有內(nèi)在的安全性,委托沒有,事件 其他函數(shù)只能對事件進行 訂閱和退訂,委托可以進行覆蓋等
——————————————————
委托,包含函數(shù)
多廣播

Protected 可以在子類獲得,不能在其他 地方獲得