---
# System prepended metadata

title: 程式分線課程-遊戲引擎介紹
tags: [NCUGC]

---

---
tags: 'NCUGC'
---
# 程式分線課程-遊戲引擎介紹
> 2019.10.15
> 講師：阿空的遊戲部屋


## 引擎的概念
- 插件與編輯工具
    - 例子：
        - unity-Bolt
        - unity Visual scripting 
> 引擎降低門檻但要做出自己想要的功能與系統仍須學習與撰寫
### 引擎功用
- 底層設備的溝通
    - 硬體設備間的轉換
- 素材格式的支援
    - 圖檔、音檔處理方式不同
- 提供編輯與管理介面
    - 方便管理、直接拖拉
    
## 各種引擎介紹
### 阿空流分類法
- 框架：程式的library，封裝了基本渲染、資產管理、音訊處理等等API
- 引擎：封裝了大量的API、元件與編輯界面，邏輯功能仍須依賴撰寫程式來運行
- 編輯引擎：將API與程式撰寫的部分封裝成介面操作，可以專注在邏輯處理上，通常為制式化的製作流程

<---------------->
原生開發 Framework 遊戲引擎 兼容擴充的編輯引擎 編輯器
                                功能局限高
                                開發效率高
                                程式需求低
                                
![](https://i.imgur.com/8ZdDiIh.png)
                                
## 如何挑選引擎與注意的事項
### Unity迷思
- 相較好上手(架構容易理解)，相關資料與學習資源豐富
- 泛用的開發框架
- 進可攻3D、退可守2D
- 跨平台輸出
- 市佔率高 → 大部分遊戲公司都是用unity
- 社群推動與更新頻率高
- 免費版足夠使用
- ==但有程式門檻==

## 引擎挑法

- 團隊能力與人力
    - 引擎適不適合協作、引擎的上手門檻
- 開發時程
- 遊戲運行的平台
- 開發語言
- 2D或3D
- 適合開發的遊戲種類

### 原生開發
- 通常會使用基礎函式庫(library)
- 渲染
    - WebGL/OpenGL、DirectX
- 音效
    - OpenAL/Naudio
- 其他 
    - 額外輸入元件的SDK

### 使用框架開發
- 包好大多數多媒體會用到的功能函式庫
- 包含渲染、音效、素材格式兼容、事件處理、輸入、碰撞、物理系統...
- PyGame
- LibGDX
- PixiJS
- Phaser
- Cocos2d-x
- MonoGame (Xna)
---
#### Framework 框架
- 舉凡攝影機、座標轉換...都要自己來
- 通常沒有物理引擎，但可以使用第三方物理引擎
    - P2.js
    - Box2d
- 手動處理碰撞事件
- 沒編輯介面、要自己包裝或用程式來初始化物件位置

- Pygame
    - 使用python進行開發
    - 考驗邏輯
- LibGDX
    - 使用JAVA
    - 適合用來快速打造自有引擎 (可以自己寫渲染管線)
- PixiJS
    - 使用JavaScript進行開發
    - 屬於輕量型的渲染引擎
    - 適合做小型網頁廣告
- Phaser3
    - 使用TypeScript/JavaScript
    - 相較於PixiJS功能更為橫幅，但相對厚重
- Cocos2d-x
    - 使用C++
    - 老牌框架
- MonoGame
    - 使用C#
    - 基於Xna開發架構來重製的引擎

### 使用引擎開發
將所有基礎元件與管理界面包裝好，可以更快搭建自己的系統邏輯。
- Unity
    - C#
    - 2D/3D兼容
    - 跨平台輸出 
    - 可進行自定義的編輯器擴充
    - 年營收$100,000以下免費
- Unreal Engine
    - C++/BluePrint
    - 2D/3D兼容
    - 跨平台輸出
    - 產品達到3000鎂營收，每季5%
- GoDot
    - GodotScript/C++
    - 2D/3D兼容
    - 跨平台輸出
    - OpenSource
- GameMaker
    - GameMakerLanguage(GML)
    - 2D兼容，3D可以自己寫(貌似沒編輯器)
    - 跨平台輸出($$$)
    - 本體需要購買，輸出工具依照平台個別購買
- Cocos Creator
    - JavaScript/TypeScript
    - 2D/3D兼容
    - 中文
- Egret Engine
    - TypeScript
    - 2D兼容，有Egret 3D可以使用
    - 跨平台輸出
    - 系列工具一條龍
        - EgretWing (VSCode改的專用IDE)
        - Dragonbone (動畫製作工具)
        - 甚至Particle、效能偵測，都有出專門的工具
    - 中文

### 使用編輯器開發
- RPG Maker 
    - 使用JavaScript，基於PixiJS框架
    - 跨平台輸出
    - 2D兼容
    - 本體需要購買
- RenPy
    - 使用Python，基於PyGame框架
    - 跨平台輸出
    - 2D兼容
    - 免費
- Construct 2 / 3
    - 使用EventSheet / JavaScript
    - 跨平台輸出
    - 2D兼容
    - 免費(有內容數量限制)
- NVL Maker
    - 基於Krkr的視覺化操作工具
    - 只能輸出PC
    - 2D兼容
    - 免費

## 如何快速掌握遊戲引擎
### 基本電子遊戲元素
- 畫面顯示
- 控制處理
- 音效播放
### 事件觸發處理
- 碰撞處理
- UI處理
### 優化體驗
- 動畫系統
- 物理系統
- 攝影機控制
- 粒子系統
### 如何開始
- 找個小型專案，邊做邊學
    - 建議不要是坑團
- 遇到卡關該怎麼辦
    - stackoverflow



<style>
span.hidden-xs:after {
    content: ' X NCUGC 5th' !important;
}
span.hidden-xs{
    font-size: 1.5vw;
    animation: color 2s infinite;
    font-family: Consolas, 微軟正黑體
}
</style>