---
# System prepended metadata

title: Egret in Unity Like
tags: [教學]

---

# Egret in Unity Like
## Main Script
#### cBigBrother
控管所有 cComponent 的 Start, Update, FixedUpdate 的呼叫時機

---

#### cComponent
類似 Unity MonoBehaviour，依附於 GameObject
主要特性為被 cBigBrother, cGameObject 自動呼叫的 functions
<font color = #FF0000>
如：Awake, OnEnable, Start, Update, FixedUpdate, OnDisable, OnDestroy
</font>

---

#### cGameObject
類似 Unity GameObject，可掛載多個 cComponent 的實體對象，有父子節點的概念
當父物件被移除，其所有子物件將被一併移除

---

## Functions in cComponent
#### Awake 
當物件第一次 active 時呼叫
注意：系統自動觸發此方法後，會將此方法設為 undefined

---

#### Start
當物件第一次 active 後的下一個 frame 時呼叫
<font color = #FF0000>
注意：即比 Awake 晚一個 frame
</font>

---

#### OnEnable：
當物件每次從 inactive 轉變成 active 時呼叫
<font color = #FF0000>
注意：與 Awake 同一個 frame，但比 Awake 晚
</font>

---

#### OnDisable：
當物件每次從 active 轉變成 inactive 時呼叫
<font color = #FF0000>
注意：destroy cGameObject 時並不會觸發 cComponent 的 OnDisable
</font>

## Relationship with Egret DisplayObject
1. 可為 cGameObject 設定 egret.DisplayObject，藉此透過 cGameObject 與其依附的 cComponent 與 DisplayObject 互動，如：cGameObject 的 SetActive 除影響 cComponent 是否運行之外，也會直接影響 DisplayObject 是否可見
2. cGameObject 的父子關係，也代表著其 DisplayObject 的深度關係，子 < 父 (z-depth)，而彼此的 DisplayObject 在 eui 體系下，也是明確的父子關係

## Prefab
```typescript=
// 準備 prefab
let com  = new egret.DisplayObjectContainer();
let prefab = new cGameObject('prefabName');
prefab.SetDisplayObject(com);
prefab.SetActive(false);
// ex. (UI.cUIButton, new UI.cUIButton(this.m_GroupName))
prefab.AddComponent_AlreadyNew(ComponentType, Component實體);

// 使用 prefab
let obj = Pool.Spawn(prefab, 'objName');
```

## cBE_Switch

看似類似 Unity Button 的 spriteState 功能，可以根據按鈕狀態切換圖片，有以下狀態可以設定圖片

* Down
* Disable
* Enter
* Out
* Enable

cBE_Switch 必須在 UI.cUIButton 之前事先 AddComponent 到 cGameObject 上，因為 cUIButton 會在 Awake 尋找底下全部的 ButtonEffect，並事先存放起來，而 ButtonEffect 就是 cBE_Switch 的 function

## Comparison

|  | Egret View | Unity Like | 
| -------- | -------- | -------- | 
| 物件綁定     | 直接由id綁定到同名變數     | 需要寫Script透過GetChild設定     |
| Trace | 正常 | 無法(因為透過eval呼叫) | 
| -------- | -------- | -------- | 




###### tags: `教學`