Unity進(jìn)階與實踐解析 課件 第2章 Unity基礎(chǔ)_第1頁
Unity進(jìn)階與實踐解析 課件 第2章 Unity基礎(chǔ)_第2頁
Unity進(jìn)階與實踐解析 課件 第2章 Unity基礎(chǔ)_第3頁
Unity進(jìn)階與實踐解析 課件 第2章 Unity基礎(chǔ)_第4頁
Unity進(jìn)階與實踐解析 課件 第2章 Unity基礎(chǔ)_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2.1Unity基礎(chǔ)知識

2.2腳本文件

2.3組件

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

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

從左到右依次是預(yù)覽游戲、暫停游戲、逐幀播放。(2)查看游戲最終運行后的畫面。在運行模式下,任何更改都只是暫時的,退出運行后會復(fù)位。(3)整個場景的固定坐標(biāo),不隨物體旋轉(zhuǎn)而改變。(4)本地坐標(biāo)是物體的自身坐標(biāo),隨旋轉(zhuǎn)而改變。2.Hierarchy:層級視圖(層次視圖)層級視圖用于顯示當(dāng)前Scene場景頁面中所有的游戲?qū)ο?,層級視圖面板如圖2.15所示。這些游戲?qū)ο罂梢砸宰痈割惖年P(guān)系呈現(xiàn),也可以是多層次。內(nèi)置對象如下:(1)Cube立方體(正方體)。(2)Sphere球體。(3)Capsule膠囊體。(4)Cylinder圓柱體。(5)Plane橫平面(正面實體,背面透明)。(6)Quad豎平面(正面實體,背面透明)。(7)TextMeshPro-Text。(8)Ragdoll。(9)Terrain地形。(10)Tree。(11)WindZone。(12)3DText。3.Assets:資源視圖(資源面板)資源視圖存放工程項目中的各種資源,資源視圖面板如圖2.16所示。4.Project:工程視圖(工程面板)工程視圖用于顯示項目中文件與資源信息,工程視圖面板如圖2.17所示。5.Game:運行面板運行面板如圖2.18所示。單擊“運行”場景按鈕后,當(dāng)前場景的運行效果會展示到Game視圖。Game視圖模擬的是項目安裝到的具體設(shè)備(如android手機(jī))。6.AssetStore:資源商店Unity資源商店中提供了多種游戲媒體資源供下載和購買,例如人物模型、動畫、粒子特效、紋理、游戲創(chuàng)作工具、音樂特效、功能腳本和其他類拓展插件等。需要登錄賬號后,下載各種資源(此資源有些收費,有些免費),包括項目、3D模型、動畫、音頻、粒子系統(tǒng)、腳本等。7.Inspector:檢視視圖(屬性視圖)檢視視圖面板如圖2.20所示。當(dāng)前在Hierarchy面板中顯示的游戲?qū)ο笊砩习乃薪M件(內(nèi)容)。組件可以理解為屬性。8.Console:控制臺視圖(控制臺面板)控制臺用于顯示程序中的調(diào)試、運行、錯誤等信息。在顯示內(nèi)容時,如果打印的內(nèi)容是相同的,則可以一行一行顯示,也可以折疊顯示??刂婆_視圖面板如圖2.21所示。2.2腳本文件2.2.1腳本1.腳本基礎(chǔ)腳本是附加在游戲物體上用于定義游戲?qū)ο笮袨榈闹噶畲a。腳本基礎(chǔ)的介紹如下:(1)腳本是后綴為?.cs的文本文件。(2)腳本都要綁定到具體的游戲?qū)ο笊希拍馨l(fā)揮價值。(3)Unity支持的三種高級編程語言有C#、JavaScript輕量級、BooScript。(4)腳本的語法結(jié)構(gòu)如下:其中,文件名與類名必須一致;寫好的腳本必須附加到游戲物體上;附加到游戲物體的腳本類必須從MonoBehaviour類繼承。(5)腳本的編譯過程:源代碼(CLS)→中間語言(MonoRuntime)→機(jī)器碼。(6)單擊Project視圖中的“Great”按鈕可以創(chuàng)建一個腳本文件。2.腳本的編輯工具腳本的編輯工具有VisualStudio和MonoDevelop等,目前使用最多的是輕量級腳本編輯器VisualStudio。(1)VisualStudio。微軟公司的開發(fā)工具包,包括了整個軟件生命周期中需要的大部分工具,如團(tuán)隊開發(fā)工具、集成開發(fā)環(huán)境等。VisualStudio圖標(biāo)如圖2.22所示。在Unity中可以通過菜單設(shè)置修改默認(rèn)的腳本編輯器,修改步驟為Edit→Preferences→ExternalTools→ExternalScriptEditor。(2)MonoDevelop。Unity工具自帶的編輯腳本的工具,創(chuàng)建Mono應(yīng)用程序,適用于Linux、MacOS和Windows的集成開發(fā)環(huán)境,支持C#、BOO和JavaScript等高級編程語言。MonoDevelop圖標(biāo)如圖2.23所示。Unity編輯器在使用過程中會用到多種編輯工具,其使用方法如下:1)使用Unity默認(rèn)腳本編輯器為了便于操作,可以修改Unity的默認(rèn)腳本編輯器,修改順序為:Edit→Preferences→ExternalTools→ExternalScriptEditor。將程序投入到實際運行中,通過開發(fā)工具進(jìn)行測試、修正邏輯錯誤的相關(guān)控制臺調(diào)試函數(shù)如下:(1)Debug.Log(變量)。(2)print(變量)。2)使用VS安裝完VisualStudio2019工具后,在Unity項目面板中導(dǎo)入VisualStudio2019Tools。使用VS的調(diào)試步驟為:在可能出錯的行添加斷點;啟動調(diào)試;在Unity中運行(Play)場景。3)使用MonoDevelop在可能出錯的行添加斷點;啟動調(diào)試:依次選擇MD菜單欄中的“Run”→“AttachtoProcess”選項;在Unity中運行(Play)場景。4)腳本綁定到游戲?qū)ο笊现苯訉⒛_本拖動到Hierarchy面板中的某個游戲?qū)ο笊稀?.2.2腳本的生命周期C#?中,所有腳本的父類為MonoBehaviour。MonoBehaviour類定義了一個腳本文件從最初被加載,到最后被銷毀的完整過程。這個過程通過對應(yīng)的方法體現(xiàn)出來,在不同的方法中完成不同的功能。這些方法被稱為腳本生命周期相關(guān)的方法。1.初始化模塊(1)Awake():整個生命周期中只執(zhí)行一次;腳本被加載到場景中時自動調(diào)用;常用于在游戲開始前進(jìn)行初始化,可判斷當(dāng)滿足某種條件執(zhí)行此腳本。(2)OnEnable():判斷對象或腳本是否可用;配合OnDisable()方法一起使用;執(zhí)行次數(shù)不確定。(3)Start():物體載入且腳本對象啟用時被調(diào)用一次,常用于數(shù)據(jù)或游戲邏輯初始化,執(zhí)行時間晚于Awake。2.更新模塊(1)FixedUpdate():以幀為單位(固定的時間間隔)來進(jìn)行場景的刷新;主要完成與物理相關(guān)的更新操作。(2)Update():每一幀與每一幀的執(zhí)行時間可能是不一致的;執(zhí)行速率與硬件設(shè)備和被渲染物體有關(guān)系,有時快有時慢;主要完成場景中數(shù)據(jù)的更新和數(shù)據(jù)的邏輯處理操作。(3)LateUpdate():當(dāng)一幀執(zhí)行結(jié)束,在準(zhǔn)備下一幀執(zhí)行之前,會調(diào)用該方法。(4)OnGUI():UI界面的調(diào)用。3.銷毀模塊(1)OnDisable():當(dāng)對象或腳本處于不可用(或不可激活)執(zhí)行,執(zhí)行幾次不確定。一般會與OnEnable()配合使用。(2)OnDestory():整個生命周期中只執(zhí)行一次;當(dāng)對象(腳本文件)被銷毀時只執(zhí)行該方法;一般會先執(zhí)行OnDisable(),將對象變?yōu)椴豢捎脿顟B(tài),再銷毀。(3)OnApplicationQuit():當(dāng)程序結(jié)束或應(yīng)用程序退出時調(diào)用。4.物理階段(1)FixedUpdate固定更新:腳本啟用后,固定時間被調(diào)用,適用于對游戲?qū)ο笞鑫锢聿僮?,例如移動等。在菜單欄依次選擇“Edit→ProjectSetting→Time→FixedTimestep(默認(rèn)為0.02?s)”來設(shè)置更新頻率。(2)OnCollisionXXX碰撞:當(dāng)滿足碰撞條件時調(diào)用。(3)OnTriggerXXX觸發(fā):當(dāng)滿足觸發(fā)條件時調(diào)用。5.游戲邏輯首先執(zhí)行Update函數(shù),它在每幀執(zhí)行一次,該函數(shù)主要處理游戲?qū)ο笤谟螒蚴澜缰械男袨檫壿?,例如游戲角色的控制和游戲狀態(tài)的控制。然后執(zhí)行LateUpdate函數(shù),它也是每幀執(zhí)行一次,在Update函數(shù)后執(zhí)行。在實際開發(fā)過程中Update函數(shù)與LateUpdate函數(shù)通常共同使用。最后在游戲邏輯程序循環(huán)結(jié)束后執(zhí)行OnGUI函數(shù)。OnGUI函數(shù)每幀可執(zhí)行多次,用于繪制Unity的圖形用戶界面。腳本生命周期的3個階段,其示例代碼如下:先拖動到對象上的腳本后執(zhí)行,后拖動的先執(zhí)行。但是,實際項目中腳本文件比較多,且開發(fā)人員不可能一直記得拖動的順序,這時就需要使用界面化的操作來管理腳本的執(zhí)行順序。可以左鍵單擊任何一個腳本文件,點開Inspector右上角位置的Order按鈕,選擇“+”號圖標(biāo),在當(dāng)前項目下的所有腳本文件中,需要哪個腳本,對其進(jìn)行點擊即可。添加的每個腳本項后面都有一個數(shù)字,數(shù)字越小,表示該腳本越先執(zhí)行。腳本的執(zhí)行順序是以界面中設(shè)置的順序為執(zhí)行依據(jù)的。2.3組件2.3.1組件的概念游戲?qū)ο髶碛懈鞣N各樣的信息,而這些信息都是以組件(Component)的方式存在的。游戲?qū)ο笫怯梢粋€到多個組件組成的,可以將組件看作組成一臺機(jī)器的零部件。Unity游戲是通過組件的方式進(jìn)行開發(fā)的,所以想要操作游戲?qū)ο笠捕际峭ㄟ^操作對應(yīng)的組件對象來實現(xiàn)。組件面板如圖2.24所示。在Hierarchy面板上或者Scene視圖中任意選擇一個游戲?qū)ο?,就可以在Inspector面板上面看到對應(yīng)的組件信息。一般,游戲?qū)ο蠖贾辽贂碛幸粋€名為“Transform”的組件。它是游戲?qū)ο蟮幕窘M件,里面包含游戲?qū)ο笤趫鼍爸械幕緦傩孕畔ⅰ?.3.2組件的訪問Unity中的腳本可以認(rèn)為是用戶自定義組件,并且可以添加到游戲?qū)ο笊蟻砜刂朴螒驅(qū)ο蟮男袨?,而游戲?qū)ο髣t可視為容納各種組件的容器。一個游戲?qū)ο笥扇舾蓚€組件構(gòu)成。組件的分類如表2.3所示。常用組件及其變量如表2.4所示。如果要訪問的組件不屬于上表,或者訪問的是游戲上的腳本(腳本屬于自定義組件),則可以通過以下方法得到引用,如表2.5所示。2.3.3Transform組件Transform組件用于控制游戲?qū)ο笤赨nity場景中的位置、旋轉(zhuǎn)和大小比例。添加到場景中的每個游戲?qū)ο竽J(rèn)都包含了Transform組件。Transform組件的每個變換都可以有一個父項,它允許分級地應(yīng)用位置、旋轉(zhuǎn)和縮放??梢栽贖ierarchy層級視圖窗格中看到游戲?qū)ο蟮膶哟谓Y(jié)構(gòu)。Transform組件還支持枚舉器,以便循環(huán)使用。1.Transform組件成員變量Transform組件的成員變量如表2.6所示。Transform組件的成員函數(shù)如表2.7所示。2.Transform類提供的常用方法Transform組件是Unity3D的重點之一,Transform類提供了許多常用方法,介紹如下:(1)Translate()表示移動;Rotate()表示旋轉(zhuǎn);Vector3是3D世界中的位置,可以用(x,y,z)或Vector3.left|right|up|down|forward|back來表示。(2)Translate(參數(shù)1,參數(shù)2)是Transform類下的一個公共方法。方法的第1個參數(shù)表示位移,一般用移動方向?×?速度?×?時間表示。方法的第2個參數(shù)表示相對于哪個坐標(biāo)系進(jìn)行移動。其中,Space.self和Space.world分別指自身坐標(biāo)系和世界坐標(biāo)系。如果沒有傳第2個參數(shù),默認(rèn)是相對于自己的坐標(biāo)系。(3)Rotate(參數(shù)1,參數(shù)2)是對游戲?qū)ο筮M(jìn)行旋轉(zhuǎn)。若以Y軸為中心點使立方體進(jìn)行正方向旋轉(zhuǎn),則旋轉(zhuǎn)的示例代碼如下:(4)Instantiate(原對象,新對象的位置,新對象的角度)方法是Unity中的Object類提供的方法,用于產(chǎn)生指定游戲?qū)ο蟮母北?。?dāng)該方法執(zhí)行結(jié)束后,會將對象的副本作為Object類型返回。該方法一般寫在Update()方法中。2.3.4Time類在Unity中可以通過Time類獲取和時間有關(guān)的信息,用來計算幀速率、調(diào)整時間流逝速度等功能。在Unity引擎中,時間就是執(zhí)行程序的速度。引擎本質(zhì)上只是運行程序,只能一行一行按照順序運行代碼,而不會反過來運行,否則會出錯。為了節(jié)約系統(tǒng)內(nèi)存資源,程序也不可能儲存每個時間點上的所有數(shù)據(jù),即使是制作回放,也只是回放一部分?jǐn)?shù)據(jù)。Time成員變量如表2.8所示。Time類包含一個重要的類變量deltaTime,它表示距離上一次調(diào)用所用的時間。Time.deltaTime表示距離上一幀的執(zhí)行所耗費的時間,該時間為0~1之間的小數(shù)(單位為秒)。場景中的游戲?qū)ο笤谝苿踊蛐D(zhuǎn)時,默認(rèn)速度較快,所以一般做法是參數(shù)乘以自定義的一個小數(shù)以此來降低速度。但出現(xiàn)deltaTime后,小數(shù)可使用deltaTime替代,也就是直接乘以Time.delta也一樣可以實現(xiàn)降低速度。普通更新操作放在Update()中,但Update()方法每一幀與每一幀的執(zhí)行時間不相同,解決這個問題的前提是不能將更新操作的代碼寫在FixedUpdate()中,可以直接乘以Time.deltaTime來實現(xiàn)該功能。2.3.5Random類Unity引擎提供的Random類可以用來生成隨機(jī)數(shù)、隨機(jī)點或旋轉(zhuǎn)角度以下對Random類進(jìn)行說明。Random類提供的常用成員變量如表2.9所示。Random類提供的常用成員函數(shù)如表2.10所示。2.3.6Mathf類1.Mathf類在Unity中封裝了數(shù)學(xué)類Mathf,Mathf類提供了常用的數(shù)學(xué)運算,使用它可以輕松地解決復(fù)雜的數(shù)學(xué)公式。Mathf類的變量如下:(1)PI:圓周率(π)的值,即3.14159265358979…(只讀)。(2)Infinity:正無窮大∞(只讀)。(3)NegativeInfinity:負(fù)無窮大?-∞(只讀)。(4)Deg2Rad:度到弧度的轉(zhuǎn)換系數(shù)(只讀)。(5)Rad2Deg:弧度到度的轉(zhuǎn)換系數(shù)(只讀)。(6)Epsilon:一個很小的浮點數(shù)值(只讀)。Mathf類常用方法如表2.11所示。2.Mathf常用類示例(1)?Mathf.Abs絕對值。計算并返回指定參數(shù)f絕對值。(2)?Mathf.Acos反余弦。staticfunctionAcos(f:float):float是以弧度為單位計算并返回參數(shù)f中指定數(shù)字的反余弦值。(3)?Mathf.Asin反正弦。staticfunctionAsin(f:float):float是以弧度為單位計算并返回參數(shù)f中指定數(shù)字的反正弦值。(4)?Mathf.Atan反正切。staticfunctionAtan(f:float):float是計算并返回參數(shù)f中指定數(shù)字的反正切值。返回值介于?-π/2~π/2之間。(5)?Mathf.Ceil上限制。staticfunctionCeil(f:float):float是返回f指定數(shù)字或表達(dá)式的上限值。數(shù)字的上限值是大于等于該數(shù)字的最接近的整數(shù)。(6)?Mathf.Clamp限制。staticfunctionClamp(value:float,min:float,max:float):float限制value的值在min~max之間。如果value值小于min,返回min,如果value大于max,返回max,否則返回value。staticfunctionClamp(value:int,min:int,max:int):int限制value的值在min~max之間,并返回value。(7)?Mathf.Sin正弦。staticfunctionSin(f:float):float計算并返回以弧度為單位的指定角f的正弦值。(8)?Mathf.Cos余弦。staticfunctionCos(f:float):float返回由參數(shù)f指定的角的余弦值(介于?-1.0~1.0之間的值)。(9)?Mathf.Exp指數(shù)。staticfunctionExp(power:float):float返回e的power次方的值。(10)?Mathf.Log10基數(shù)10的對數(shù)。staticfunctionLog10(f:float):float返回f的對數(shù),基數(shù)為10。(11)?Mathf.Max最大值。staticfunctionMax(a:float,b:float):float和staticfunctionMax(paramsvalues:float[]):float返回兩個或更多值中最大的值。(12)?Mathf.Min最小值。staticfunctionMin(a:float,b:float):float和staticfunctionMin(paramsvalues:float[]):float返回兩個或更多值中最小的值。(13)?Mathf.Pow次方。staticfunctionPow(f:float,p:float):float計算并返回f的p次方。(14)?Mathf.Round四舍五入。staticfunctionRoundToInt(f:float):int返回f指定的值四舍五入到最近的整數(shù)。如果數(shù)字末尾是.5,因此它是在兩個整數(shù)中間,不管是偶數(shù)或是奇數(shù),將返回偶數(shù)。2.3.7Input類Input類包裝了輸入功能的類,可以讀取輸入管理器中設(shè)置的按鍵,也可以訪問移動設(shè)備的多點觸控或加速感應(yīng)數(shù)據(jù)。建議在Update中檢測用戶的輸入。1.Input類Input類的成員變量和成員函數(shù),如表2.12、表2.13所示。2.鼠標(biāo)輸入Input類提供的用于處理鼠標(biāo)輸入的相關(guān)坐標(biāo)顯示和方法。mousePostion用于獲取鼠標(biāo)在當(dāng)前屏幕上的具體坐標(biāo),該坐標(biāo)是一個二維坐標(biāo)(Z軸始終0),它與當(dāng)前屏幕的像素有關(guān)。如果鼠標(biāo)在當(dāng)前屏幕的左下角,則坐標(biāo)為(0,0),如果鼠標(biāo)在屏幕的右上角,則坐標(biāo)為(Screen.Width,Screen.Height)。鼠標(biāo)輸入的常用方法:(1)GetMouseButtonDown(按鍵碼):當(dāng)指定的鼠標(biāo)按鍵碼被按下時返回true,否則返回false。(2)GetMouseButtonUp(按鍵碼):當(dāng)指定的鼠標(biāo)按鍵被抬起時返回true,否則返回false。一般在執(zhí)行該方法前,先執(zhí)行按下操作,然后再抬起。(3)GetMouseButton(按鍵碼):當(dāng)指定的鼠標(biāo)按鍵一直按著時返回true,否則返回false。(4)GetAxis("MouseX"):獲取鼠標(biāo)在水平方向上移動的距離,并返回float類型的數(shù)字。當(dāng)鼠標(biāo)在水平方向上正半軸移動時得到一個正數(shù),當(dāng)鼠標(biāo)在水平方向上負(fù)半軸移動時得到一個負(fù)數(shù)。(5)GetAxis("MouseY"):獲取鼠標(biāo)在垂直方向上移動的距離,并返回float類型的數(shù)字。當(dāng)鼠標(biāo)在垂直方向上的上半軸移動時得到一個正數(shù),當(dāng)鼠標(biāo)在垂直方向上的下半軸移動時得到一個負(fù)數(shù)。3.鍵盤輸入(1)GetKeyDown(鍵盤按鍵):指定某鍵盤按鍵被按下時,返回true,否則,返回false。(2)GetKeyUp(鍵盤按鍵):指定某鍵盤按鍵被抬起時,返回true,否則,返回false。(3)GetKey(鍵盤按鍵):指定某鍵盤按鍵被一直按著時,返回true,否則,返回false。(4)GetAxis("Horizontal"):用于判斷按了鍵盤上水平方向的哪個鍵(4個箭頭方向鍵)。(5)GetAxis("Vertical"):用于判斷按了鍵盤上垂直方向的哪個鍵。如果方法返回?-1~1之間的正數(shù),則表示按了向上方向;如果方法返回?-1~1之間的負(fù)數(shù),則表示按了向下方向。2.43D數(shù)學(xué)2.4.1向量1.向量的概念及基本定義1)向量的數(shù)學(xué)定義(1

溫馨提示

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

評論

0/150

提交評論