《Unity進(jìn)階與實(shí)踐解析》全套教學(xué)課件_第1頁(yè)
《Unity進(jìn)階與實(shí)踐解析》全套教學(xué)課件_第2頁(yè)
《Unity進(jìn)階與實(shí)踐解析》全套教學(xué)課件_第3頁(yè)
《Unity進(jìn)階與實(shí)踐解析》全套教學(xué)課件_第4頁(yè)
《Unity進(jìn)階與實(shí)踐解析》全套教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩363頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第1章C#基礎(chǔ)

第2章Unity基礎(chǔ)

第3章Unity入門(mén)

第4章Unity進(jìn)階

全套可編輯PPT課件1.1C#基礎(chǔ)知識(shí)

1.2VisualStudio2019

1.3C#中的數(shù)據(jù)類型

1.4變量與常量

1.5運(yùn)算符和表達(dá)式

1.6C#控制結(jié)構(gòu)

1.7數(shù)組

1.8方法

1.9面向?qū)ο缶幊倘卓删庉婸PT課件1.1C#基礎(chǔ)知識(shí)1.1.1相關(guān)專業(yè)術(shù)語(yǔ)1.C#C#是一種編程語(yǔ)言,是官方推出的進(jìn)行.Net開(kāi)發(fā)的主流開(kāi)發(fā)語(yǔ)言,開(kāi)發(fā)者可以使用C#語(yǔ)言在基于.Net的平臺(tái)上利用.NetFramework框架開(kāi)發(fā)出各種應(yīng)用。2..Net與.NetFramework人們通常說(shuō)的.Net指的是.Net平臺(tái)(軟件開(kāi)發(fā)平臺(tái)),.NetFramework是平臺(tái)的核心框架,該框架是.Net平臺(tái)中必不可少的組成部分。兩者之間的關(guān)系為:.NetFramework框架包含于.Net平臺(tái),它能夠給開(kāi)發(fā)者提供一個(gè)穩(wěn)定的開(kāi)發(fā)環(huán)境,從而使得開(kāi)發(fā)者在.Net平臺(tái)上開(kāi)發(fā)的各應(yīng)用能正常運(yùn)轉(zhuǎn)。3.MicrosoftMicrosoft的中文名稱為微軟,是美國(guó)的一家跨國(guó)科技公司,并且在開(kāi)發(fā)PC軟件方面被稱作先導(dǎo)者。它是由比爾·蓋茨與保羅·艾倫于1975年創(chuàng)辦的,以研發(fā)、制造、授權(quán)和提供廣泛的電腦軟件服務(wù)業(yè)務(wù)為主,是目前世界上最大的計(jì)算機(jī)軟件供應(yīng)商。4.VisualStudioVisualStudio的全稱為MicrosoftVisualStudio,簡(jiǎn)稱為VS,是美國(guó)微軟公司的開(kāi)發(fā)工具包系列產(chǎn)品。VS是一個(gè)基本完整的開(kāi)發(fā)工具集,它包括整個(gè)軟件生命周期中所需要的大部分工具,所寫(xiě)的目標(biāo)代碼適用于微軟支持的所有平臺(tái)。C#語(yǔ)言的主流開(kāi)發(fā)平臺(tái)便是VS。如今,VS已有眾多版本,包括VS2015、VS2017、VS2019等。1.1.2使用記事本編程實(shí)際上,C#開(kāi)發(fā)與Java開(kāi)發(fā)類似,都可以采用記事本等文本編輯工具進(jìn)行開(kāi)發(fā)。下面介紹如何使用記事本編寫(xiě)C#程序。首先打開(kāi)cmd(命令提示符)窗口,在窗口中輸入csc命令,檢查系統(tǒng)是否安裝了CSC編譯器。如果出現(xiàn)如圖1.1所示的的提示,則有兩種可能性:一種是由于未安裝CSC編譯器而導(dǎo)致的,那么需要安裝CSC編譯器;另一種是已經(jīng)安裝了CSC編譯器,那么需要手動(dòng)把CSC編譯器添加到環(huán)境變量里。如果讀者已安裝了VS,那么只需要找到編譯器的安裝路徑,把路徑加到環(huán)境變量里即可。添加成功后,重新打開(kāi)cmd窗口,輸入csc命令后的顯示界面如圖1.2所示。在互聯(lián)網(wǎng)行業(yè)快速發(fā)展的今天,隨著數(shù)據(jù)量的不斷增長(zhǎng),數(shù)據(jù)采集已經(jīng)被廣泛應(yīng)用于互聯(lián)網(wǎng)及分布式領(lǐng)域。下面來(lái)創(chuàng)建一個(gè)以.cs結(jié)尾的文件。(1)在任意目錄下創(chuàng)建一個(gè)記事本文檔,如圖1.3所示。(2)在文檔中添加一段最簡(jiǎn)單的C#代碼,如圖1.4所示。(3)將文件后綴名改為.cs(.cs是C#程序類文件默認(rèn)的擴(kuò)展名),文件名建議修改為英文。(4)打開(kāi)cmd窗口,編譯.cs文件,運(yùn)行編譯后的.exe文件。打開(kāi)cmd窗口,切換文件目錄至.cs文件所在目錄。具體步驟為:首先輸入“盤(pán)符:”;然后輸入“cd目標(biāo)路徑”。切換過(guò)程如圖1.6所示。(5)編譯.cs文件如圖1.7所示,編譯完成后,在.cs文件的同一目錄下會(huì)出現(xiàn)同名的.exe文件。編譯時(shí)在cmd窗口輸入“css文件名稱.cs”。(6)在.cs文件被成功編譯的前提下,可在cmd窗口運(yùn)行編譯好的.exe文件,如圖1.8所示。直接輸入.exe文件的名字即可(加不加.exe擴(kuò)展名都可以)。1.2VisualStudio20191.2.1VisualStudio2019的使用1.創(chuàng)建項(xiàng)目在VS2019中創(chuàng)建一個(gè)新的項(xiàng)目,有兩種創(chuàng)建方法。一種是根據(jù)提示在初始界面中選擇“創(chuàng)建新項(xiàng)目”的方式進(jìn)行創(chuàng)建;另一種是在初始界面中選擇“繼續(xù)但無(wú)需代碼”后,使用菜單欄目錄或快捷鍵的方式進(jìn)行創(chuàng)建。兩種方法的具體步驟如下:【方法一】(1)打開(kāi)VS2019軟件,在初始界面中點(diǎn)擊“創(chuàng)建新項(xiàng)目”。(2)在彈出的創(chuàng)建新項(xiàng)目界面中有3個(gè)下拉菜單欄,分別為C#、Windows和控制臺(tái),進(jìn)行篩選后選擇“控制臺(tái)應(yīng)用(.NETFramework)”,然后點(diǎn)擊“下一步”按鈕。(3)進(jìn)入配置新項(xiàng)目界面,在該界面中,需要輸入項(xiàng)目名稱,選擇項(xiàng)目放置位置和要使用的框架,項(xiàng)目名稱建議使用英文。(4)點(diǎn)擊圖1.11中的“創(chuàng)建”按鈕后進(jìn)入如圖1.12所示的界面,代表項(xiàng)目創(chuàng)建成功,項(xiàng)目名與解決方案名默認(rèn)一致,該項(xiàng)目中的默認(rèn)類名為Program.cs。【方法二】(1)打開(kāi)VS2019軟件,在如圖1.13所示的初始界面中點(diǎn)擊“繼續(xù)但無(wú)需代碼”,進(jìn)入如圖1.14所示的界面。(2)在圖1.14界面的左上角菜單欄里依次選擇“文件”→“新建”→“項(xiàng)目”,或使用快捷鍵“Ctrl+Shift+N”,都可進(jìn)入創(chuàng)建新項(xiàng)目界面(如圖1.10所示),后續(xù)步驟與方法一相同。2.打開(kāi)已有項(xiàng)目在VS2019中打開(kāi)某個(gè)已經(jīng)創(chuàng)建的項(xiàng)目,有兩種情況,即已在當(dāng)前的VS2019中創(chuàng)建過(guò)的項(xiàng)目和未在當(dāng)前的VS2019中創(chuàng)建過(guò)的項(xiàng)目。若即將打開(kāi)的項(xiàng)目已在當(dāng)前的VS2019中創(chuàng)建過(guò),則在打開(kāi)軟件進(jìn)入初始界面后,界面左側(cè)會(huì)出現(xiàn)該項(xiàng)目的相關(guān)信息,直接點(diǎn)擊進(jìn)入即可。若即將打開(kāi)的項(xiàng)目未在當(dāng)前的VS2019中創(chuàng)建過(guò),則需手動(dòng)導(dǎo)入,這就存在兩種情況,具體如下:(1)若當(dāng)前處于初始界面,選擇界面右側(cè)的“打開(kāi)本地文件夾”或者“打開(kāi)項(xiàng)目或解決方案”,找到項(xiàng)目的存儲(chǔ)位置,選中后進(jìn)入圖1.14所示界面,雙擊想要打開(kāi)的.cs文件便可進(jìn)入編輯界面。(2)若當(dāng)前處于圖1.12或圖1.14界面,在左上角菜單欄中依次選擇“文件”→“打開(kāi)”→“項(xiàng)目/解決方案”或者“文件”→“打開(kāi)”→“文件夾”,找到項(xiàng)目的存儲(chǔ)位置,選中即可,選中后進(jìn)入如圖1.15所示的導(dǎo)入項(xiàng)目界面。顯然,圖1.15所示界面中已出現(xiàn)導(dǎo)入項(xiàng)目的信息,此時(shí)只需雙擊想要打開(kāi)的.cs文件便可進(jìn)入編輯界面。3.在同一解決方案下創(chuàng)建多個(gè)項(xiàng)目一個(gè)解決方案可包含多個(gè)項(xiàng)目。在初次創(chuàng)建新項(xiàng)目時(shí),默認(rèn)生成一個(gè)解決方案,一個(gè)解決方案里默認(rèn)包含一個(gè)項(xiàng)目,若想在一個(gè)解決方案下創(chuàng)建多個(gè)項(xiàng)目,則需使用下述方法,具體步驟如下:(1)若想創(chuàng)建多個(gè)項(xiàng)目,則可在解決方案資源管理器中單擊鼠標(biāo)右鍵,依次選擇“解決方案名”→“添加”→“新建項(xiàng)目”,進(jìn)入創(chuàng)建新項(xiàng)目界面,選擇“控制臺(tái)應(yīng)用(.NETFramework)”,然后點(diǎn)擊“下一步”按鈕。(2)進(jìn)入配置新項(xiàng)目界面。因?yàn)榇藭r(shí)的項(xiàng)目是在已有的解決方案下新建的,所以界面沒(méi)有“解決方案”一欄。在此界面中,只需輸入項(xiàng)目名稱即可。需要注意的是,項(xiàng)目名稱不可與本解決方案下已有的項(xiàng)目名稱相同,否則會(huì)出現(xiàn)警告框。(3)點(diǎn)擊“創(chuàng)建”按鈕,進(jìn)入如圖1.18所示界面,表示新建項(xiàng)目成功,此時(shí)該界面右側(cè)的“解決方案”里會(huì)出現(xiàn)兩個(gè)項(xiàng)目。4.在某個(gè)項(xiàng)目下創(chuàng)建多個(gè)類C#是面向?qū)ο蟮恼Z(yǔ)言,類的關(guān)鍵詞是class,通俗來(lái)說(shuō),類是一個(gè)比較抽象的內(nèi)容,一個(gè)項(xiàng)目可以包含多個(gè)類。在新建項(xiàng)目時(shí),默認(rèn)生成一個(gè)解決方案,一個(gè)解決方案里默認(rèn)包含一個(gè)項(xiàng)目,一個(gè)項(xiàng)目里默認(rèn)包含一個(gè)類。若想在某個(gè)項(xiàng)目下創(chuàng)建多個(gè)類,則需使用下述所示方法,具體步驟如下:(1)若想在某一項(xiàng)目下創(chuàng)建多個(gè)類,則可在解決方案資源管理器中單擊鼠標(biāo)右鍵,依次選擇“該項(xiàng)目名”→“添加”→“新建類”,進(jìn)入如圖1.19所示的界面。(2)在圖1.19界面中選擇“類”,此時(shí)就可在“名稱”欄里修改類的名稱,也可使用默認(rèn)名稱,需要注意的是類的名稱不可以出現(xiàn)中文字段。隨后點(diǎn)擊“添加”按鈕即可進(jìn)入如圖1.20所示界面,新建類操作完成。5.運(yùn)行類的結(jié)果在VS2019中,當(dāng)類定義完成后,有兩種方法可以運(yùn)行類。一種是點(diǎn)擊工具欄中的“啟動(dòng)”按鈕,另一種是采用快捷鍵。具體方法如下:【方法一】點(diǎn)擊如圖1.21所示界面框選區(qū)域中的

按鈕,可運(yùn)行程序。圖1.21中代碼的運(yùn)行結(jié)果如圖1.22所示?!痉椒ǘ坎捎每旖萱I“Ctrl+F5”也可直接運(yùn)行程序,運(yùn)行結(jié)果如圖1.22所示。6.運(yùn)行不同類里的兩個(gè)Main方法若如圖1.23所示,在Program.cs文件中同時(shí)寫(xiě)兩個(gè)類,每個(gè)類中都包含一個(gè)Main方法,直接運(yùn)行時(shí),則會(huì)有一個(gè)Main方法被標(biāo)紅,并出現(xiàn)如圖1.24所示錯(cuò)誤提示。針對(duì)這種情況,具體解決方法如下:(1)在解決方案資源管理器中單擊鼠標(biāo)右鍵,依次選擇“當(dāng)前項(xiàng)目”→“屬性”→“應(yīng)用程序”后,出現(xiàn)如圖1.25所示界面。(2)在“啟動(dòng)對(duì)象”一項(xiàng)里將啟動(dòng)對(duì)象修改為其中一個(gè)類,如圖1.26所示,此時(shí)剛才出現(xiàn)的標(biāo)紅已消失,代表項(xiàng)目可正常運(yùn)行。(3)重新回到Program.cs文件里運(yùn)行項(xiàng)目,即可成功運(yùn)行,出現(xiàn)如圖1.27所示界面。7.VS2019中常用的操作或快捷鍵在VS2019中,字體大小、界面顏色、顯示或隱藏行號(hào)等各類編碼習(xí)慣,都可由使用者自行設(shè)置。只需要在界面上方工具欄中依次點(diǎn)擊“工具”→“選項(xiàng)”→“選項(xiàng)對(duì)話框”,即可進(jìn)行設(shè)置。VS2019中也支持多種快捷鍵的使用,可以有效地提高代碼編寫(xiě)效率,常用的快捷鍵有8個(gè),如表1.1所示。1.2.2第一個(gè)C#程序1.第一個(gè)C#程序(1)創(chuàng)建新項(xiàng)目。(2)在Program.cs文件中輸入如下代碼:(3)編譯并運(yùn)行該項(xiàng)目。2.代碼解析1)using導(dǎo)入的命名空間在VS2019中,第一行“usingSystem”的內(nèi)容為創(chuàng)建控制臺(tái)應(yīng)用程序時(shí)自動(dòng)生成的。導(dǎo)入命名空間的方式可使用using。注意:(1)在一個(gè)類中可以有多個(gè)using語(yǔ)句;(2)using語(yǔ)句一定要放在程序的最上面;(3)using語(yǔ)句后面加分號(hào)表示該語(yǔ)句結(jié)束。第二行“namespace”后面的內(nèi)容是本項(xiàng)目的命名空間,默認(rèn)與項(xiàng)目名稱相同。在VS2019中,此行內(nèi)容也是系統(tǒng)自動(dòng)生成的。在創(chuàng)建新項(xiàng)目時(shí),系統(tǒng)會(huì)自動(dòng)生成一個(gè)包含Main方法的Program類??梢允褂胏lass關(guān)鍵字定義最簡(jiǎn)單的類。基本語(yǔ)法如下:類名的命名規(guī)范:類名和創(chuàng)建的.cs文件需盡量保持一致,類的內(nèi)容應(yīng)該以“{”開(kāi)頭,以“}”結(jié)尾,類中的內(nèi)容應(yīng)該寫(xiě)在開(kāi)始大括號(hào)和結(jié)束大括號(hào)中間的任意區(qū)域?!癈onsole.WriteLine(****);”為C#的控制臺(tái)打印語(yǔ)句,在使用這條語(yǔ)句之前,要導(dǎo)入Console類,Console類所在的包為“usingSystem”。打印語(yǔ)句的含義是使用系統(tǒng)提供好的Console類中的WriteLine()方法實(shí)現(xiàn)打印,需要打印的內(nèi)容放在小括號(hào)中即可,可以打印數(shù)字、漢字、字母等。2)語(yǔ)句關(guān)于C#的語(yǔ)句編寫(xiě),需要注意以下幾點(diǎn):(1)語(yǔ)句要寫(xiě)在方法中。(2)每條語(yǔ)句默認(rèn)以分號(hào)結(jié)尾。(3)語(yǔ)句中涉及的所有標(biāo)點(diǎn)符號(hào),都應(yīng)該使用英文狀態(tài)下符號(hào)。(4)一個(gè)方法中可以寫(xiě)多條語(yǔ)句,也可以不寫(xiě)語(yǔ)句。3)注釋在程序編寫(xiě)過(guò)程中,可以為程序添加一些解釋性的文字,這些解釋性文字是不會(huì)被計(jì)算機(jī)編譯的。(1)為什么要使用注釋呢?①

養(yǎng)成良好的編程規(guī)范。②

幫助開(kāi)發(fā)者更好地理解程序。③

可以增強(qiáng)代碼的可讀性。④

在編碼過(guò)程中,不想讓某一條語(yǔ)句或多條語(yǔ)句參與程序運(yùn)行。(2)什么時(shí)候使用注釋?①

編碼過(guò)程中。②

學(xué)習(xí)過(guò)程中。(3)注釋的編寫(xiě)格式分為哪幾類?①

單行注釋:一般是為一些語(yǔ)句添加單行注釋時(shí)使用。單行注釋符為//。②

多行注釋:程序中有多行語(yǔ)句不參與運(yùn)行時(shí),可以為其添加多行注釋。多行注釋符為/*…*/。③

文檔注釋:類、方法或?qū)傩砸话闾砑游臋n注釋。文檔注釋符為///。1.3C#中的數(shù)據(jù)類型C#中的數(shù)據(jù)類型可分為值類型、引用類型和指針類型三大類。值類型包括簡(jiǎn)單類型、結(jié)構(gòu)類型和枚舉類型等。引用類型包括類類型、接口類型、委托類型和數(shù)組類型等。指針類型則只能使用在安全模式中。各數(shù)據(jù)類型的關(guān)系如圖1.28所示。1.3.1值類型C#中的值類型主要包括簡(jiǎn)單類型、枚舉類型和結(jié)構(gòu)類型。其中,簡(jiǎn)單類型包含14種簡(jiǎn)單的基本值類型,具體關(guān)系如圖1.29所示。1.整數(shù)類型byte:無(wú)符號(hào)8位整數(shù),取值范圍是0~255(十進(jìn)制),即0~28-1。sbyte:有符號(hào)8位整數(shù),取值范圍是-128~127(十進(jìn)制),即-27~27-1。short:有符號(hào)16位整數(shù),取值范圍是-32768~32767(十進(jìn)制),即-215~215-1。ushort:無(wú)符號(hào)16位整數(shù),取值范圍是0~65535(十進(jìn)制),即0~216-1。int:有符號(hào)32位整數(shù),取值范圍是-2147483648~2147483647(十進(jìn)制),即-231~231-1。uint:無(wú)符號(hào)32位整數(shù),取值范圍是0~4294967295(十進(jìn)制),即0~232-1。long:有符號(hào)64位整數(shù),取值范圍是-9223372036854775808~9223372036854775807(十進(jìn)制),即-263~263-1。ulong:無(wú)符號(hào)64位整數(shù),取值范圍是0~18446744073709551615(十進(jìn)制),即0~264-1。C#中整數(shù)的默認(rèn)類型為int。一般情況下,為了使程序的時(shí)間和空間的復(fù)雜度盡可能低,應(yīng)根據(jù)程序的需要選擇合適的數(shù)據(jù)類型,例如存儲(chǔ)240,如果使用int就會(huì)出問(wèn)題,此時(shí)就需要使用long。2.浮點(diǎn)數(shù)類型float:?jiǎn)尉?,?nèi)存中占4個(gè)字節(jié),取值范圍為±1.5×10-45~3.4×1038,精度為7位有效數(shù)字;double:雙精度,內(nèi)存中占8個(gè)字節(jié),取值范圍為±5.0×10-324~1.7×10308,精度為15~16位有效數(shù)字。decimal:高精度,內(nèi)存中占16個(gè)字節(jié),取值范圍為±1.0×10-28~7.9×1028,精度為28~29位有效數(shù)字。單精度、雙精度和高精度的區(qū)別在于對(duì)小數(shù)位的處理上有所不同,decimal的精度比double高,但數(shù)值范圍比double小,這是因?yàn)樗男?shù)位可以很多,但是整體數(shù)值范圍比double小,一般需要高精度小數(shù)運(yùn)算或者金融財(cái)務(wù)貨幣計(jì)算的時(shí)候,才會(huì)選擇decimal類型來(lái)存儲(chǔ)變量值以及運(yùn)算結(jié)果。3.布爾類型布爾類型(bool)是用來(lái)表示“真”或“假”的邏輯數(shù)據(jù)類型,在內(nèi)存中僅占用一個(gè)字節(jié)。布爾類型變量的取值只有兩種:true(代表“真”)和false(代表“假”)。注意:true的值不能被任何非0值所替代。在C#?中,bool類型的示例代碼如下:4.字符類型(1)char:16位Unicode字符,取值范圍為U?+?0000~U?+?ffff。字符類型只能表示任意的單個(gè)字符,單個(gè)字符可以是漢字、字母、數(shù)字、符號(hào)、空格中的任一種。在C#?中,字符常量是用單引號(hào)括起來(lái)的一個(gè)字符'。在C#?中,定義一個(gè)字符類型的示例代碼如下:(2)string:字符串類型,可以給變量分配任何字符串值。在C#?中,字符串類型的值是用引號(hào)或者@引號(hào)括起來(lái)的一串字符。示例代碼如下:值得注意的是,在C#?中,除了字符常量外,還有轉(zhuǎn)義字符。轉(zhuǎn)義字符是指以“\”開(kāi)頭的字符序列,若在該字符串之前加上@,轉(zhuǎn)義字符(\)則會(huì)被認(rèn)為是普通字符。示例代碼如下:1.3.2數(shù)據(jù)類型轉(zhuǎn)換在C#?中,數(shù)據(jù)類型的轉(zhuǎn)換分為兩種:一種是自動(dòng)類型轉(zhuǎn)換,即自動(dòng)轉(zhuǎn)型;另一種是強(qiáng)制類型轉(zhuǎn)換,即強(qiáng)制轉(zhuǎn)型。在數(shù)據(jù)類型轉(zhuǎn)換中,小數(shù)的級(jí)別高于整數(shù)。按從小到大的順序,整數(shù)依次為byte、short、int、long;小數(shù)依次為float、double。注意:一般int與float、double進(jìn)行轉(zhuǎn)換。

1.自動(dòng)轉(zhuǎn)型將一個(gè)范圍小的數(shù)據(jù)放到一個(gè)范圍大的數(shù)據(jù)類型中,會(huì)自動(dòng)提升小數(shù)據(jù)的類型。示例代碼如下:2.強(qiáng)制轉(zhuǎn)型將一個(gè)范圍大的數(shù)據(jù)放到一個(gè)范圍小的數(shù)據(jù)類型中,若使用如下代碼,則程序會(huì)報(bào)錯(cuò)。示例代碼如下:如果一定要這樣做,則需要使用強(qiáng)制類型語(yǔ)法。例如1.23默認(rèn)是double類型,要將其轉(zhuǎn)成float類型,示例代碼如下:提示:(1)正常使用數(shù)據(jù)時(shí),數(shù)據(jù)類型需保持一致,如果出現(xiàn)不一致,則需要轉(zhuǎn)型,轉(zhuǎn)型時(shí)推薦使用自動(dòng)轉(zhuǎn)型,如果一定要使用強(qiáng)制轉(zhuǎn)型,則需要注意“強(qiáng)制轉(zhuǎn)型有風(fēng)險(xiǎn),使用時(shí)要謹(jǐn)慎”。因?yàn)橛锌赡艹霈F(xiàn)運(yùn)算結(jié)果和實(shí)際結(jié)果不一致的情況,這是因?yàn)閿?shù)據(jù)溢出造成的。(2)在C#?中,各類型之間數(shù)據(jù)加減時(shí)的規(guī)則如下:①byte+byte?=int。②byte+int=int。③short+short=int。④short+int=int。1.4變?量?與?常?量1.4.1變量變量是內(nèi)存中的一塊區(qū)域,是用來(lái)存儲(chǔ)程序中各種各樣類型的數(shù)據(jù)。一個(gè)變量指的是一個(gè)供程序操作的存儲(chǔ)區(qū)的名字。在C#?中,每個(gè)變量都有一個(gè)特定的類型,類型決定了變量的內(nèi)存大小和布局。該類型范圍內(nèi)的值可以被存儲(chǔ)在變量的內(nèi)存中,并可對(duì)變量進(jìn)行一系列操作。1.變量的聲明與初始化1)變量聲明變量聲明的基本語(yǔ)法如下:其中,訪問(wèn)修飾符和變量修飾符可以被省略,變量的基本數(shù)據(jù)類型有14種,主要包括byte、int、bool、float等。2)變量初始化變量初始化的基本語(yǔ)法如下:變量的初始化,就是為變量第一次進(jìn)行賦值的操作。變量聲明及初始化的示例代碼如下:2.變量的特點(diǎn)(1)一個(gè)變量可以被多次賦值,在內(nèi)存中存儲(chǔ)的值是最后一次賦值操作所賦的值。(2)變量在使用之前一定要先賦值,否則不能使用(注:指的是在方法中定義的變量)。(3)在同一個(gè)代碼塊中,變量名不能重名。(4)一個(gè)代碼塊指的是一對(duì)大括號(hào)及其中內(nèi)容的部分。(5)變量進(jìn)行賦值時(shí),一般賦值的值類型應(yīng)該和變量的類型是一致的。(6)當(dāng)同時(shí)定義多個(gè)同一類型的變量,可以在一行上定義這些變量并賦值,也可以在一行先定義,再賦值。定義變量的語(yǔ)法如下:例如:3.變量名的命名規(guī)則(1)變量名中只能包含大小寫(xiě)英文字母、數(shù)字、下畫(huà)線、@等字符。(2)變量名不能以數(shù)字開(kāi)頭,可以以大小寫(xiě)字母,下畫(huà)線等開(kāi)頭。(3)變量名不能與C#?中的關(guān)鍵字同名,但C#?允許在關(guān)鍵字前加上前綴@作為變量的名字,如@int則是合法的變量名。(4)如果變量名是由一個(gè)單詞組成的,那么單詞的所有字母需全部小寫(xiě);如果變量名是由多個(gè)單詞組合而成的,那么可以使用駱駝式命名法(Camel-Case),即第一個(gè)單詞的首字母小寫(xiě),其余單詞的首字母大寫(xiě)的方式。(5)變量名一般應(yīng)做到“見(jiàn)名知意”。1.4.2常量常量是一個(gè)固定值,在程序執(zhí)行期間不會(huì)發(fā)生改變,它們的值定義后不能被修改。常量可以是任何的基本數(shù)據(jù)類型,在代碼中的任何位置都可以使用常量來(lái)代替實(shí)際值。1.常量的聲明常量在聲明時(shí)需要包含常量的名稱和常量的值。常量聲明的基本語(yǔ)法如下:其中,訪問(wèn)修飾符可以被省略,常用的修飾符可以是new、public、internal、private等。常量聲明的方法如下:為了增強(qiáng)代碼的可讀性,會(huì)使用一行聲明一個(gè)、運(yùn)用多行聲明多個(gè)變量的方法。2.常量的特點(diǎn)(1)常量是一個(gè)固定值,在程序執(zhí)行期間不會(huì)被改變。(2)常量在聲明的同時(shí)必須進(jìn)行賦值。(3)在同一個(gè)代碼塊中,常量名不能重名。(4)當(dāng)定義多個(gè)同一類型的常量時(shí),可以在一行上聲明這些常量并同時(shí)進(jìn)行賦值;也可以一行聲明一個(gè),多寫(xiě)幾行。3.常量名的命名規(guī)則(1)常量名中只能包含大小寫(xiě)英文字母、數(shù)字、下畫(huà)線、@等字符。(2)常量名不能以數(shù)字開(kāi)頭,可以以大小寫(xiě)字母,下畫(huà)線等開(kāi)頭。(3)常量名不能與C#?中的關(guān)鍵字同名,但C#允許在關(guān)鍵字前加上前綴@作為常量的名字,如?@int則是合法的常量名。(4)如果常量名是由一個(gè)單詞組成的,那么單詞的所有字母需全部小寫(xiě);如果常量名是由多個(gè)單詞組合而成的,那么可以使用駱駝式命名法(Camel-Case),即第一個(gè)單詞的首字母小寫(xiě),其余單詞的首字母大寫(xiě)的方式。(5)常量名一般應(yīng)做到“見(jiàn)名知意”。1.5運(yùn)算符和表達(dá)式1.5.1算術(shù)運(yùn)算符C#?中支持的算術(shù)運(yùn)算符共有7種,分別為?+、-、*、/、%、++、-?-。1.+?和?-?運(yùn)算符+:把兩個(gè)操作數(shù)相加。-:把兩個(gè)操作數(shù)相減。2.*?和?/?運(yùn)算符*?:把兩個(gè)操作數(shù)相乘。/?:把兩個(gè)操作數(shù)相除。3.%運(yùn)算符%:取模運(yùn)算符,即取兩數(shù)相除之后的余數(shù)。4.++?和?--?運(yùn)算符++:自增運(yùn)算符,在原來(lái)值的基礎(chǔ)之上加1。--?:自減運(yùn)算符,在原來(lái)值的基礎(chǔ)之上減1。++?或?--?只能用在變量前面或后面,且變量一定是已經(jīng)賦值的變量。1.5.2關(guān)系運(yùn)算符在C#?中,關(guān)系運(yùn)算符的運(yùn)算結(jié)果是bool類型的,即結(jié)果為true或false。C#?中支持的關(guān)系運(yùn)算符共有6種,分別為?>、<、==、!=、>=、<=。一般地,可以定義一個(gè)bool類型的變量來(lái)接收比較結(jié)果。例如:1.>?和?<?運(yùn)算符>?:檢查左操作數(shù)的值是否大于右操作數(shù)的值,如果是,則結(jié)果為true,否則結(jié)果為false;<?:檢查左操作數(shù)的值是否小于右操作數(shù)的值,如果是,則結(jié)果為true,否則結(jié)果為false。2.>=?和?<=?運(yùn)算符>=?:檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值,如果是,則結(jié)果為true,否則結(jié)果為false。<=?:檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值,如果是,則結(jié)果為true,否則結(jié)果為false。3.==?和?!=?運(yùn)算符==?:檢查左右兩個(gè)操作數(shù)的值是否相等,如果相等,則結(jié)果為true,否則結(jié)果為false。!=?:檢查左右兩個(gè)操作數(shù)的值是否相等,如果不相等,則結(jié)果為true,否則結(jié)果為false。(1)==?是關(guān)系運(yùn)算符,用來(lái)比較兩個(gè)值是否相等。相等返回true,否則返回false。(2)=?是基礎(chǔ)的賦值運(yùn)算符。例如“intnumber=10;”是將等號(hào)右側(cè)的10賦值給等號(hào)左側(cè)的變量number。1.5.3位運(yùn)算符位運(yùn)算符作用于位,即將操作數(shù)轉(zhuǎn)化為二進(jìn)制后,逐位執(zhí)行操作。C#中支持的位運(yùn)算符共有6種,分別為&、|、^、~、<<、>>。在了解位運(yùn)算符之前,需掌握如表1.2所示的真值表。1.&?和?|?運(yùn)算符&:二進(jìn)制AND運(yùn)算符,全真為真,否則為假,也就是說(shuō)若兩個(gè)操作數(shù)p和q皆為1,則p&q為1,否則為0,如表1.2所示。|?:二進(jìn)制OR運(yùn)算符,全假為假,否則為真,也就是說(shuō)若兩個(gè)操作數(shù)p和q皆為0,則p?|?q為0,否則為1,如表1.2所示。2.^?運(yùn)算符^:異或運(yùn)算符,相同為0,不同為1,也就是說(shuō)若兩個(gè)操作數(shù)p和q相同(同為0或同為1皆可),則p^q為0,否則為1。3.~?運(yùn)算符~?:按位取反運(yùn)算符,把二進(jìn)制進(jìn)行一個(gè)變化,1變成0,0變成1。4.<<?和?>>?運(yùn)算符<<:二進(jìn)制左移運(yùn)算符,左移就是將運(yùn)算符左邊操作數(shù)的二進(jìn)制各位全部向左移動(dòng)運(yùn)算符右邊指定的移動(dòng)位數(shù),低位補(bǔ)0。其實(shí),移幾位就相當(dāng)于乘以2的幾次方。>>:二進(jìn)制右移運(yùn)算符,右移就是將運(yùn)算符左邊操作數(shù)的二進(jìn)制各位全部向右移動(dòng)運(yùn)算符右邊指定的移動(dòng)位數(shù),低位丟棄。其實(shí),移幾位就相當(dāng)于除以2的幾次方。1.5.4賦值運(yùn)算符C#?中支持的賦值運(yùn)算符共有11種,分別為?=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=,其詳細(xì)介紹如表1.3所示。其中,常用的賦值運(yùn)算符為?=、+=、-=、*=、/=、%=。1.5.5邏輯運(yùn)算符邏輯運(yùn)算符的運(yùn)算結(jié)果通常放在一個(gè)bool類型的變量中,使用邏輯運(yùn)算符所得的結(jié)果是true或false。C#?中支持的邏輯運(yùn)算符共有3種,分別為?&&、||、!。1.&&?運(yùn)算符&&:邏輯與運(yùn)算符,如果兩個(gè)操作數(shù)都為真時(shí),則結(jié)果為“真”,即true,否則結(jié)果為“假”,即false。2.||?運(yùn)算符||:邏輯或運(yùn)算符,如果兩個(gè)操作數(shù)至少有一個(gè)為真,則結(jié)果為“真”,即true,否則結(jié)果為“假”,即false。3.!?運(yùn)算符!:邏輯非運(yùn)算符,用來(lái)逆轉(zhuǎn)操作數(shù)的邏輯狀態(tài),如果條件為真則邏輯非運(yùn)算符將其結(jié)果變?yōu)榧?。邏輯運(yùn)算符中的“邏輯與”和“邏輯或”存在一種短路運(yùn)算,關(guān)于短路計(jì)算,需要掌握以下幾點(diǎn):(1)“邏輯與”連接多個(gè)式子時(shí),會(huì)從左往右依次執(zhí)行每一個(gè)式子,在這個(gè)過(guò)程中,只要有一個(gè)為假,后面的其他式子便不會(huì)再執(zhí)行,整個(gè)式子將返回false。(2)“邏輯或”連接多個(gè)式子時(shí),會(huì)從左往右依次執(zhí)行每一個(gè)式子,在這個(gè)過(guò)程中,只要有一個(gè)為真,后面的其他式子便不會(huì)再執(zhí)行,整個(gè)式子將返回true。1.5.6三元運(yùn)算符三元運(yùn)算符又稱為條件運(yùn)算符,是if語(yǔ)句的一種簡(jiǎn)化形式,它的基本語(yǔ)法如下:操作數(shù)可以為變量或表達(dá)式。操作數(shù)1相當(dāng)于if語(yǔ)句中的條件,操作數(shù)2相當(dāng)于if語(yǔ)句中滿足條件后應(yīng)執(zhí)行的語(yǔ)句,操作數(shù)3相當(dāng)于if語(yǔ)句中不滿足條件應(yīng)執(zhí)行的語(yǔ)句。它表示的含義是:如果操作數(shù)1為真,則輸出操作數(shù)2;如果操作數(shù)1為假,則輸出操作數(shù)3。1.6C#?控?制?結(jié)?構(gòu)1.6.1if分支結(jié)構(gòu)條件語(yǔ)句就是按照條件進(jìn)行判斷,并根據(jù)判斷結(jié)果選擇執(zhí)行哪一個(gè)分支的語(yǔ)句。其中if分支結(jié)構(gòu)主要包括單分支結(jié)構(gòu)、雙分支結(jié)構(gòu)和多分支結(jié)構(gòu)三種。1.單分支結(jié)構(gòu)的if語(yǔ)句1)基本語(yǔ)法2)執(zhí)行流程(1)如果條件成立,則執(zhí)行大括號(hào)中的代碼塊。(2)如果條件不成立,則不執(zhí)行代碼塊內(nèi)的內(nèi)容,繼續(xù)執(zhí)行結(jié)尾大括號(hào)下面的其他語(yǔ)句。2.雙分支結(jié)構(gòu)的if…else語(yǔ)句1)基本語(yǔ)法2)執(zhí)行流程(1)如果條件成立,則執(zhí)行代碼塊1的語(yǔ)句,執(zhí)行完代碼塊1內(nèi)容后,代碼塊2的語(yǔ)句一定不會(huì)執(zhí)行。(2)如果條件不成立,則執(zhí)行代碼塊2的語(yǔ)句,而代碼塊1的語(yǔ)句就不再執(zhí)行。綜上可知,if…else表示的是互斥關(guān)系,即執(zhí)行if的內(nèi)容,一定不會(huì)再執(zhí)行else的內(nèi)容。另外,if…else語(yǔ)句也可用三元運(yùn)算符來(lái)表示,即“條件?第1處結(jié)果:第2處結(jié)果。”一般情況下,代碼塊要用大括號(hào)括起來(lái)。如果if或else的代碼塊中只有一條語(yǔ)句,則大括號(hào)是可以省略的,但不推薦省略。3.多分支結(jié)構(gòu)語(yǔ)句1)基本語(yǔ)法(1)if…elseif…else語(yǔ)句。(2)if嵌套。2)執(zhí)行流程if…elseif…else表示對(duì)同一內(nèi)容進(jìn)行的多重判斷。具體流程為:先判斷是否滿足條件1,如果滿足,執(zhí)行條件1所對(duì)應(yīng)代碼塊,執(zhí)行完后,不會(huì)再執(zhí)行其他的elseif;如果條件1不成立,繼續(xù)往下查看是否滿足條件2,如果條件2滿足,執(zhí)行條件2對(duì)應(yīng)的代碼塊,不滿足繼續(xù)判斷其他代碼塊。一般情況下會(huì)在最后加一個(gè)else,表示所有的條件都不滿足時(shí)才執(zhí)行else,但這不是必需的,如果不在最后加else,代碼也是可執(zhí)行的。1.6.2switch分支結(jié)構(gòu)if語(yǔ)句只能測(cè)試單個(gè)條件,如果需要測(cè)試多個(gè)條件,則要不停使用if…else,這種分支結(jié)構(gòu)所描寫(xiě)的代碼復(fù)雜、冗余度高。而switch語(yǔ)句允許測(cè)試一個(gè)變量等于多個(gè)值時(shí)的情況。switch語(yǔ)句的基本語(yǔ)法如下:使用switch語(yǔ)句時(shí)必須遵循以下規(guī)則:(1)switch中的case可以有多條,每一條最后加break;當(dāng)匹配了一條case之后,其他case不執(zhí)行,遇到break跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行大括號(hào)下面的語(yǔ)句。(2)switch后面小括號(hào)內(nèi)必須是一個(gè)整型或枚舉類型。即float、double、byte、short、int、long、sbyte、ushort、uint、ulong這些類型。(3)default語(yǔ)句只能有一條,當(dāng)所有的case都不滿足時(shí),執(zhí)行default。default一般是放在最后一個(gè)case下面,也可以放在其他位置,這不影響其意義。default中的語(yǔ)句,最后才執(zhí)行。(4)一般情況下,switch…case結(jié)構(gòu)中的每個(gè)case后面都需要加break語(yǔ)句,但是當(dāng)需要多個(gè)case連起來(lái)寫(xiě),且每個(gè)case里面沒(méi)有任何內(nèi)容時(shí),case可省略,語(yǔ)句會(huì)從上往下執(zhí)行,直到遇見(jiàn)有break的case,才會(huì)跳出switch結(jié)構(gòu)。1.6.3C#?中的循環(huán)結(jié)構(gòu)通常情況下,程序中的語(yǔ)句是順序執(zhí)行的,即第一條語(yǔ)句先執(zhí)行,接著執(zhí)行第二條語(yǔ)句,依次類推。但有時(shí)候可能需要多次執(zhí)行同一代碼塊,這時(shí)就可以考慮使用循環(huán)結(jié)構(gòu)來(lái)執(zhí)行這些語(yǔ)句,這樣做可以減少代碼量,避免重復(fù)輸入相同的代碼行,而且還可以增加代碼的可讀性。在C#?中,常用的循環(huán)結(jié)構(gòu)有三種,分別為while循環(huán)、dowhile循環(huán)和for循環(huán)。任何一種循環(huán)結(jié)構(gòu)都包含4個(gè)要素:·初始值:通常是對(duì)變量的定義?!ぱh(huán)條件:反復(fù)執(zhí)行循環(huán)體內(nèi)容所滿足的條件。·循環(huán)體:反復(fù)做的一件事情?!さ僮鳎焊淖兂跏贾?i++,i--)。1.while循環(huán)while循環(huán)的基本語(yǔ)法如下:語(yǔ)法說(shuō)明:當(dāng)條件成立時(shí),反復(fù)執(zhí)行循環(huán)體的內(nèi)容(即大括號(hào)括起來(lái)的內(nèi)容),直到條件不成立時(shí),不再執(zhí)行循環(huán)體內(nèi)容,while循環(huán)結(jié)束后,繼續(xù)執(zhí)行大括號(hào)下面的語(yǔ)句。使用while循環(huán)時(shí)必須遵循以下規(guī)則:(1)一般情況下,小括號(hào)內(nèi)是一個(gè)條件表達(dá)式,除此之外,小括號(hào)中也可以是一個(gè)布爾值(true或false)。(2)while循環(huán)表示“當(dāng)……時(shí)候,做……事情”,故while循環(huán)有可能一次也不執(zhí)行,那么究竟能不能執(zhí)行,執(zhí)行幾次,這完全取決于條件。(3)while循環(huán)由語(yǔ)法可分析出,它適合不明確循環(huán)次數(shù),但已知循環(huán)執(zhí)行條件的場(chǎng)景,在這種情況下,一般使用while循環(huán)完成。2.do…while循環(huán)do…while循環(huán)的基本語(yǔ)法如下:語(yǔ)法說(shuō)明(和while循環(huán)的區(qū)別):do…while循環(huán)大部分和while類似,唯一的區(qū)別是do…while循環(huán)一開(kāi)始先執(zhí)行一次循環(huán)體的內(nèi)容,執(zhí)行完再去判斷while后面的條件,如果條件成立,會(huì)繼續(xù)執(zhí)行循環(huán)體的內(nèi)容;如果條件不成立,則跳出循環(huán),繼續(xù)執(zhí)行do…while循環(huán)后面的語(yǔ)句。也就是說(shuō),do…while循環(huán)會(huì)至少確保執(zhí)行一次循環(huán)體。使用do…while循環(huán)時(shí)必須遵循以下規(guī)則:(1)do…while循環(huán)中,while后面的小括號(hào)內(nèi)是條件,在循環(huán)體首次被執(zhí)行后,只有當(dāng)條件成立時(shí),才會(huì)繼續(xù)執(zhí)行循環(huán)體的內(nèi)容。(2)在do…while循環(huán)的結(jié)束句while()后面要跟一個(gè)分號(hào),否則會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。(3)do…while循環(huán)的初始值只會(huì)執(zhí)行一次,反復(fù)執(zhí)行的部分是循環(huán)條件、循環(huán)體和迭代操作。3.for/foreach循環(huán)for循環(huán)的基本語(yǔ)法如下:for循環(huán)中語(yǔ)句的執(zhí)行過(guò)程如下:(1)先執(zhí)行表達(dá)式1,為變量賦值。(2)再執(zhí)行表達(dá)式2,即循環(huán)條件。如果條件成立,則執(zhí)行一次循環(huán)體,如果條件不成立,則跳出for循環(huán),繼續(xù)執(zhí)行for循環(huán)之后的下一條語(yǔ)句。(3)每次執(zhí)行完循環(huán)體后,計(jì)算表達(dá)式3,對(duì)控制變量進(jìn)行增量或減量操作,再重復(fù)執(zhí)行步驟(2)操作。for循環(huán)執(zhí)行的流程圖,如圖1.32所示。foreach循環(huán)的基本語(yǔ)法如下:foreach循環(huán)中語(yǔ)句的執(zhí)行過(guò)程如下:(1)判斷集合或數(shù)組中是否存在元素,若存在,則執(zhí)行步驟(2),否則結(jié)束循環(huán),執(zhí)行for循環(huán)之后的下一條語(yǔ)句。(2)用集合或數(shù)組中的第一個(gè)元素初始化局部變量,執(zhí)行循環(huán)體。(3)判斷集合或數(shù)組中是否還存在未被判斷過(guò)的元素,若存在,則繼續(xù)使用未被判斷過(guò)的元素中的第一個(gè)初始化局部變量,執(zhí)行循環(huán)體,繼續(xù)步驟(3);否則結(jié)束循環(huán),執(zhí)行for循環(huán)之后的下一條語(yǔ)句。4.中止循環(huán)1)break在C#?中,break語(yǔ)句的主要應(yīng)用場(chǎng)景有兩種:(1)while、do…while、for循環(huán)。當(dāng)break語(yǔ)句出現(xiàn)在一個(gè)循環(huán)體中,程序執(zhí)行時(shí)遇到break便會(huì)立即終止循環(huán),跳出循環(huán)體,繼續(xù)執(zhí)行循環(huán)外的下一條語(yǔ)句。(2)switch…case分支結(jié)構(gòu)。在該結(jié)構(gòu)中,break可以用于終止switch中的一個(gè)case。2)continuecontinue語(yǔ)句與break語(yǔ)句有些相像,但兩者又有不同。continue是用于結(jié)束本次循環(huán),繼續(xù)執(zhí)行下一次循環(huán),而并非是像break那樣,直接結(jié)束整個(gè)循環(huán)、繼續(xù)執(zhí)行循環(huán)外的下一條語(yǔ)句。continue語(yǔ)句的含義是當(dāng)遇到continue時(shí),continue下面的語(yǔ)句不再執(zhí)行,會(huì)執(zhí)行下一次循環(huán)。3)break和continue的異同點(diǎn)(1)相同點(diǎn):都是用于中止循環(huán)。(2)不同點(diǎn):循環(huán)中遇到break,整個(gè)循環(huán)會(huì)被立即中止,跳出循環(huán)體,繼續(xù)執(zhí)行循環(huán)體外的其他語(yǔ)句。循環(huán)中遇到continue,只是表示一輪循環(huán)的結(jié)束,它還會(huì)繼續(xù)判斷循環(huán)的執(zhí)行條件,若符合執(zhí)行條件,則會(huì)繼續(xù)下一輪循環(huán),只是continue下面的其他語(yǔ)句當(dāng)次不再執(zhí)行。4)break和continue的使用場(chǎng)景(1)break一般是與總和或總乘積變量做比較。(2)continue更多的是對(duì)一組數(shù)據(jù)進(jìn)行判斷,其中某一個(gè)或幾個(gè)不滿足條件時(shí),做其他處理后,繼續(xù)遍歷剩下的數(shù)據(jù)。5.循環(huán)的使用場(chǎng)景(1)如果遇到至少需要執(zhí)行一次的需求或功能,選擇do…while。(2)如果需要完成的功能,可以理解為“當(dāng)滿足某條件時(shí),需要做某個(gè)事情”,選擇while循環(huán)完成,也可以理解為不能明確知道循環(huán)次數(shù)時(shí),只能使用while循環(huán)。(3)使用for循環(huán)完成的功能,大部分可使用while循環(huán)替代,但是while循環(huán)完成的功能,for循環(huán)不一定能完成。for循環(huán)通常情況下更適合應(yīng)用于一組有規(guī)律的數(shù)據(jù)操作,例如求和、求階乘、求指定范圍內(nèi)的數(shù)據(jù)等。1.7數(shù)組1.7.1數(shù)組簡(jiǎn)介數(shù)組是一組類型和名稱完全相同的變量所構(gòu)成的集合,它在內(nèi)存中需要占據(jù)一塊連續(xù)的存儲(chǔ)區(qū)域,被占據(jù)的這塊區(qū)域可以存儲(chǔ)多個(gè)同一類型的數(shù)據(jù),這些數(shù)據(jù)都擁有相同的變量名,可采用一個(gè)統(tǒng)一的數(shù)組名和不同的下標(biāo)來(lái)確定數(shù)組中唯一的元素。定義數(shù)組的基本語(yǔ)法如下:[]中可以寫(xiě)數(shù)組的大小或容量,也可以省略不寫(xiě)。System.Array類提供了創(chuàng)建、操作、搜索排序數(shù)組等靜態(tài)方法供程序調(diào)用,它是所有數(shù)據(jù)類型的抽象基類。Array類常用的方法如下:(1)Sort()可對(duì)一維數(shù)組中的元素進(jìn)行排序。(2)Copy()可實(shí)現(xiàn)數(shù)組的合并和拆分。(3)Clear()可將Array中的元素值清除。(4)Reverse()可逆轉(zhuǎn)整個(gè)一維數(shù)組中的元素順序。C#?的數(shù)組初始化方法有三種,下面以存儲(chǔ)班級(jí)四位學(xué)生的年齡數(shù)據(jù)ages為例,進(jìn)行一一介紹。【方法一】基本語(yǔ)法如下:示例代碼如下:這種數(shù)組初始化方式只能在方法里賦值,若在方法外賦值,則系統(tǒng)會(huì)報(bào)錯(cuò)?!痉椒ǘ炕菊Z(yǔ)法如下:示例代碼如下:這種數(shù)組初始化方式可以寫(xiě)在方法里,也可以寫(xiě)在方法外。使用場(chǎng)景:明確已知數(shù)組中存儲(chǔ)元素的個(gè)數(shù),以及每個(gè)元素的值。【方法三】基本語(yǔ)法如下:示例代碼如下:這種數(shù)組初始化方式只能在方法里賦值,若在方法外賦值,則系統(tǒng)會(huì)報(bào)錯(cuò)。

除了常見(jiàn)的一維數(shù)組,還有二維數(shù)組,二維數(shù)組的初始化主要包括靜態(tài)初始化及動(dòng)態(tài)初始化兩種方式。表示二維數(shù)組中的某一個(gè)元素可采用“數(shù)組名[行的索引值,列的索引值]”的方式實(shí)現(xiàn)。數(shù)組元素:數(shù)組元素是組成數(shù)組的基本單元。數(shù)組元素也是變量的一種,其標(biāo)識(shí)方法為數(shù)組名后跟一個(gè)下標(biāo)。下標(biāo)是指元素在數(shù)組中的順序號(hào)。數(shù)組元素通常也稱為下標(biāo)變量,必須在使用下標(biāo)變量之前定義數(shù)組。數(shù)組長(zhǎng)度:內(nèi)部存儲(chǔ)元素的數(shù)量。通過(guò)“數(shù)組名.Length”的方式可以獲取數(shù)組的長(zhǎng)度。數(shù)組中元素的值:數(shù)組中指定位置的元素值,即數(shù)組名在內(nèi)存中對(duì)應(yīng)區(qū)域的下標(biāo)標(biāo)識(shí)所對(duì)應(yīng)位置元素的值。數(shù)組的基本語(yǔ)法如下:注:下標(biāo)標(biāo)識(shí)是一個(gè)整數(shù),從0開(kāi)始。1.7.2數(shù)組的遍歷在C#?中,數(shù)組的遍歷至少有4種方法?!痉椒ㄒ弧?/p>

直接利用數(shù)組元素的下標(biāo)。若想遍歷數(shù)組ages[0],…,ages[i]中的第一個(gè)數(shù)組,示例代碼如下:如果想查看結(jié)果可以將其放到打印語(yǔ)句中,但是這種方法重載代碼太多、太煩瑣?!痉椒ǘ?/p>

使用標(biāo)準(zhǔn)的for循環(huán)。示例代碼如下:【方法三】

使用while或dowhile循環(huán)。這兩種循環(huán)不如for循環(huán)結(jié)構(gòu)簡(jiǎn)單。使用while循環(huán)實(shí)現(xiàn)數(shù)組遍歷的示例代碼如下:【方法四】foreach循環(huán)。示例代碼如下:數(shù)組的遍歷常應(yīng)用于排序中,例如:冒泡排序、選擇排序等,冒泡排序及選擇排序的核心代碼如下所示。(1)冒泡排序核心代碼(最大值在第一輪的時(shí)候冒到最后)。示例代碼如下:(2)選擇排序核心代碼。首先在未排序序列中找到最小元素,并存放到排序序列的起始位置,然后從剩余未排序元素中繼續(xù)尋找最小元素,放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。示例代碼如下:1.8方法1.8.1方法的定義一個(gè)方法就是把一些相關(guān)的語(yǔ)句組織在一起,用來(lái)執(zhí)行一個(gè)任務(wù)的語(yǔ)句塊。方法的主要作用是將代碼進(jìn)行重用的一種機(jī)制,從而避免出現(xiàn)過(guò)多的冗余代碼,以方便后期維護(hù)。方法在類或結(jié)構(gòu)中聲明,聲明時(shí)需要指定訪問(wèn)級(jí)別、返回值、方法名稱以及參數(shù)。方法參數(shù)放在括號(hào)中,并用逗號(hào)隔開(kāi)??绽ㄌ?hào)表示該方法不需要參數(shù)。1.基本語(yǔ)法方法的基本語(yǔ)法如下:2.方法名稱在C#?中,方法名稱的命名多采用帕斯卡(Pascal)命名法。帕斯卡命名法與駱駝式命名法稍有區(qū)別,帕斯卡命名法要求名稱中單詞的首字母大寫(xiě)。3.方法的返回值方法的返回值指方法在執(zhí)行完畢后需要返回給調(diào)用者的內(nèi)容。當(dāng)“返回值類型”為void時(shí),該方法不需要有任何返回值,除此之外,“返回值類型”還可以使用任意類型,包括但不限于int、double等,具體使用哪種類型,需根據(jù)方法所實(shí)現(xiàn)的功能來(lái)定義。需要注意的是,方法中設(shè)置的return值必須與返回值類型一致,并且所有的正常執(zhí)行分支都必須具有返回值,否則會(huì)報(bào)錯(cuò)。4.參數(shù)列表當(dāng)有多個(gè)參數(shù)時(shí),多個(gè)參數(shù)之間使用“,”進(jìn)行分隔,從而構(gòu)成參數(shù)列表。參數(shù)包括形式參數(shù),又稱“形參”;實(shí)際參數(shù),又稱“實(shí)參”。具體介紹如下:(1)形式參數(shù):指定義方法時(shí),在方法名后的小括號(hào)中所寫(xiě)的參數(shù),可以寫(xiě)也可以不寫(xiě)。(2)實(shí)際參數(shù):指其他方法調(diào)用某些方法時(shí),調(diào)用時(shí)在方法名后添加的有實(shí)際值的參數(shù)。1.8.2方法的調(diào)用與重載1.方法的調(diào)用方法定義以后,可以在合適的位置進(jìn)行調(diào)用。其基本語(yǔ)法如下:同步方法調(diào)用主要有三種情形:(1)調(diào)用不帶參數(shù)的、無(wú)返回值的方法。調(diào)用時(shí),只需要寫(xiě)“方法名()”即可。(2)調(diào)用帶有參數(shù)的、無(wú)返回值的方法。調(diào)用時(shí),只需要在小括號(hào)內(nèi)依次填寫(xiě)對(duì)應(yīng)參數(shù)即可。(3)調(diào)用帶有參數(shù)的、有返回值的方法。調(diào)用時(shí),只需要在小括號(hào)內(nèi)依次填寫(xiě)對(duì)應(yīng)參數(shù)即可。需要注意的是,帶返回值的方法必須使用“return特定類型的返回值”。在方法定義時(shí),需要考慮被定義的方法是否需要給調(diào)用者返回結(jié)果。如果不需要,定義方法時(shí),返回值類型應(yīng)該寫(xiě)成void;如果需要,返回值類型不能寫(xiě)成void。這需要視情況而定,有時(shí)也可以是int、float、double等。2.方法的重載方法重載是一種使用機(jī)制,可在編碼中解決。如果需要完成相同的功能,但需要的參數(shù)個(gè)數(shù)或類型不一樣,這時(shí)就需要使用方法重載了。能夠構(gòu)成方法重載的條件如下:(1)必須是一個(gè)類的一組方法(方法至少有2個(gè))。(2)這組方法的特點(diǎn)必須滿足如下條件:方法名完全相同,但是方法的形式參數(shù)個(gè)數(shù)或參數(shù)類型不相同。當(dāng)調(diào)用時(shí),編譯器會(huì)根據(jù)給定的實(shí)際數(shù)據(jù)進(jìn)行自動(dòng)匹配,找到最合適的方法去執(zhí)行。匹配時(shí),會(huì)自動(dòng)向上匹配。

1.9面向?qū)ο缶幊?.9.1類、對(duì)象和結(jié)構(gòu)1.類類是組成程序最基本的單元,能夠以class為關(guān)鍵字來(lái)創(chuàng)建一個(gè)類。程序中的類,可以認(rèn)為它是一種模板,是不存在的東西,但將來(lái)可以根據(jù)類這個(gè)模板,構(gòu)建很多具體的真正存在的實(shí)物。而這個(gè)模板的作用,就是規(guī)范這個(gè)類應(yīng)該包含的特征和行為。創(chuàng)建類的基本語(yǔ)法如下:注:(1)類名一般是具體的名詞,命名使用帕斯卡命名法。(2)類定義時(shí),需要使用一組大括號(hào)。

(3)可在class前添加訪問(wèn)修飾符,如public、private、protected、internal等,也可以不加。2.對(duì)象對(duì)象就是根據(jù)類這個(gè)模板產(chǎn)生的具體實(shí)物。符合這個(gè)模板的實(shí)物可以有多個(gè),所以在程序中可以創(chuàng)建多個(gè)對(duì)象。使用new關(guān)鍵字可創(chuàng)建多個(gè)對(duì)象,創(chuàng)建幾次就會(huì)產(chǎn)生幾個(gè)對(duì)象。使用類創(chuàng)建出來(lái)的對(duì)象,都具備模板中所定義的規(guī)范(特征和行為),對(duì)象被創(chuàng)建出來(lái)之后,會(huì)被存儲(chǔ)在堆棧中。創(chuàng)建對(duì)象的基本語(yǔ)法如下:一般情況下,類單獨(dú)寫(xiě)在一個(gè).cs文件中,如果要根據(jù)類產(chǎn)生對(duì)象,則通常會(huì)選擇創(chuàng)建一個(gè)新的類。3.結(jié)構(gòu)1)結(jié)構(gòu)的基本語(yǔ)法2)結(jié)構(gòu)中的內(nèi)容類中可以放的內(nèi)容,大部分都可以放在結(jié)構(gòu)中。具體如下:(1)字段。(2)普通方法。(3)含有參數(shù)的構(gòu)造方法。(4)不能放無(wú)參數(shù)的構(gòu)造方法。3)結(jié)構(gòu)的特點(diǎn)(結(jié)構(gòu)和類的區(qū)別)(1)結(jié)構(gòu)是一種值類型的數(shù)據(jù),創(chuàng)建一個(gè)結(jié)構(gòu)對(duì)象時(shí),不必使用new來(lái)創(chuàng)建,一般也不會(huì)這樣用,但是如果使用也不會(huì)報(bào)錯(cuò)。(2)結(jié)構(gòu)屬于值類型,類屬于引用類型。(3)當(dāng)描述的對(duì)象是比較復(fù)雜或字段較多時(shí),就要使用類。當(dāng)描述一種包含多個(gè)值的對(duì)象,但它是一種輕量級(jí)的數(shù)據(jù)類型時(shí),就要使用結(jié)構(gòu)。1.9.2類中的字段和方法為了更好地描述模板,通常需要在模板類中添加一些特定的成員內(nèi)容。成員包括兩部分:(1)字段:特征,即該成員有什么。(2)方法:行為,即該成員能做什么。當(dāng)對(duì)象使用new關(guān)鍵字被創(chuàng)建出來(lái)后,每個(gè)對(duì)象都會(huì)具備類中所定義好的一份內(nèi)容(字段和方法),而且每個(gè)字段都會(huì)有默認(rèn)值。但是,如果想為對(duì)象的字段重新賦值,就需要:(1)訪問(wèn)類中某些字段,訪問(wèn)方法為“對(duì)象名.字段;?”。(2)當(dāng)前操作的對(duì)象的某些字段賦值,訪問(wèn)方法為“對(duì)象名.字段名=具體的值;”。構(gòu)造方法時(shí),應(yīng)注意以下幾點(diǎn):(1)構(gòu)造方法的方法名和類名是完全相同的。(2)一個(gè)類可以包含多個(gè)構(gòu)造方法,構(gòu)造方法可以有參數(shù),也可以無(wú)參數(shù)。(3)構(gòu)造方法的作用:在使用new創(chuàng)建對(duì)象時(shí),可以為對(duì)象的字段賦值。(4)方法的調(diào)用:當(dāng)使用new關(guān)鍵字創(chuàng)建對(duì)象時(shí),編譯器會(huì)自動(dòng)調(diào)用構(gòu)造方法,調(diào)用何種構(gòu)造方法,取決于new后面類名中的小括號(hào)里有沒(méi)有寫(xiě)參數(shù)。1.9.3面向?qū)ο缶幊痰奶匦?.封裝性廣義封裝:從整個(gè)項(xiàng)目的設(shè)計(jì)角度出發(fā)。狹義封裝:通過(guò)訪問(wèn)修飾符來(lái)控制類中成員的訪問(wèn)權(quán)限(作用范圍)。1)實(shí)現(xiàn)狹義封裝時(shí)應(yīng)該注意類的包含內(nèi)容(1)類中的字段(特征)、類中的方法(行為)。(2)類中的字段私有化(private),類中的方法公開(kāi)化(public)。2)訪問(wèn)修飾符如果創(chuàng)建了一個(gè)類,并且類中添加了字段和方法,但是字段或方法卻省略了訪問(wèn)修飾符,那么省略的其實(shí)是private,也就是說(shuō),字段和方法的默認(rèn)權(quán)限是private。對(duì)于類來(lái)說(shuō),如果class前面省略了訪問(wèn)修飾符,那么省略的其實(shí)是internal。3)屬性語(yǔ)法注:(1)屬性名和字段名是對(duì)應(yīng)的,值得注意的是,屬性名應(yīng)該首字母大寫(xiě)。(2)一個(gè)屬性中對(duì)應(yīng)兩個(gè)方法,分別是get和set,通過(guò)get訪問(wèn)字段的值,通過(guò)set設(shè)置字段的值。(3)利用屬性訪問(wèn)或設(shè)置值的語(yǔ)法:(4)將具體值設(shè)置到字段上時(shí),有一個(gè)隱含的變量value,先將具體值交給value變量,再由value變量給字段,其中,value的類型會(huì)與當(dāng)前操作的字段匹配。

4)只讀屬性和只寫(xiě)屬性(1)只讀屬性:只有g(shù)et訪問(wèn)器的屬性為只讀屬性,此屬性不定義set訪問(wèn)器。(2)只寫(xiě)屬性:只有set訪問(wèn)器的屬性為只寫(xiě)屬性,此屬性不定義get訪問(wèn)器;5)常規(guī)屬性和自動(dòng)屬性(1)常規(guī)屬性:需要人為具體地實(shí)現(xiàn)get訪問(wèn)器或者set訪問(wèn)器,一般需要有一個(gè)字段與之相對(duì)應(yīng)。(2)自動(dòng)屬性:無(wú)需自己再定義私有字段,系統(tǒng)會(huì)在自動(dòng)屬性中自動(dòng)添加一個(gè)對(duì)應(yīng)的私有字段。自動(dòng)屬性中的get和set必須成對(duì)出現(xiàn),不能再設(shè)置只讀或只寫(xiě)一種權(quán)限,不能在set中添加業(yè)務(wù)代碼,對(duì)字段的值進(jìn)行判斷的操作。字段私有化,方法公開(kāi)化。一個(gè)私有化字段對(duì)應(yīng)一個(gè)標(biāo)準(zhǔn)屬性(包含兩個(gè)方法get和set)。2.繼承性(1)C#?中的繼承,也就是子父類關(guān)系。(2)C#?中的繼承符號(hào)為冒號(hào)。注:子類類名的后加上冒號(hào),表示冒號(hào)后是一個(gè)父類的類名。(3)C#?中的繼承是單層繼承。(4)C#?中的繼承具有傳遞性。C類繼承了B類,C就具備了B類的所有內(nèi)容,B類又繼承了A類,B類就具備了A類的所有內(nèi)容,而對(duì)于C來(lái)說(shuō),C類不光具備了B類的內(nèi)容,同時(shí),隱式地具備了A類中的內(nèi)容。(5)子類繼承了父類,父類的全部?jī)?nèi)容都會(huì)被子類繼承。但是,全部?jī)?nèi)容中有一些比較特殊的內(nèi)容值得注意:①

父類私有的內(nèi)容:表面上看,是訪問(wèn)不到,但是實(shí)際是繼承了,只是暫時(shí)訪問(wèn)不到??梢酝ㄟ^(guò)反射等操作拿到相關(guān)數(shù)據(jù)。②

父類的構(gòu)造方法:構(gòu)造方法是不能繼承的,但是子類可以使用。3.多態(tài)性同一操作作用于不同的對(duì)象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果,這就是多態(tài)性。多態(tài)性通過(guò)派生類覆寫(xiě)基類中的虛函數(shù)型方法來(lái)實(shí)現(xiàn)。多態(tài)性分為兩種,一種是編譯時(shí)的多態(tài)性,一種是運(yùn)行時(shí)的多態(tài)性。編譯時(shí)的多態(tài)性:通過(guò)重載來(lái)實(shí)現(xiàn)的。對(duì)于非虛的成員來(lái)說(shuō),系統(tǒng)在編譯時(shí),根據(jù)傳遞的參數(shù)、返回的類型等信息決定實(shí)現(xiàn)何種操作。運(yùn)行時(shí)的多態(tài)性:通過(guò)覆寫(xiě)虛成員實(shí)現(xiàn)。直到系統(tǒng)運(yùn)行時(shí),才根據(jù)實(shí)際情況決定實(shí)現(xiàn)何種操作。使用“父類變量指向子類對(duì)象”的方式創(chuàng)建對(duì)象的過(guò)程稱為向上轉(zhuǎn)型。向上轉(zhuǎn)型后,對(duì)象就具備了父類型和子類型。程序會(huì)根據(jù)運(yùn)行期間對(duì)象的所屬類型來(lái)決定執(zhí)行子類還是父類中的方法。如果子類重寫(xiě)了,則執(zhí)行子類自己的,如果子類沒(méi)有重寫(xiě),則執(zhí)行父類的,如果父類也沒(méi)有,就會(huì)報(bào)錯(cuò)。1.9.4集合集合與數(shù)組比較相似,都可以用來(lái)存儲(chǔ)和管理一組具有相似性質(zhì)的對(duì)象。1.ArrayListArrayList是System.Collections命名空間中的類,它代表了可被單獨(dú)索引的對(duì)象的集合,類似于數(shù)組,被稱為動(dòng)態(tài)數(shù)組,它與普通數(shù)組的不同之處是可以使用索引在指定位置做添加或刪除的操作,并允許在列表中進(jìn)行動(dòng)態(tài)內(nèi)存分配、搜索、排序等操作。創(chuàng)建ArrayList可以使用3種重載構(gòu)建函數(shù)中的某一種,具體如下:2.List<T>創(chuàng)建List集合的基本語(yǔ)法如下:3.<T>T數(shù)據(jù)類型可以是int、byte、short、string、bool、char等。4.泛型(1)具有類型限制,會(huì)對(duì)集合中的數(shù)據(jù)類型進(jìn)行限制。(2)允許延遲編寫(xiě)類或方法中的編程元素的數(shù)據(jù)類型的規(guī)范,直到實(shí)際在程序中使用它的時(shí)候,再指定該元素的數(shù)據(jù)類型的規(guī)范。(3)<T>表示泛型的寫(xiě)法,T指的是一種數(shù)據(jù)類型。(4)泛型是一種編譯期的類型(運(yùn)行之前會(huì)進(jìn)行語(yǔ)法檢查),針對(duì)泛型的語(yǔ)法檢查主要是為了檢查類型是否匹配。5.List集合常用方法List集合和ArrayList集合一樣,提供了以下常用的方法:(1)Count():獲取List集合中符合條件的個(gè)數(shù)。(2)Add():在List集合中添加單個(gè)元素。(3)Remove():刪除第一個(gè)在List集合中出現(xiàn)的指定對(duì)象。(4)RemoveAt():根據(jù)索引刪除List集合中出現(xiàn)的對(duì)象。(5)Reverse():反轉(zhuǎn)List集合中元素的順序。(6)Contains():通過(guò)使用默認(rèn)的等式比較器(EqualityComparer<T>.Default返回的值)來(lái)確定相等。(7)ToArray():將List集合轉(zhuǎn)換為對(duì)應(yīng)的數(shù)組。6.Dictionary字典1)Dictionary基本語(yǔ)法鍵值對(duì)為2)Dictionary存儲(chǔ)數(shù)據(jù)的方法使用鍵值對(duì)的形式存儲(chǔ)。使用哈希數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)鍵和值,既快速又高效。存放字典中的每個(gè)元素由key和value兩部分組成。其中,字典中的key值不能重復(fù),否則會(huì)報(bào)錯(cuò);value值可以重復(fù)。集合中的所有key值,可以通過(guò)方法獲取,是一個(gè)集合。集合中的所有value值,可以通過(guò)方法獲取,是一個(gè)集合。7.集合總結(jié)(1)ArrayList集合已經(jīng)過(guò)時(shí),基本不再使用。如果在代碼中使用,則需要手動(dòng)導(dǎo)入命名空間usingSystem.Collections。(2)List<T>替代了ArrayList的操作。List<T>所在的命名空間為System.Collections.Generic。這樣替代的優(yōu)點(diǎn)是:①

提示了增刪改查的常用方法;②

允許出現(xiàn)相同值的元素。注意:使用List<T>存儲(chǔ)數(shù)據(jù)時(shí),第一個(gè)集合元素下標(biāo)為0,后面為1、2、3等。

(3)Dictionary<Tkey,TValue>字典集合以鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù),所在的命名空間為System.Collections.Generic。2.1Unity基礎(chǔ)知識(shí)

2.2腳本文件

2.3組件

2.43D數(shù)學(xué)2.1Unity基礎(chǔ)知識(shí)2.1.1什么是Unity1.Unity簡(jiǎn)介Unity是由UnityTechnologies公司開(kāi)發(fā)的用于輕松創(chuàng)建諸如三維視頻游戲、建筑可視化和實(shí)時(shí)三維動(dòng)畫(huà)等類型的多平臺(tái)綜合型游戲開(kāi)發(fā)工具,它是一個(gè)國(guó)際領(lǐng)先的專業(yè)游戲引擎。Unity圖標(biāo)如圖2.1所示。Unity引擎具有很大的靈活性,它使開(kāi)發(fā)者能夠?yàn)?0多個(gè)平臺(tái)創(chuàng)作和優(yōu)化內(nèi)容,這些平臺(tái)包括iOS、安卓、Windows、MacOS、索尼PS4、任天堂Switch、微軟XboxOne、谷歌Stadia、微軟Hololens、谷歌ARCore、蘋(píng)果ARKit、商湯SenseAR等。UnityTechnologies公司的研發(fā)團(tuán)隊(duì)超過(guò)1800人,同時(shí)其跟隨合作伙伴迭代,以確保在最新的版本和平臺(tái)上提供優(yōu)化支持服務(wù)。Unity不僅提供創(chuàng)作工具,還提供運(yùn)營(yíng)服務(wù)來(lái)幫助創(chuàng)作者。這些解決方案包括:UnityAds廣告服務(wù)、Unity游戲云一站式聯(lián)網(wǎng)游戲服務(wù)、Vivox游戲語(yǔ)音服務(wù)、Multiplay海外服務(wù)器托管服務(wù)、Unity內(nèi)容分發(fā)平臺(tái)、UnityAssetStore資源商店、Unity云構(gòu)建等。

Unity總部位于美國(guó)加利福尼亞州舊金山,并在丹麥、比利時(shí)、立陶宛、哥倫比亞、加拿大、中國(guó)、芬蘭、瑞典、德國(guó)、法國(guó)、日本、英國(guó)、愛(ài)爾蘭、韓國(guó)和新加坡設(shè)有辦公室。創(chuàng)作者遍布全球190個(gè)國(guó)家和地區(qū)。2.Unity實(shí)際應(yīng)用(1)Unity3D在虛擬仿真教育方面的應(yīng)用。虛擬現(xiàn)實(shí)技術(shù)應(yīng)用于教育,這是教育技術(shù)發(fā)展的一個(gè)大的飛躍。Unity3D在虛擬仿真教育方面的應(yīng)用如圖2.2所示。(2)Unity3D在軍事航空領(lǐng)域的應(yīng)用。利用VR技術(shù),可模擬零重力環(huán)境,以代替現(xiàn)在非標(biāo)準(zhǔn)的水平下訓(xùn)練宇航員的方法。Unity3D在軍事航空領(lǐng)域的應(yīng)用如圖2.3所示。(3)Unity3D在室內(nèi)設(shè)計(jì)方面的應(yīng)用。VR技術(shù)可以讓設(shè)計(jì)者完全按照自己的構(gòu)想去裝飾“虛擬”的房間,并可以任意變換自己在房間中的位置去觀察設(shè)計(jì)的效果,直到滿意為止。這樣做既節(jié)約了時(shí)間,又節(jié)省了做模型的費(fèi)用。Unity3D在室內(nèi)設(shè)計(jì)方面的應(yīng)用如圖2.4所示。(4)Unity3D在城市規(guī)劃方面的應(yīng)用。展現(xiàn)規(guī)劃方案虛擬現(xiàn)實(shí)系統(tǒng)的沉浸感和互動(dòng)性不但能夠給用戶帶來(lái)強(qiáng)烈、逼真的感官?zèng)_擊,獲得身臨其境的體驗(yàn),還可以通過(guò)一些數(shù)據(jù)接口,在虛擬的環(huán)境中隨時(shí)獲取項(xiàng)目的數(shù)據(jù)資料。Unity3D在城市規(guī)劃方面的應(yīng)用如圖2.5所示。(5)Unity3D在房產(chǎn)開(kāi)發(fā)方面的應(yīng)用。虛擬現(xiàn)實(shí)技術(shù)是集影視廣告、動(dòng)畫(huà)、多媒體、網(wǎng)絡(luò)科技于一身的最新房地產(chǎn)營(yíng)銷方式,同時(shí)也在房地產(chǎn)開(kāi)發(fā)的其他環(huán)節(jié)起著重要作用。Unity3D在房產(chǎn)開(kāi)發(fā)方面的應(yīng)用如圖2.6所示。3.Unity的特性Unity的特性是一系列輔助性的功能,在綜合編輯、跨平臺(tái)、精簡(jiǎn)流程等很多方面非常有用。其大致可總結(jié)為以下五點(diǎn):(1)Unity作為游戲引擎,具有綜合編輯功能,它能夠完成關(guān)于3D效果制作的一些最為基本的編輯過(guò)程。(2)Unity提供了精簡(jiǎn)直接的工作流程及強(qiáng)大的工具集,使得游戲開(kāi)發(fā)周期大幅縮短。(3)Unity編輯器可運(yùn)行在Windows、Linux等多平臺(tái),其最大的特點(diǎn)是通過(guò)一次開(kāi)發(fā)就可以部署到時(shí)下所有主流游戲平臺(tái)。(4)Unity自帶圖形動(dòng)力特性。(5)Unity的是資源導(dǎo)入特性,能夠?qū)崿F(xiàn)多功能操作,在完成關(guān)于Unity3D工作任務(wù)的時(shí)候,可以將一些自己希望導(dǎo)入的信息或者是圖片導(dǎo)入到Unity3D當(dāng)中,以達(dá)到預(yù)期的效果。4.Unity的優(yōu)點(diǎn)(1)高能、低價(jià)、易用。Unity3D游戲開(kāi)發(fā)引擎擁有完善的技術(shù)以及豐富的個(gè)性化功能,且易于上手,降低了對(duì)游戲開(kāi)發(fā)人員的要求。(2)跨平臺(tái)。開(kāi)發(fā)人員可以通過(guò)不同的平臺(tái)進(jìn)行開(kāi)發(fā)。在游戲開(kāi)發(fā)完后即可一鍵發(fā)布到常用的主流平臺(tái)或運(yùn)營(yíng)商的目標(biāo)平臺(tái)上。Unity3D游戲可發(fā)布的平臺(tái)包括Windows、Linux、MacOS、iOS、Android、Xbox360、PS4以及Web等。跨平臺(tái)開(kāi)發(fā)可為游戲開(kāi)發(fā)者節(jié)省大量時(shí)間。(3)綜合編輯。Unity3D的用戶界面具備視覺(jué)化編輯、詳細(xì)的屬性編輯器和動(dòng)態(tài)游戲預(yù)覽等特性。(4)資源導(dǎo)入。項(xiàng)目可以自動(dòng)導(dǎo)入資源,并根據(jù)資源的改動(dòng)自動(dòng)更新。Unity3D支持幾乎所有主流的三維格式,如3dsMax、Maya、Blender等,貼圖材質(zhì)自動(dòng)轉(zhuǎn)化為U3D格式,并能和大部分相關(guān)應(yīng)用程序協(xié)調(diào)工作。(5)腳本語(yǔ)言。Unity3D集成了MonoDeveloper編譯平臺(tái),支持C#、JavaScript和Boo三種腳本語(yǔ)言,其中C#和JavaScript是游戲開(kāi)發(fā)中最常用的腳本語(yǔ)言。(6)一鍵部署。Unity3D只需一鍵即可完成作品的多平臺(tái)開(kāi)發(fā)和部署,讓開(kāi)發(fā)者的作品在多平臺(tái)呈現(xiàn)。(7)聯(lián)網(wǎng)。Unity3D支持從單機(jī)應(yīng)用到大型多人聯(lián)網(wǎng)游戲的開(kāi)發(fā)。(8)著色器。Unity3D著色器系統(tǒng)整合了易用性、靈活性、高性能等特點(diǎn)。(9)地形編輯器。Unity3D內(nèi)置強(qiáng)大的地形編輯系統(tǒng),該編輯系統(tǒng)可使游戲開(kāi)發(fā)者實(shí)現(xiàn)游戲中任何復(fù)雜的地形,支持地形創(chuàng)建和樹(shù)木與植被貼片,支持自動(dòng)的地形LOD、水面特效。(10)物理特效。Unity3D內(nèi)置NVIDIA的PhysX物理引擎,游戲開(kāi)發(fā)者可以用高效、逼真、生動(dòng)的方式復(fù)原和模擬真實(shí)世界中的物理效果,例如碰撞檢測(cè)、彈簧效果、布料效果、重力效果等。(11)光影。Unity3D提供了具有柔和陰影,以及高度完善的烘焙效果的光影渲染系統(tǒng)。5.Unity的缺點(diǎn)(1)資源收費(fèi)。在開(kāi)發(fā)過(guò)程中,很多Unity資源以及所用到的插件都是收費(fèi)的。(2)平臺(tái)限制。由于iOS平臺(tái)的一些限制,Unity很難做動(dòng)態(tài)代碼的更新。程序一旦穩(wěn)定了,其需要頻繁更新代碼的機(jī)會(huì)非常少,更多的是更新配置和資源。(3)需要適應(yīng)??赡苡行┤瞬皇煜nity,從而選擇了開(kāi)源的cocos2d-x。適應(yīng)Unity的框架、工作方式需要一定的時(shí)間。(4)打包不方便。由于Unity中資源對(duì)應(yīng)的配置有很大的重要性,所以一個(gè)Unity功能就是資源+代碼的整合,很難分出一個(gè)資源包。(5)大眾化操作需考慮。Unity很多設(shè)計(jì)都是為可視化編輯考慮的,比如2D的動(dòng)畫(huà)放幾張圖片就可以搞定,但是如果每張圖片都有一定的偏移,那就需要重新實(shí)現(xiàn)幀動(dòng)畫(huà)功能加載配置文件來(lái)實(shí)現(xiàn)。2.1.2Unity發(fā)展史1.Unity由來(lái)2004年,有3位年輕人在開(kāi)發(fā)他們的第一款游戲失利后,決定建立一家游戲引擎公司。起初,他們的想法是要讓全世界的開(kāi)發(fā)人員可以使用最少的資源來(lái)創(chuàng)建出個(gè)人喜歡的游戲。誰(shuí)也不曾想到,10年以后,這個(gè)起初并不起眼的公司已經(jīng)發(fā)展成為游戲引擎公司巨頭,而他們的游戲引擎也成為世界上應(yīng)用最廣泛的游戲引擎。這個(gè)公司就是UnityTechnologies,這3位年輕人分別是公司創(chuàng)始人DavidHelgason(CEO)、NicholasFrancis(CCO)和JoachimAnte(CTO),3位創(chuàng)始人的初衷也得以實(shí)現(xiàn)。2.Unity發(fā)展歷程2004年,Unity誕生于丹麥。2005年,Unity將總部設(shè)在美國(guó)舊金山,同時(shí)發(fā)布了Unity1.0版本(應(yīng)用于Web項(xiàng)目和VR開(kāi)發(fā))。2006年,Unity發(fā)布了Unity1.5版本。2007年,Unity發(fā)布了Unity2.0版本——新增了地形引擎、實(shí)時(shí)動(dòng)態(tài)陰影、網(wǎng)絡(luò)多人聯(lián)機(jī)等功能。2008年,Unity引擎可以在Windows平臺(tái)開(kāi)發(fā),并且支持iOS和Wii。2009年,Unity發(fā)布了Unity2.5版本——推出Windows版本,支持iOS和Wii任天堂游戲機(jī)。2010年,Unity發(fā)布了Unity3.0版本——支持Android平臺(tái)。2011年,Unity可以支持PS3和Xbox360。2012年,Unity發(fā)布了Unity4.0版本——支持Web及其他游戲平臺(tái)。2013年,Unity3D引擎覆蓋了越來(lái)越多的國(guó)家,全球用戶已超過(guò)150萬(wàn)。2014年,Unity發(fā)布了Unity4.6版本,更新了屏幕自動(dòng)旋轉(zhuǎn)等功能。2015年,Unity發(fā)布了Unity5.0版本。2016年,Unity發(fā)布了Unity5.4版本,專注于新的視覺(jué)功能,為開(kāi)發(fā)人員提供了最新的理想實(shí)驗(yàn)和原型功能模式,極大地提高了其在VR畫(huà)面展現(xiàn)上的性能。2017年,Unity2017發(fā)布成功。2018年,Unity推出了ARFoundation,它包含對(duì)ARCore的默認(rèn)支持。ARCore1.3加入了訪問(wèn)攝像機(jī)紋理和圖像內(nèi)在屬性的功能。同年8月,ARCore1.4發(fā)布,包括透視攝像頭自動(dòng)聚焦功能,以及更快的平面檢測(cè),并添加了對(duì)更多設(shè)備的支持。2019年,Unity2019.2發(fā)布,此版本包括ProBuilder、ShaderGraph、2D光源、2D動(dòng)畫(huà)、Burst編譯器、UIElements等170多項(xiàng)新功能和增強(qiáng)功能。2020年,Unity2020.1發(fā)布,增加了許多新功能。2.1.3Unity工具中常用的視圖面板Unity3D的主界面簡(jiǎn)潔明了,大部分的面板都可以隨意改動(dòng)放置,也可以關(guān)閉掉。Unity主界面如圖2.13所示。1.Scene:場(chǎng)景面板場(chǎng)景面板是用來(lái)提供設(shè)計(jì)游戲界面的可視化面板,放在場(chǎng)景中的內(nèi)容都稱為游戲?qū)ο?。?chǎng)景面板如圖2.14所示。1)面板中的常用快捷鍵(1)按下鼠標(biāo)滾輪拖動(dòng)場(chǎng)景,滑動(dòng)滾輪縮放場(chǎng)景。(2)鼠標(biāo)右鍵旋轉(zhuǎn)場(chǎng)景,點(diǎn)擊后,通過(guò)左右移動(dòng)場(chǎng)景。(3)點(diǎn)擊右鍵,同時(shí)按下W/S/A/D/Q/E鍵可實(shí)現(xiàn)場(chǎng)景漫游。(4)在Scene面板選中物體后按F鍵,或在Hierarchy面板雙擊物體,可將物體設(shè)置為場(chǎng)景視圖的中心。(5)按住Alt鍵的同時(shí)通過(guò)鼠標(biāo)左鍵圍繞某物體旋轉(zhuǎn)場(chǎng)景,使用鼠標(biāo)右鍵縮放場(chǎng)景。2)變換工具變換工具如表2.1所示。3)變換切換變換切換功能如表2.2所示。4)播放控件(1)播放控件?

從左到右依次是預(yù)覽游戲、暫停游戲、逐幀播放。(2)查看游戲最終運(yùn)行后的畫(huà)面。在運(yùn)行模式下,任何更改都只是暫時(shí)的,退出運(yùn)行后會(huì)復(fù)位。(3)整個(gè)場(chǎng)景的固定坐標(biāo),不隨物體旋轉(zhuǎn)而改變。(4)本地坐標(biāo)是物體的自身坐標(biāo),隨旋轉(zhuǎn)而改變。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論