iT邦幫忙

2022 iThome 鐵人賽

DAY 6
1

稍微講了一些遊戲引擎的架構,雖然還未完全介紹完,我們對於其有了一定的了解。接下來筆者想先換點風格。因此,我們接下來就先來做開發的事前的準備吧!也就是今天所要介紹的主題 - 專案建立及管理。

開發環境

遊戲的遊戲迴圈(Game Loop)有嚴格的效率要求,在固定刷新率的迴圈中,你必須完成各種狀態、物理、渲染等等的更新,因此開發的語言在遊戲引擎中尤為重要。市面上絕大多數的引擎都會使用 C++ 作為引擎底層架構的開發,而 C++ 是一個編譯式語言,你需要編譯器(compiler)、鏈接器(linker)將原始碼轉換成可執行的程式。雖然有市面上有許多專業功能的編輯器、整合開發環境等等,而這裡筆者將使用微軟的Visual Studio 2022來做之後的介紹。

Visual Studio 是一個功能強大的整合開發環境,他能夠輕鬆的配置及管理你的專案。在這裡就不帶安裝Visual Studio了,我們可以在檔案這裡新增一個專案(Project)。

我們先選擇一個空白專案。

輸入名稱、位置後就可以建立專案了,解決方案則與項目同名即可。

完成後可以看見在解決方案的資料夾下生成了一些文件。我們先將這裡放置,等等再來進行講解。

test
├─ .vs
│    └─ test
│           ├─ FileContentIndex
│           └─ v17
├─ test /* 這裡是項目的資料夾 */
│    ├─ test.vcxproj
│    ├─ test.vcxproj.filters
│    └─ test.vcxproj.user
└─ test.sln /* 這裡是解決方案 */

接下來我們可以先找到專案test。

點右鍵並加入、新增一個項目

選擇C++檔案並新增

接著我們就能在專案test中看到我們新增的C++檔了。

雙擊Source.cpp後我們就能開啟並編輯。

那就讓我們先打上不可少的"Hello World!"吧。

我們點擊本機Windows偵錯工具,偵錯並啟動項目。

我們就能看到我們的"Hello World!"了。

可以發現我們解決方案的資料夾下變成了這樣。

test
├─ .vs
│    └─ test
│           ├─ FileContentIndex
│           └─ v17
├─ test /* 這裡是專案的資料夾 */
│    ├─ Source.cpp
│    ├─ test.vcxproj
│    ├─ test.vcxproj.filters
│    ├─ test.vcxproj.user
│    └─ x64
│           └─ Debug
├─ test.sln /* 這裡是解決方案 */
└─ x64 /* 這裡是執行解決方案後生成的位置 */
       └─ Debug
              ├─ test.exe
              └─ test.pdb

Visual Studio使用解決方案文件(副檔名為.sln的文件)來管理項目。解決方案是由專案所組成,而專案與專案間有一定的依賴性。編譯專案後則會產生應用程式 (.exe)、動態連接函式庫 (.dll) 或靜態函式庫 (.lib)。在專案資料夾中所看到附檔名為.vcxproj是XML格式的,而大部分時間將會在專案的屬性頁面去更改設定,少部分時候會直接以編輯器修改.vcxproj。

你可以對專案點右鍵選擇屬性。

可以看見一般 > 組態類型。

前面有提到編譯專案時可以選擇生成的文件類型,這裡來解釋一下。

  • 應用程式 (.exe)
    一種生成的執行檔。
  • 動態連接函式庫 (.dll)
    在執行執行檔時會使用到的文件,將經常共享的程式碼載入,當程式有需求時會透過動態的方式連接。
  • 靜態函式庫 (.lib)
    在編譯時會使用到的檔案,Linker會從Library文件中取得所需的代碼複製到生成的執行檔中。

一般屬性頁

而在一般屬性頁還有其他能夠設定的屬性,常見的有。

  • 輸出目錄
    決定最終生成輸出的路徑,編譯器/鏈接器最終輸出應用程式、動態連接函式庫、靜態函式庫。
  • 中繼目錄
    生成應用程式、動態連接函式庫、靜態函式庫過程所需的中繼檔案輸出位置,因為不需要包含在最終發行的版本中與輸出目錄不同為佳。
  • C++語言標準
    選擇編譯器C++語言標準,在我們範例中將使用C++17。

C/C++屬性頁

除了一般屬性頁外,還有C/C++屬性頁尤為常用。這裡也列出一些常見的屬性。

  • 一般 / 其他 Include 目錄
    可以將讀取#include標頭檔時的路徑列舉,盡量使用相對路徑或是VS提供的Macros去設置這些路徑。
  • 前置處理器 / 前置處理器定義
    可以定義任意數量的C/C++前置處理器。

鏈接器屬性頁

鏈接器(Linker) 控制如何將.obj文件鏈接成執行檔或DLL。在其屬性頁中也有幾個常見的設定。

  • 一般 / 輸出檔案
    最終生成的檔案(一般為應用程式或是DLL)及所在路徑。
  • 一般 / 其他函式庫目錄
    與「其他 Include 目錄」概念類似,當鏈接時要讀取lib或是.obj檔,會去這些路徑搜尋。
  • 輸入 / 其他相依性
    列出需要的應用程式或DLL鏈接的外部庫。

後記

今天先講了開發環境的部分,創建好一個項目需要設定這麼多的設定,大部分都是為了將來開發時需要發布、引用第三方函式庫等等所需要做的準備,但這實在是令人頭痛對吧,明天我們就來講解一個自動化搭建工程的工具 - CMake,與為了將來方便管理第三方函式庫的開源庫管理器 - vcpkg,讓我們拭目以待吧。


上一篇
「遊戲引擎系統組件」 —— 記憶體管理系統
下一篇
「專案建立及管理」 —— CMake
系列文
《今天也走在開發遊戲引擎的路上》12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言