共用方式為


遊戲的安裝和維護

本文說明一組最佳做法,可協助減少使用者對安裝遊戲所需的時間感到沮喪、防止不必要的支援呼叫,以及讓用戶盡可能快速且無痛地開始玩遊戲。

初始安裝

用戶購買遊戲是因為他們喜歡玩遊戲,而不是因為他們喜歡安裝遊戲。 為使用者安裝遊戲應該盡可能快速、直接且無痛。 在理想情況下,使用者甚至不應該看到安裝UI;他們應該能夠把遊戲光碟放進托盤,並開始玩。

簡化安裝UI

現有遊戲安裝 UI 的常見層面會干擾所需的使用者體驗:

  • 詢問使用者不必要的問題。

    例如,許多遊戲會詢問使用者是否想要安裝 DirectX。 如果遊戲需要Microsoft DirectX 才能執行,且尚未安裝正確的 DirectX 版本,遊戲應該只會安裝 DirectX。

  • 詢問絕大多數使用者會以相同方式回答的用戶問題。

    對於一般使用者,安裝路徑的預設設定、[開始] 功能表 位置等等都沒問題。 為想要變更這些設定的使用者提供進階選項。

安裝UI應該設計成允許一般用戶儘快開始玩遊戲。 如果用戶的計算機上已啟用 AutoRun,這是預設值,安裝程式應該假設使用者想要儘快玩遊戲,略過任何不必要的問題。 安裝程式應該會開始將遊戲安裝到預設安裝路徑,最好是使用安裝隨選安裝中所述的安裝程式。 用戶有機會在自動開始安裝之前變更安裝設定。 不過,應該藉由提示使用者按下進階設定選項的密鑰來完成,然後在使用者未在五到十秒內按下該金鑰時,自動使用預設選項。

如果未在使用者的計算機上啟用 AutoRun,安裝程式應該假設使用者不希望安裝程式自動開始安裝遊戲。 如果安裝程式是以 AutoRun 以外的某些方式啟動,它應該會啟動進階設定 UI。

減少安裝所需的時間

現今大部分Microsoft Windows 遊戲需要 5 分鐘到半小時才能完成安裝程式。 相反地,大部分的控制台遊戲從使用者插入遊戲CD到使用者可以玩遊戲的時間,花費不超過30秒的時間。 這一差異是因為大部分 Windows 遊戲的設計目的是要從計算機的硬碟執行大部分內容,如果不是全部,則為 :主控台缺少永久儲存大量內容的位置,需要從來源媒體執行內容。 雖然從本機硬碟載入內容會加快遊戲內載入時間,但缺點是所有內容都必須從來源媒體複製到硬碟。 大部分的 Windows 遊戲都會選擇一次將所有內容複製到硬碟,做為安裝程式的一部分。 這可減去使用者對遊戲的初始體驗,方法是讓使用者在能夠玩遊戲之前,先觀看進度列數分鐘。

有兩種方法可用來將最初安裝遊戲所花費的時間降到最低: 最小安裝選安裝。

最小安裝

在最少的安裝案例中,遊戲只會將一組最少的內容安裝到硬碟。 這通常只包含遊戲可執行檔和 DLL。 其餘的內容會直接從來源媒體存取。 這可大幅減少安裝所需的時間,因為遊戲的可執行檔很少大於 10-20 MB。 缺點是遊戲在遊戲期間載入內容需要較長的時間,因為它必須從較慢的來源媒體載入內容。

若要在以 Windows Installer 為基礎的安裝程式中建立最小安裝組態:

  • 將所有要安裝到硬碟的元件分組為標示為在本機安裝的功能。

    這項功能將稱為「啟動程式」功能。

  • 將所有要從來源媒體執行的元件分組為標示為「從來源執行」的功能。

  • 開啟可能位於來源媒體上的檔案時,請使用 MsiGetComponentPath 函式來判斷檔案的路徑,而不是將路徑硬式編碼。

    這麼做可確保即使使用者的CD/DVD磁碟驅動器的驅動器號變更,仍可找到檔案。

  • 壓縮保留於CD/DVD的內容。

    解壓縮內容所花費的CPU時間量,通常會由CD/DVD磁碟驅動器的數據傳送速率緩慢而隱藏。

  • 將內容分組成大型連續檔案,並以循序存取。

    相較於硬碟,CD/DVD 磁碟驅動器的搜尋時間是糟糕的,大部分的CD/DVD磁碟驅動器除非讀取大型連續檔案,否則不會達到尖峰傳輸速率。

  • 依存取 CD/DVD 的順序配置內容。

    當檔案以與磁碟配置相同的順序存取時,搜尋時間會大幅減少。

依需求安裝

在隨選安裝案例中,就最低安裝而言,遊戲一開始只會安裝到硬碟上啟動遊戲所需的檔案。 不過,遊戲在每次需要時,都不需要從來源媒體存取其餘內容,而是在第一次需要時,實際將每一段內容安裝到硬碟,然後在每次後續使用時從本機硬碟進行存取。 初始安裝所需的時間與最小安裝一樣小,但在第一次存取每個內容片段之後,載入時間會改善。

若要在以 Windows Installer 為基礎的安裝程式中建立隨選安裝組態:

  • 將一開始安裝到硬碟的所有元件分組為標示為在本機安裝的功能。

    請注意,這與基本安裝的 Bootstrap 功能相同。

  • 根據可能一起使用的元件,將其餘內容分組為多個功能。

    例如,在層級型遊戲中,將指定層級上所使用的所有內容分組為一項功能。 請注意,Windows Installer 允許多個功能共用元件,因此如果您有多個層級上使用的內容,您可以將該內容新增至所有必要層級的功能,而不需要復寫內容。 所有這些功能都應該標示為「公告」,這表示一開始不會安裝這些功能,但稍後可以視需要安裝。

  • 需要檔案時,請先檢查是否已使用 MsiQueryFeatureState 函式安裝檔案。

    如果尚未安裝 (也就是其狀態為 INSTALLSTATE_ADVERTISED),請呼叫 MsiConfigureFeature式,在本機安裝此功能。 安裝好檔案之後開啟檔案時,請呼叫 MsiGetComponentPath 來判斷檔案的路徑。 雖然此案例並非絕對必要專案(因為內容一律會在使用之前安裝到硬碟),但除了隨選安裝之外,也可讓您更輕鬆地支援最少安裝。

  • 可能的話,請預期很快就會需要哪些內容,並在閑置時間將其安裝在背景中。

    當遊戲在計算機中不需要每一盎司效能時,背景安裝最合適;例如,在顯示簡介電影、剪下場景、功能表等等時。

  • 在遊戲的選項選單中建立選項,以強制安裝所有剩餘的內容。

    若要實作這項功能,請建立一個功能,這是所有隨選安裝功能的父代,然後呼叫 MsiConfigureFeature 在本機安裝此主要功能。 這會導致本機安裝子功能。

  • 內容配置應該與基本安裝的內容類似,不同之處在於內容應該只與同時需要的其他內容進行叢集處理(例如,一個層級的所有內容都應該在一起)。

安裝后遊戲遊戲

AutoRun

若要玩已安裝的遊戲,用戶應該只需要將安裝光碟放在磁碟驅動器匣中。 光碟上的 AutoRun 可執行文件應該做的第一件事,就是檢查是否已安裝遊戲,如果是的話,請啟動遊戲。 假設遊戲是使用以 Windows Installer 為基礎的安裝程式來安裝,請檢查以判斷是否已安裝遊戲,並透過對 MsiQueryProductState式的單一呼叫來完成。

將隨選安裝轉換為完整安裝

雖然隨選安裝可讓使用者比完整安裝更快速開始遊戲,但使用者可能想要明確地將遊戲內容的其餘部分安裝到本機硬碟。 使用者可能想要能夠在不需要來源媒體的情況下玩遊戲,或者他或她可能只是想要避免因視需要安裝內容而產生的較長遊戲內載入時間。 如果遊戲的安裝程式使用 Windows Installer,遊戲可以在遊戲內選項 UI 中提供選項,以完成其餘內容的安裝。 當用戶選取此選項時,遊戲可以呼叫 MsiConfigureFeature 強制在本機安裝其餘功能;不需要繁衍個別的安裝程式應用程式即可這麼做。

維護遊戲軟體和內容

Windows 遊戲在控制台遊戲上擁有的其中一個優點是發行者在其初始版本之後發行遊戲更新的相對容易。 無論這些更新引進新內容還是只修正錯誤,請務必盡可能讓用戶輕鬆進行更新程式。 更新程式對於在線遊戲更為重要,這通常需要所有用戶執行最新版本的遊戲才能連線。

自動檢查更新

用戶不應該記得要尋找修補程式。 如果遊戲有可用的更新,使用者至少應該會收到通知,而且在理想情況下,應該已經下載修補程式。

遊戲檢查更新的簡單方式是使用特定 URL 連線到發行者所裝載的網頁伺服器,並下載文本檔,以指定最新可用遊戲版本的版本號碼,以及從中下載將遊戲更新為最新版本的套件的 URL。

每次使用者玩遊戲時檢查更新是否足夠,以確保使用者正在執行最新版本。 不過,如果用戶嘗試玩遊戲之前立即發現新的更新存在,使用者可能會被迫延遲遊戲,直到更新完成下載為止。 對於大型更新或緩慢連線,此延遲可能會依時數順序排列。 為了避免強制使用者等候遊戲之前,遊戲可以使用工作排程器排程定期檢查是否有新的更新。 如果偵測到更新,遊戲可以立即開始下載更新,以便下次用戶進行遊戲時完全下載並準備好安裝更新。

自動下載修補程式

一旦遊戲偵測到有新的更新可供使用,它應該會立即開始下載更新。 由於檢查更新的工作通常會在背景以無訊息方式執行,因此下載必須盡可能不顯眼。 背景智慧型手機傳送服務 (BITS) 是一項作業系統功能,可讓應用程式從因特網下載檔,即使應用程式本身未執行也一樣。 BITS 下載作業只會在使用者登入時執行,而且只有在計算機已連線到網路時執行。 BITS 不會嘗試強制電腦自行連線到網路。 如果使用者與網路中斷連線,或註銷,BITS 作業會暫停,且會在使用者下次登入並連線到網路時繼續下載。 應用程式可以設定其 BITS 作業,只使用其他未使用的網路頻寬,以防止作業影響任何其他可能使用網路的應用程式效能(例如在線遊戲)。 BITS 可在 Windows XP 和 Windows 2000 Service Pack 3 上使用。

其他資源

如需本文所參考技術的詳細資訊,請參閱下列主題:

如需使用 Windows Installer 進行遊戲的詳細資訊,請微調到下個月「適用於遊戲開發人員的 Windows Installer 簡介」數據行。

MsiConfigureFeature

MsiQueryProductState

MsiQueryFeatureState

MsiGetComponentPath