"

在上一章的內容中,我們已經使用Unity3d開發了自己人生中的第一款遊戲,但是在最後總結的時候也提到了,這款遊戲並不完美,甚至一點都不完善。

"

在上一章的內容中,我們已經使用Unity3d開發了自己人生中的第一款遊戲,但是在最後總結的時候也提到了,這款遊戲並不完美,甚至一點都不完善。

讓不懂編程的人愛上Unity3d遊戲開發018-遊戲腳本語言概述

當然,在這個過程中,我們最大的收穫就是熟悉了Unity編輯器的構成和各個部分的大概作用。

但是僅僅使用Unity編輯器的圖形用戶界面,至少目前還無法開發出一款令人滿意的完整遊戲。實際上即便在《絕地逃生》這款小遊戲裡面,也涉及到了跟代碼相關的地方,只是我們故意忽略不去看罷了~

在這一章的內容中,我們將進入代碼的世界,來一起認識Unity3d的好基友C#編程語言,以及如何在Unity3d的遊戲開發中使用C#。

還等什麼呢?讓我們開始全新的旅程吧~

01 認識Unity3d的好基友C#-遊戲腳本語言概述

在這一課的內容之中,我們主要回答兩個問題:

1.遊戲腳本語言是幹嘛用的?(為什麼會有腳本語言這樣的物種誕生?)

2.Unity中使用的腳本語言是什麼?

遊戲腳本語言的誕生

在第一章的內容中,我們介紹過遊戲引擎的誕生和發展,這裡再重溫一下上古時代遊戲開發者是如何開發遊戲的。

在電子遊戲行業的“石器時代”,遊戲開發者的日子非常不好過,對遊戲開發者的能力要求相比其它類型軟件的開發也更高。以早期的Atari 2600遊戲機為例,在這個平臺上耕耘的遊戲開發者必須精通硬件的底層,包括如何合理使用和顯示相關的硬件,並熟悉相關操作系統的內核。蘋果公司創始人喬布斯的第一份工作就是給Atari公司開發遊戲。當然,為其它設備平臺開發遊戲似乎相對容易些,但即便開發者可以無視顯示部分的底層架構,內存的限制和調用又成了開發者頭上的金箍圈。

一個遊戲開發工程師需要全面瞭解硬件底層的知識,操作系統的內核,3D數學,C或者C++語言。總之,在遊戲引擎出現之前的遠古時代,遊戲開發絕B是一個超級硬核的工作,其難度絕對不亞於如今的AI人工智能算法工程師。

進入二十世紀九十年代,一代遊戲大神John Carmack創立了id Software,並把目標投向3D遊戲的研發。在他的帶領下,id Software接連推出了《德軍總部3D》,《毀滅戰士》,《雷神之錘》等驚世之作。在開發這些遊戲的過程中,卡馬克史無前例的採用了自己獨創的3D遊戲引擎。

以《毀滅戰士》為例,其軟件架構可以清晰的分為三部分:核心遊戲組件(如3D圖形渲染系統、碰撞檢測系統、音效系統等)、美術資源和遊戲場景,以及和玩家遊戲體驗緊密相連的遊戲規則。通過使用遊戲引擎,遊戲開發者得以在遊戲核心架構不變的情況下設計自己的遊戲畫面、人物角色、武器和關卡,也就是所謂的“遊戲內容”或“遊戲資源”。遊戲引擎把和遊戲內容本身無關的碰撞檢測機制、渲染等獨立出來,從而讓開發者可以專注於遊戲內容和機制的設計。

很多遊戲引擎都提供了一整套的可視化開發工具,以及可重用的軟件功能。這些開發工具通常以一種集成開發環境(IDE)的形式提供,讓開發者不必從零開始“造輪子”。遊戲引擎有時候又被稱作“中間件”,給開發者提供了極大的便利和靈活性,可以有效的提高開發效率,降低開發的複雜度,縮減開發成本。

簡單來說,在遊戲引擎出現之前,遊戲開發者需要消耗極其大量的時間在與遊戲體驗無關的底層開發工作上,比如圖形渲染,音效播放,動畫的生成,網絡的實現等等。

隨著商業遊戲引擎的出現,開始出現了所謂GPP(GamePlayProgrammer)的職位。與此同時,遊戲策劃設計與美術設計人員也不再被排除在遊戲開發的流程之外。

現在的遊戲開發分工已經有了很大的進化,底層的渲染、物理機制、音效系統實現等統統由引擎搞定,開發團隊的工作重心是如何通過自己的創意和想象力來實現獨一無二的“遊戲內容”。開發團隊中每個成員的工作都以遊戲引擎為中心,有了共同的溝通和協作中心。遊戲策劃設計人員(包括關卡設計)可以使用遊戲引擎來設計簡單的demo原型,美術設計人員可以使用遊戲引擎來搭建遊戲場景,打造視覺效果。遊戲開發人員則把重心放到如何實現遊戲的核心邏輯和玩法上。

這裡強烈安利一本十幾年前的老書《遊戲腳本高級編程》(英文名是Game Scriping Mastery),在這本書中,詳細講述瞭如何遊戲腳本語言的作用,以及從零開始設計一個遊戲腳本編程語言。

和之前推薦的《遊戲引擎架構》類似,雖然如今的遊戲引擎已經足夠強大,我們無需從零開始打造一款自己的遊戲引擎。但是瞭解遊戲引擎底層的一些知識,對於我們更好的使用引擎有著極大的幫助。

"

在上一章的內容中,我們已經使用Unity3d開發了自己人生中的第一款遊戲,但是在最後總結的時候也提到了,這款遊戲並不完美,甚至一點都不完善。

讓不懂編程的人愛上Unity3d遊戲開發018-遊戲腳本語言概述

當然,在這個過程中,我們最大的收穫就是熟悉了Unity編輯器的構成和各個部分的大概作用。

但是僅僅使用Unity編輯器的圖形用戶界面,至少目前還無法開發出一款令人滿意的完整遊戲。實際上即便在《絕地逃生》這款小遊戲裡面,也涉及到了跟代碼相關的地方,只是我們故意忽略不去看罷了~

在這一章的內容中,我們將進入代碼的世界,來一起認識Unity3d的好基友C#編程語言,以及如何在Unity3d的遊戲開發中使用C#。

還等什麼呢?讓我們開始全新的旅程吧~

01 認識Unity3d的好基友C#-遊戲腳本語言概述

在這一課的內容之中,我們主要回答兩個問題:

1.遊戲腳本語言是幹嘛用的?(為什麼會有腳本語言這樣的物種誕生?)

2.Unity中使用的腳本語言是什麼?

遊戲腳本語言的誕生

在第一章的內容中,我們介紹過遊戲引擎的誕生和發展,這裡再重溫一下上古時代遊戲開發者是如何開發遊戲的。

在電子遊戲行業的“石器時代”,遊戲開發者的日子非常不好過,對遊戲開發者的能力要求相比其它類型軟件的開發也更高。以早期的Atari 2600遊戲機為例,在這個平臺上耕耘的遊戲開發者必須精通硬件的底層,包括如何合理使用和顯示相關的硬件,並熟悉相關操作系統的內核。蘋果公司創始人喬布斯的第一份工作就是給Atari公司開發遊戲。當然,為其它設備平臺開發遊戲似乎相對容易些,但即便開發者可以無視顯示部分的底層架構,內存的限制和調用又成了開發者頭上的金箍圈。

一個遊戲開發工程師需要全面瞭解硬件底層的知識,操作系統的內核,3D數學,C或者C++語言。總之,在遊戲引擎出現之前的遠古時代,遊戲開發絕B是一個超級硬核的工作,其難度絕對不亞於如今的AI人工智能算法工程師。

進入二十世紀九十年代,一代遊戲大神John Carmack創立了id Software,並把目標投向3D遊戲的研發。在他的帶領下,id Software接連推出了《德軍總部3D》,《毀滅戰士》,《雷神之錘》等驚世之作。在開發這些遊戲的過程中,卡馬克史無前例的採用了自己獨創的3D遊戲引擎。

以《毀滅戰士》為例,其軟件架構可以清晰的分為三部分:核心遊戲組件(如3D圖形渲染系統、碰撞檢測系統、音效系統等)、美術資源和遊戲場景,以及和玩家遊戲體驗緊密相連的遊戲規則。通過使用遊戲引擎,遊戲開發者得以在遊戲核心架構不變的情況下設計自己的遊戲畫面、人物角色、武器和關卡,也就是所謂的“遊戲內容”或“遊戲資源”。遊戲引擎把和遊戲內容本身無關的碰撞檢測機制、渲染等獨立出來,從而讓開發者可以專注於遊戲內容和機制的設計。

很多遊戲引擎都提供了一整套的可視化開發工具,以及可重用的軟件功能。這些開發工具通常以一種集成開發環境(IDE)的形式提供,讓開發者不必從零開始“造輪子”。遊戲引擎有時候又被稱作“中間件”,給開發者提供了極大的便利和靈活性,可以有效的提高開發效率,降低開發的複雜度,縮減開發成本。

簡單來說,在遊戲引擎出現之前,遊戲開發者需要消耗極其大量的時間在與遊戲體驗無關的底層開發工作上,比如圖形渲染,音效播放,動畫的生成,網絡的實現等等。

隨著商業遊戲引擎的出現,開始出現了所謂GPP(GamePlayProgrammer)的職位。與此同時,遊戲策劃設計與美術設計人員也不再被排除在遊戲開發的流程之外。

現在的遊戲開發分工已經有了很大的進化,底層的渲染、物理機制、音效系統實現等統統由引擎搞定,開發團隊的工作重心是如何通過自己的創意和想象力來實現獨一無二的“遊戲內容”。開發團隊中每個成員的工作都以遊戲引擎為中心,有了共同的溝通和協作中心。遊戲策劃設計人員(包括關卡設計)可以使用遊戲引擎來設計簡單的demo原型,美術設計人員可以使用遊戲引擎來搭建遊戲場景,打造視覺效果。遊戲開發人員則把重心放到如何實現遊戲的核心邏輯和玩法上。

這裡強烈安利一本十幾年前的老書《遊戲腳本高級編程》(英文名是Game Scriping Mastery),在這本書中,詳細講述瞭如何遊戲腳本語言的作用,以及從零開始設計一個遊戲腳本編程語言。

和之前推薦的《遊戲引擎架構》類似,雖然如今的遊戲引擎已經足夠強大,我們無需從零開始打造一款自己的遊戲引擎。但是瞭解遊戲引擎底層的一些知識,對於我們更好的使用引擎有著極大的幫助。

讓不懂編程的人愛上Unity3d遊戲開發018-遊戲腳本語言概述

當然,需要提醒大家的是,《遊戲腳本高級編程》和《遊戲引擎架構》這兩本書都是屬於很NB,但是不太容易看懂的。大家在初學階段先不要深入到其中的細節,可以當做參考書慢慢看,哪怕你是一個在遊戲開發領域有著十幾二十幾年經驗的老鳥,依然可以把這兩本書放在自己的案頭,以便讓容易失眠的自己早一分鐘入睡~

所以說,遊戲腳本語言到底是幹嘛用的?為什麼會誕生這個新的物種呢?

簡單總結一下吧:

1.隨著遊戲引擎的誕生和發展,遊戲核心架構和底層實現的工作交給了遊戲引擎。開發者更加關注的是如何基於遊戲引擎實現獨一無二的遊戲內容。

在早期開發遊戲的時候,遊戲開發者往往一個人身兼多職,除了實現基本的遊戲邏輯機制,還得想辦法實現圖形的渲染,聲音的播放,碰撞檢測等等。

而在開發《魔獸世界》、《大話西遊》、《王者榮耀》、《絕地求生》等遊戲的時候,開發者需要做的是基於策劃的新idea和美術人員的新場景和人物,把新的遊戲內容填充到遊戲之中,而不用花費大量的精力來寫代碼實現如何將角色和場景渲染到設備屏幕上來。

2.幾乎所有主流的遊戲引擎都是使用C/C++實現的,包括一些大廠的自有遊戲引擎也是如此。但是C/C++語言屬於難以精通(不是難以入門~)的語言,相應的開發人才難以培養。在基於遊戲引擎開發成為主流之前,為了保證遊戲的高性能,不得不全部使用C/C++語言開發。但是在遊戲引擎興起之後,跟性能和運行效率相關的工作基本上都由遊戲引擎搞定了,開發團隊更關注的是遊戲內容和遊戲邏輯機制的實現。而實現這些東西可以使用相對開發者更友好的語言,如Lua/Python/javascript/Java/C#等等。

Unity所使用的腳本語言

首先要告訴大家一個簡單的事實,Unity3d引擎也是用C/C++語言寫的。但是我們使用Unity3d引擎來開發遊戲卻不需要怎麼學C/C++語言,而是用到Unity3d所支持的腳本語言。是的,Unity3d的好基友C#終於有機會登場亮相了~

首先來看一下C#在兵器排行榜上的排名吧~

"

在上一章的內容中,我們已經使用Unity3d開發了自己人生中的第一款遊戲,但是在最後總結的時候也提到了,這款遊戲並不完美,甚至一點都不完善。

讓不懂編程的人愛上Unity3d遊戲開發018-遊戲腳本語言概述

當然,在這個過程中,我們最大的收穫就是熟悉了Unity編輯器的構成和各個部分的大概作用。

但是僅僅使用Unity編輯器的圖形用戶界面,至少目前還無法開發出一款令人滿意的完整遊戲。實際上即便在《絕地逃生》這款小遊戲裡面,也涉及到了跟代碼相關的地方,只是我們故意忽略不去看罷了~

在這一章的內容中,我們將進入代碼的世界,來一起認識Unity3d的好基友C#編程語言,以及如何在Unity3d的遊戲開發中使用C#。

還等什麼呢?讓我們開始全新的旅程吧~

01 認識Unity3d的好基友C#-遊戲腳本語言概述

在這一課的內容之中,我們主要回答兩個問題:

1.遊戲腳本語言是幹嘛用的?(為什麼會有腳本語言這樣的物種誕生?)

2.Unity中使用的腳本語言是什麼?

遊戲腳本語言的誕生

在第一章的內容中,我們介紹過遊戲引擎的誕生和發展,這裡再重溫一下上古時代遊戲開發者是如何開發遊戲的。

在電子遊戲行業的“石器時代”,遊戲開發者的日子非常不好過,對遊戲開發者的能力要求相比其它類型軟件的開發也更高。以早期的Atari 2600遊戲機為例,在這個平臺上耕耘的遊戲開發者必須精通硬件的底層,包括如何合理使用和顯示相關的硬件,並熟悉相關操作系統的內核。蘋果公司創始人喬布斯的第一份工作就是給Atari公司開發遊戲。當然,為其它設備平臺開發遊戲似乎相對容易些,但即便開發者可以無視顯示部分的底層架構,內存的限制和調用又成了開發者頭上的金箍圈。

一個遊戲開發工程師需要全面瞭解硬件底層的知識,操作系統的內核,3D數學,C或者C++語言。總之,在遊戲引擎出現之前的遠古時代,遊戲開發絕B是一個超級硬核的工作,其難度絕對不亞於如今的AI人工智能算法工程師。

進入二十世紀九十年代,一代遊戲大神John Carmack創立了id Software,並把目標投向3D遊戲的研發。在他的帶領下,id Software接連推出了《德軍總部3D》,《毀滅戰士》,《雷神之錘》等驚世之作。在開發這些遊戲的過程中,卡馬克史無前例的採用了自己獨創的3D遊戲引擎。

以《毀滅戰士》為例,其軟件架構可以清晰的分為三部分:核心遊戲組件(如3D圖形渲染系統、碰撞檢測系統、音效系統等)、美術資源和遊戲場景,以及和玩家遊戲體驗緊密相連的遊戲規則。通過使用遊戲引擎,遊戲開發者得以在遊戲核心架構不變的情況下設計自己的遊戲畫面、人物角色、武器和關卡,也就是所謂的“遊戲內容”或“遊戲資源”。遊戲引擎把和遊戲內容本身無關的碰撞檢測機制、渲染等獨立出來,從而讓開發者可以專注於遊戲內容和機制的設計。

很多遊戲引擎都提供了一整套的可視化開發工具,以及可重用的軟件功能。這些開發工具通常以一種集成開發環境(IDE)的形式提供,讓開發者不必從零開始“造輪子”。遊戲引擎有時候又被稱作“中間件”,給開發者提供了極大的便利和靈活性,可以有效的提高開發效率,降低開發的複雜度,縮減開發成本。

簡單來說,在遊戲引擎出現之前,遊戲開發者需要消耗極其大量的時間在與遊戲體驗無關的底層開發工作上,比如圖形渲染,音效播放,動畫的生成,網絡的實現等等。

隨著商業遊戲引擎的出現,開始出現了所謂GPP(GamePlayProgrammer)的職位。與此同時,遊戲策劃設計與美術設計人員也不再被排除在遊戲開發的流程之外。

現在的遊戲開發分工已經有了很大的進化,底層的渲染、物理機制、音效系統實現等統統由引擎搞定,開發團隊的工作重心是如何通過自己的創意和想象力來實現獨一無二的“遊戲內容”。開發團隊中每個成員的工作都以遊戲引擎為中心,有了共同的溝通和協作中心。遊戲策劃設計人員(包括關卡設計)可以使用遊戲引擎來設計簡單的demo原型,美術設計人員可以使用遊戲引擎來搭建遊戲場景,打造視覺效果。遊戲開發人員則把重心放到如何實現遊戲的核心邏輯和玩法上。

這裡強烈安利一本十幾年前的老書《遊戲腳本高級編程》(英文名是Game Scriping Mastery),在這本書中,詳細講述瞭如何遊戲腳本語言的作用,以及從零開始設計一個遊戲腳本編程語言。

和之前推薦的《遊戲引擎架構》類似,雖然如今的遊戲引擎已經足夠強大,我們無需從零開始打造一款自己的遊戲引擎。但是瞭解遊戲引擎底層的一些知識,對於我們更好的使用引擎有著極大的幫助。

讓不懂編程的人愛上Unity3d遊戲開發018-遊戲腳本語言概述

當然,需要提醒大家的是,《遊戲腳本高級編程》和《遊戲引擎架構》這兩本書都是屬於很NB,但是不太容易看懂的。大家在初學階段先不要深入到其中的細節,可以當做參考書慢慢看,哪怕你是一個在遊戲開發領域有著十幾二十幾年經驗的老鳥,依然可以把這兩本書放在自己的案頭,以便讓容易失眠的自己早一分鐘入睡~

所以說,遊戲腳本語言到底是幹嘛用的?為什麼會誕生這個新的物種呢?

簡單總結一下吧:

1.隨著遊戲引擎的誕生和發展,遊戲核心架構和底層實現的工作交給了遊戲引擎。開發者更加關注的是如何基於遊戲引擎實現獨一無二的遊戲內容。

在早期開發遊戲的時候,遊戲開發者往往一個人身兼多職,除了實現基本的遊戲邏輯機制,還得想辦法實現圖形的渲染,聲音的播放,碰撞檢測等等。

而在開發《魔獸世界》、《大話西遊》、《王者榮耀》、《絕地求生》等遊戲的時候,開發者需要做的是基於策劃的新idea和美術人員的新場景和人物,把新的遊戲內容填充到遊戲之中,而不用花費大量的精力來寫代碼實現如何將角色和場景渲染到設備屏幕上來。

2.幾乎所有主流的遊戲引擎都是使用C/C++實現的,包括一些大廠的自有遊戲引擎也是如此。但是C/C++語言屬於難以精通(不是難以入門~)的語言,相應的開發人才難以培養。在基於遊戲引擎開發成為主流之前,為了保證遊戲的高性能,不得不全部使用C/C++語言開發。但是在遊戲引擎興起之後,跟性能和運行效率相關的工作基本上都由遊戲引擎搞定了,開發團隊更關注的是遊戲內容和遊戲邏輯機制的實現。而實現這些東西可以使用相對開發者更友好的語言,如Lua/Python/javascript/Java/C#等等。

Unity所使用的腳本語言

首先要告訴大家一個簡單的事實,Unity3d引擎也是用C/C++語言寫的。但是我們使用Unity3d引擎來開發遊戲卻不需要怎麼學C/C++語言,而是用到Unity3d所支持的腳本語言。是的,Unity3d的好基友C#終於有機會登場亮相了~

首先來看一下C#在兵器排行榜上的排名吧~

讓不懂編程的人愛上Unity3d遊戲開發018-遊戲腳本語言概述

可以看到,江湖排行榜前三由Java/C/C++長期霸佔,而Python憑藉在數據統計分析和人工智能領域的異軍突起也牢牢把控著第4的未知。Unity3d的好基友C#則在第5和第6之間徘徊。

那麼什麼是C#語言,它主要用在哪些地方?

用官方語言說,”C#是一種安全的、穩定的、簡單的、優雅的,由C和C++衍生出來的面向對象的編程語言。它在繼承C和C++強大功能的同時去掉了一些它們的複雜特性(例如沒有宏以及不允許多重繼承)。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優雅的語法風格、創新的語言特性和便捷的面向組件編程的支持成為.NET開發的首選語言。“

雖然說起來這麼高大上,其實C#語言只不過是IT界江湖惡鬥的產物,甚至本來是可能一直默默無聞的~

C#讀作C Sharp,它有個更酷的名字叫COOL。早在1998年12月,微軟就開啟了一個名為COOL的業餘項目,2000年2月更名為C#,當然代表它的身上有C語言的高貴血統了~

為什麼會有C#的誕生呢?主要原因就是微軟跟SUN公司(如今已經倒閉了)的撕逼。微軟的一員大將基於Java語言開發了Visual J++,並且成為Visual Studio全家桶的重要組成部分。SUN公司認為Visual J++違背了Java平臺的中立性,發起了對微軟的法律訴訟。就如同如今蘋果和高通的專利大戰大戰一樣,蘋果相比高通實乃巨人也,但卻就是沒有自研的基帶芯片,只有任人吊打。當年的微軟也是如此,雖然實力遠超SUN公司,但奈何可以跟Java抗衡的拿得出手的開發語言。痛定思痛,微軟在2000年發佈了全新的語言C#,用來取代Visual J++。因為歷史的原因,C#語言深受Java、C和C++語言的影響。

C#語言可以用來編寫Windows平臺應用、服務器端和數據庫應用等等。

不過對於遊戲開發者來說,則幸運的看到Unity3d如今已經把C#語言作為唯一支持的腳本語言了~

跟彙編語言,C/C++語言相比,C#和Java的速度可能沒有那麼快,但是易上手,也容易掌握。

而跟Python/Perl/Lua/Javascript這些解釋型動態語言相比,C#的效率更高。

One more thing…

雖然我們的課程是面向小白讀者的,但是在談到Unity3d和C#的時候,不得不提到Mono這個詞。

實際上,Unity3d之所以可以支持跨平臺開發,就是因為Mono。

Mono是一個由Xamarin公司(先前是Novell,最早為Ximian)所主持的自由開放源代碼項目。該項目的目標是創建一系列匹配ECMA標準(Ecma-334和Ecma-335)的.NET工具,包括C#編譯器和通用語言架構。與微軟的.NET Framework(共通語言運行平臺)不同,Mono項目不僅可以運行於Windows系統上,還可以運行於Linux,FreeBSD,Unix,OS X和Solaris,甚至一些遊戲平臺,例如:Playstation 3,Nintendo Wii或XBox 360。

Mono基於.NET和CIL(Common Language Infrastructure,通用語言架構,又被稱為CLR),允許Unity3d引擎和用戶的託管代碼運行在每一個目標平臺上。

Unity實現跨平臺的主要機制是Mono或IL2CPP:

1.編譯

在運行前把C#通過Mono compiler編譯為CIL,或由IL2CPP再轉成CPP;

2.運行

在運行時加載CIL或CPP,由虛擬機轉換成各平臺的原生碼給CPU執行。

關於上面這段話,如果你看不懂,Don’t panic,完全正常~

在後面的內容中,我會對一些重要的概念反覆提及,直到你可以完全理解為止。

好了,簡單總結一下。

在這一課的內容中,我們主要回答了兩個問題:

1.什麼是遊戲腳本語言

2.Unity3d中支持的腳本語言是什麼

如果你還有不明白的地方,或者想更加深入的探索這兩個問題。

那麼建議:

1.認真閱讀《遊戲腳本高級編程》

2.通過google或stack overflow搜索Unity3d,mono,IL2CPP等關鍵詞,來了解Unity3d和C#,MONO,IL2CPP的底層機制。

但是對於普通的小白讀者,建議先到此為止。

從下一課開始,又到了我們的動手時間了~

讓我們下一課再見。

"

相關推薦

推薦中...