第一篇:unity3D學(xué)習(xí)知識點(diǎn)總結(jié)
1.unity簡介和安裝(x)
2.unity基礎(chǔ)操作
unity窗口界面介紹
1.Scene場景編輯窗口(Q、W、E、R、T/按住鼠標(biāo)右鍵—旋轉(zhuǎn)視角、按住鼠標(biāo)右鍵Q、E、W、S、A、D)
2.Game游戲運(yùn)行窗口(運(yùn)行按鈕,暫停按鈕,下一幀畫面)3.Hierarchy 場景物體列表窗口(三角符號表示物體間的父子關(guān)系)
4.Project 項(xiàng)目資源列表窗口(與文件夾對應(yīng),mete文件,移動盡量在unity中移動而不是在文件夾中移動,可能報錯)
5.Inspector 屬性編輯列表窗口(選中Hierarchy物體,出現(xiàn)物體相關(guān)屬性)6.Console 控制臺輸出窗口
7.其他常用窗口:Layers(層)2by3(顯示模式)
unity菜單界面介紹 1.file 文件菜單 2.edit 編輯菜單 3.Assets 資源菜單
4.Gameobject 物體資源菜單 5.Component 組件菜單 6.Window 窗口菜單 7.Help 幫助菜單
Scene與場景漫游
1.Scene窗口各項(xiàng)工具
Q、W、E、R 按住鼠標(biāo)右鍵Q、W、E、R Pivot 物體自己的中心/center 所有物體加權(quán)之后的中心 Global 世界坐標(biāo)/local 自身坐標(biāo) Textured Wite/render Paths顯示 2D/3D 2.快捷鍵與視角的移動
Hierarchy與場景搭建
1.Gameobject: 基本組件
gameobject—>create other 2.Gameobject: 燈光組件 3.Gameobject: 物體組件 4.Gameobject:其他組件 5.Hierarchy層級關(guān)系與應(yīng)用 6.場景搭建案例
Project與資源管理 Inspector與游戲組件
3.C#語言基礎(chǔ)
C#的值類型 C#的引用類型 C#的類型轉(zhuǎn)換 C#的邏輯語句 C#的集合類型
C#的面向?qū)ο筇匦苑庋b、繼承、多態(tài)
Unity 協(xié)程:
和線程的區(qū)別:沒有異步同步的概念,每一幀都執(zhí)行(有內(nèi)容的情況);
協(xié)程的作用:1)延時(等待)一段時間執(zhí)行代碼;2)等某個操作完成之后再執(zhí)行后面的代碼??偨Y(jié)起來就是一句話:控制代碼在特定的時機(jī)執(zhí)行。
4.Unity腳本開發(fā)基礎(chǔ)
腳本介紹
腳本生命周期和腳本變量 腳本的響應(yīng)時間和組件訪問 Transform場景物體的變換 腳本開發(fā)中的基礎(chǔ)數(shù)學(xué) 腳本開發(fā)中的3D數(shù)學(xué) 腳本開發(fā)中的輸入和控制 常用的方法函數(shù) GUI組件的應(yīng)用
代碼調(diào)試與MonoDevelop的使用
在float類型(public)前面加上[Range(0,10)],這樣在檢視面板中可以拖拽調(diào)整變量
5.Unity界面系統(tǒng)
UGUI系統(tǒng)的介紹和創(chuàng)建Canvas畫布 Native2D系統(tǒng)的介紹與使用 Rect Transform 界面系統(tǒng)的布局 UI Event界面系統(tǒng)的事件機(jī)制 UI Element 界面系統(tǒng)的可視組件 Auto Layout 界面系統(tǒng)的自動布局
6.動畫系統(tǒng)
動畫系統(tǒng)的介紹 資源和模型導(dǎo)入
Animation view 動畫的編輯
Animator Transitions 動畫的設(shè)置與狀態(tài)的過渡 Animator Controller 動畫控制器的介紹 Animator Scripting 動畫控制鍵的腳本控制
7.Unity 圖形處理系統(tǒng)
Unity5.0 著色器系統(tǒng)介紹 Unity5.0 渲染系統(tǒng)介紹
8.粒子系統(tǒng)
Unity 粒子界面以及創(chuàng)建
粒子形狀模塊以及生命周期速度類模塊 Unity 粒子的顏色以及速度控制方法 Unity 粒子的旋轉(zhuǎn)、外部作用力與碰撞
9.UI(UGUI、NGUI)
10.全局光照和局部光照模型的不同:局部光照,主要考慮光源發(fā)出的光對物體的直接影響;全局光照除了處理光源發(fā)出的光,還考慮其他輔助光的影響,如光線穿過半透明或者透明物體,以及光線重一個物體表面反射到另一個物體表面等。
11.Unity 程序設(shè)計
1.恰當(dāng)?shù)氖褂脝卫?/p>
2.創(chuàng)建類盡量不要使用或者繼承MonoBehavior 3.界面之間傳遞消息,盡量使用委托來減少依賴 4.盡量控制程序的執(zhí)行順序
12.Unity架構(gòu),目前沒有完美的架構(gòu),參考MVC等架構(gòu)
13.設(shè)計模式,單例、觀察者等模式
第二篇:Unity3D重要知識點(diǎn)總結(jié)
004km.cn
Unity3D重要知識點(diǎn)總結(jié)
學(xué)習(xí)Untiy3d過程中,你需要知道數(shù)據(jù)結(jié)構(gòu)和算法很重,要圖形學(xué)很重要,大的游戲公司看重個人基礎(chǔ),綜合能力小公司就看你實(shí)際工作能力,看你的Demo做的如何。那么今天我們來看一下Unity3d學(xué)習(xí)中的重要知識點(diǎn)有哪些。
1.什么是渲染管道?
是指在顯示器上為了顯示出圖像而經(jīng)過的一系列必要操作。渲染管道中的很多步驟,都要將幾何物體從一個坐標(biāo)系中變換到另一個坐標(biāo)系中去。
主要步驟有:
本地坐標(biāo)->視圖坐標(biāo)->背面裁剪->光照->裁剪->投影->視圖變換->光柵化。
2.如何優(yōu)化內(nèi)存?
004km.cn
有很多種方式,例如
1.壓縮自帶類庫;
2.將暫時不用的以后還需要使用的物體隱藏起來而不是直接Destroy掉;
3.釋放AssetBundle占用的資源;
4.降低模型的片面數(shù),降低模型的骨骼數(shù)量,降低貼圖的大?。?/p>
5.使用光照貼圖,使用多層次細(xì)節(jié)(LOD),使用著色器(Shader),使用預(yù)設(shè)(Prefab)。
3.動態(tài)加載資源的方式?
1.Resources.Load();2.AssetBundle 1.通過Resources模塊,調(diào)用它的load函數(shù):可以直接load并返回某個類型的Object,前提是要把這個資源放在Resource命名的文件夾下,Unity不關(guān)有沒有場景引用,都會將其全部打入到安裝包中。Resources.Load();2.通過bundle的形式:即將資源打成 asset bundle 放在服務(wù)器或本地磁盤,然后使用004km.cn
3.通過AssetDatabase.loadasset :這種方式只在editor范圍內(nèi)有效,游戲運(yùn)行時沒有這個函數(shù),它通常是在開發(fā)中調(diào)試用的
【AssetDatabase 資源數(shù)據(jù)庫】
區(qū)別:Resources的方式需要把所有資源全部打入安裝包,這對游戲的分包發(fā)布(微端)和版本升級(patch)是不利的,所以unity推薦的方式是不用它,都用bundle的方式替代,把資源達(dá)成幾個小的bundle,用哪個就load哪個,這樣還能分包發(fā)布和patch,但是在開發(fā)過程中,不可能沒更新一個資源就打一次bundle,所以editor環(huán)境下可以使用AssetDatabase來模擬,這通常需要我們封裝一個dynamic resource的loader模塊,在不同的環(huán)境下做不同實(shí)現(xiàn)。動態(tài)資源的存放有時我需要存放一些自己的文件在磁盤上,例如我想把幾個bundle放在初始的安裝里,unity有一個streaming asset的概念,用于提供存儲接口的訪問。我們需要在編輯器建立一個StreamingAssets名字的文件夾,把需要我們放在客戶磁盤上的動態(tài)文件放在這個文件夾下面,這樣安裝后,這些文件會放在用戶磁盤的指定位置,這個位置可以通過Application.streamingAssetsPath來得到。
4.什么是協(xié)同程序?
在主線程運(yùn)行時同時開啟另一段邏輯處理,來協(xié)助當(dāng)前程序的執(zhí)行。換句話說,開啟協(xié)程就是開啟一個線程??梢杂脕砜刂七\(yùn)動、序列以及對象的行為。
5.你用過哪些插件?
004km.cn
一 界面制作 推薦:NGUI 二 2D游戲制作 推薦:2D Toolkit /工具包,工具箱
三 可視化編程 推薦:PlayMaker 四 插值插件 推薦:iTween,HOTween 五 路徑搜尋 推薦:Simple Path 六 美術(shù)及動畫制作 推薦:RageSpline,Smooth Moves 七 畫面增強(qiáng) 推薦:Bitmap2Material,Strumpy Shader Editor 八 攝像機(jī)管理 推薦:Security Camera 九 資源包 推薦:Nature Pack
十、造路插件EasyRoads3D 6.使用Unity3d實(shí)現(xiàn)2d游戲,有幾種方式?
1.使用本身的GUI;
004km.cn
2.把攝像機(jī)的Projection(投影)值調(diào)為Orthographic(正交投影),不考慮z軸;
3.使用2d插件,如:2DToolKit;
7.Unity3d中的碰撞器和觸發(fā)器的區(qū)別?
觸發(fā)器只是碰撞器身上的一個屬性,碰撞器是觸發(fā)器的載體。
碰撞器有碰撞的效果,IsTrigger=false,可以調(diào)用OnCollisionEnter/Stay/Exit函數(shù);
觸發(fā)器沒有碰撞效果,IsTrigger=true,可以調(diào)用OnTriggerEnter/Stay/Exit函數(shù)。
a.如果不想讓碰撞檢測影響物體移動但是又想檢測到碰撞這時用到觸發(fā)器(Trigger)
b.觸發(fā)器用來檢測一個物件是否經(jīng)過空間中的某個區(qū)域
8.物體發(fā)生碰撞的必要條件
兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體。
8.1 CharacterController和Rigidbody的區(qū)別?
CharacterController自帶膠囊碰撞器,里面包含有剛體的屬性;
004km.cn
Rigidbody就是剛體,使物體帶有剛體的特征。
[CharacterController:角色控制器]Rigidbody具有完全真實(shí)物理的特性,而CharacterController可以說是受限的Rigidbody,具有一定的物理效果但不是完全真實(shí)的
9.在物體發(fā)生碰撞的整個過程中,有幾個階段,分別列出對應(yīng)的函數(shù)三個階段
1.OnCollisionEnter(進(jìn)入碰撞)2.OnCollisionStay(逗留碰撞)3.OnCollisionExit(當(dāng)退出碰撞)10.Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來
rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函數(shù)中。
11.什么叫做鏈條關(guān)節(jié)?
Hinge Joint,可以模擬兩個物體間用一根鏈條連接在一起的情況,能保持兩個物體在一個固定距離內(nèi)部相互移動而不產(chǎn)生作用力,但是達(dá)到固定距離后就會產(chǎn)生拉力。
12.物體自身旋轉(zhuǎn)使用的函數(shù)?
004km.cn
Transform.Rotate()13.物體圍繞某點(diǎn)旋轉(zhuǎn)使用的函數(shù)?
Transform.RotateAround()14.Unity3d提供了一個用于保存和讀取數(shù)據(jù)的類(PlayerPrefs),請列出保存和讀取整形數(shù)據(jù)的函數(shù)
PlayerPrefs.SetInt()PlayerPrefs.GetInt()15.Unity3d提供了幾種光源類型,分別是哪幾種?
四種。
平行光:Directional Light 點(diǎn)光源:Point Light 聚光燈:Spot Light 區(qū)域光源:Area Light
004km.cn
16.Unity3d腳本從喚醒到銷毀有著一套比較完整的生命周期,請列出系統(tǒng)自帶的幾個重要的方法。
Awake—>Start—>Update—>FixedUpdate—>LateUpdate—>OnGUI—>Reset—>OnDisable—>OnDestroy 17.物理更新一般放在哪個系統(tǒng)函數(shù)里?
FixedUpdate,每固定幀繪制時執(zhí)行一次,和Update不同的是FixedUpdate是渲染幀執(zhí)行,如果你的渲染效率低下的時候FixedUpdate調(diào)用次數(shù)就會跟著下降。FixedUpdate比較適用于物理引擎的計算,因?yàn)槭歉繋秩居嘘P(guān)。Update就比較適合做控制。
18.移動攝像機(jī)的動作放在哪個系統(tǒng)函數(shù)中,為什么放在這個函數(shù)中?
LateUpdate,在每幀執(zhí)行完畢調(diào)用,它是在所有Update結(jié)束后才調(diào),比較適合用于命令腳本的執(zhí)行。官網(wǎng)上例子是攝像機(jī)的跟隨,都是在所有Update操作完才跟進(jìn)攝像機(jī),不然就有可能出現(xiàn)攝像機(jī)已經(jīng)推進(jìn)了,但是視角里還未有角色的空幀出現(xiàn)。
19.當(dāng)游戲中需要頻繁創(chuàng)建一個物體時,我們需要怎樣做能夠節(jié)省內(nèi)存?
使用預(yù)制物體對象Prefab,然后復(fù)制創(chuàng)建。
20.在場景中放置多個Camera并同時處于活動狀態(tài)會發(fā)生什么?
004km.cn
游戲界面可以看到很多攝像機(jī)的混合。
21.請描述Prefab的作用,并描述如何在移動設(shè)備的環(huán)境下恰當(dāng)?shù)氖褂盟?/p>
Prefab在實(shí)例化的時候用到,主要用于經(jīng)常會用到的物體,屬性方便修改。
22.請簡述Unity3d下如何安全的在不同工程間遷移asset數(shù)據(jù),請列舉出三種方法?
1.可以把a(bǔ)ssets目錄和Library目錄一起遷移
2.導(dǎo)出包
3.用Unity帶的assets Server功能
23.請描述游戲動畫有哪幾種,以及其原理?
主要有關(guān)節(jié)動畫、骨骼動畫、單一網(wǎng)格模型動畫(關(guān)鍵幀動畫)。
a.關(guān)節(jié)動畫:把角色分成若干獨(dú)立部分,一個部分對應(yīng)一個網(wǎng)格模型,部分的動畫連接成一 個整體的動畫,角色比較靈活,Quake2中使用這種動畫;
b.骨骼動畫,廣泛應(yīng)用的動畫方式,集成了以上兩個方式的優(yōu)點(diǎn),骨骼按角色特點(diǎn)組成一定的層次結(jié)構(gòu),有關(guān)節(jié)相連,可做相對運(yùn)動,皮膚作為單一網(wǎng)格蒙在骨骼之外,決定角色的外觀;
004km.cn
c.單一網(wǎng)格模型動畫由一個完整的網(wǎng)格模型構(gòu)成,在動畫序列的關(guān)鍵幀里記錄各個頂點(diǎn)的原位置及其改變量,然后插值運(yùn)算實(shí)現(xiàn)動畫效果,角色動畫較真實(shí)。
24.請描述為什么Unity3d中會發(fā)生在組件上出現(xiàn)數(shù)據(jù)丟失的情況
一般是組件上綁定的物體對象被刪除了
25.alpha blend工作原理
Alpha Blend 實(shí)現(xiàn)透明效果,不過只能針對某塊區(qū)域進(jìn)行alpha操作,透明度可設(shè)。
26.寫出光照計算中的diffuse的計算公式
計算公式為: Idiffuse = Dintensity*Dcolor*N.L;(Dintensity表示漫反射強(qiáng)度,Dcolor 表示漫反射光顏色,N 為該點(diǎn)的法向量,L 為光源向量 其中N與L點(diǎn)乘,如果結(jié)果小于等于0,則漫反射為0。
27.Lod是什么,優(yōu)缺點(diǎn)是什么?
004km.cn
LOD(Level of detail)多層次細(xì)節(jié),是最常用的游戲優(yōu)化技術(shù)。它按照模型的位置和重要程度決定物體渲染的資源分配,降低非重要物體的面數(shù)和細(xì)節(jié)度,從而獲得高效率的渲染運(yùn)算。
28.兩種陰影判斷的方法、工作原理。
A.陰影由兩部分組成:本影與半影
a.本影:景物表面上那些沒有被光源直接照射的區(qū)域(全黑的輪廓分明的區(qū)域)
b.半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的區(qū)域(半明半暗區(qū)域)
求陰影區(qū)域的方法:做兩次消隱過程
一次對每個光源進(jìn)行消隱,求出對于光源而言不可見的區(qū)域L;
一次對視點(diǎn)的位置進(jìn)行消隱,求出對于視點(diǎn)而言可見的面S;
shadow area= L ∩ S B.陰影分為兩種:自身陰影和投射陰影
自身陰影:因物體自身的遮擋而使光線照射不到它上面的某些可見面
004km.cn
工作原理:利用背面剔除的方法求出,即假設(shè)視點(diǎn)在點(diǎn)光源的位置。
投射陰影:因不透明物體遮擋光線使得場景中位于該物體后面的物體或區(qū)域受不到光照照射而形成的陰影
工作原理:從光源處向物體的所有可見面投射光線,將這些面投影到場景中得到投影面,再將這些投影面與場景中的其他平面求交得出陰影多邊形,保存這些陰影多邊形信息,然后再按視點(diǎn)位置對場景進(jìn)行相應(yīng)處理得到所要求的視圖(利用空間換時間,每次只需依據(jù)視點(diǎn)位置進(jìn)行一次陰影計算即可,省去了一次消隱過程)若是動態(tài)光源此方法就無效了。
29.Vertex Shader是什么,怎么計算?
頂點(diǎn)著色器
頂點(diǎn)著色器是一段執(zhí)行在GPU上的程序,用來取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作頂點(diǎn)。
Vertex Shader對輸入頂點(diǎn)完成了從local space到homogeneous space(齊次空間)的變換過程,homogeneous space即projection space的下一個space。在這其間共有world transformation, view transformation和projection transformation及l(fā)ighting幾個過程。
30.MipMap是什么,作用?
004km.cn
MipMapping:在三維計算機(jī)圖形的貼圖渲染中有常用的技術(shù),為加快渲染進(jìn)度和減少圖像鋸齒,貼圖被處理成由一系列被預(yù)先計算和優(yōu)化過的圖片組成的文件,這樣的貼圖被稱為MipMap。
31.機(jī)試:二選一
1.用代碼實(shí)現(xiàn)第三角色控制器
2.實(shí)現(xiàn)吊機(jī)吊物體的功能
【吊機(jī)吊物體需要節(jié)點(diǎn)掛接和坐標(biāo)系轉(zhuǎn)換】
32.反向旋轉(zhuǎn)動畫的方法是什么?
【反轉(zhuǎn)動畫,講動畫的速度調(diào)到-1,碰撞時,被碰撞物體與碰撞物體有collider組件,碰撞物體有剛體組件,或角色碰撞得包含角色組件 OR 改變animation.speed】
33.碰撞檢測需要物體具備什么屬性?
能檢測碰撞發(fā)生的方式有兩種,一種是利用碰撞器,另一種則是利用觸發(fā)器
【Physics.OverlapSphere相交球檢測碰撞,碰撞檢測需要包圍盒】
34.獲取、增加、刪除組件的命令分別是什么?
004km.cn
獲?。篏etComponent 增加:AddComponent 刪除:Destroy 35.Animation.CrossFade命令作用是:(C)A.動畫放大
B.動畫轉(zhuǎn)換
C.動畫的淡入為其他動畫
36.Application.loadLevel命令為:(A)A加載關(guān)卡
B.異步加載關(guān)卡
C.加載動作
37.調(diào)試記錄到控制臺的命令是什么?
Debug.Log();39.編輯器類存放路徑是什么?
工程目錄下的Assets/Editor文件夾下。
40.使用原生GUI創(chuàng)建一個可以拖動的窗口命令是什么?
004km.cn
GUI.DragWindow();41.localPosition與Position的使用區(qū)別?
localPosition:自身位置,相對于父級的變換的位置。、Position:在世界坐標(biāo)transform的位置
42.寫一個計時器工具,從整點(diǎn)開始計時,格式為:00:00:00 43.寫出Animation的五個方法
AddClip 添加剪輯、Blend 混合、Play 播放、Stop 停止、Sample 采樣
44.怎么拿到一個對象上腳本的方法
GameObject.GetComponent<>();
004km.cn
45.請簡述向量的點(diǎn)乘,向量的叉乘以及向量歸一化的幾何意義?
點(diǎn)乘的幾何意義是:計算兩個向量之間的夾角,以及在某一方向上的投影;
叉乘的幾何意義是:創(chuàng)建垂直于平面,三角形,或者多邊形的向量;
46.Unity3D是否支持寫成多線程?如果支持的話要注意什么?
支持:如果同時你要處理很多事情或者與Unity的對象互動小可以用thread,否則使用coroutine.注意:C#中有l(wèi)ock這個關(guān)鍵字,以確保只有一個線程可以在特定時間內(nèi)訪問特定的對象
47.Unity3D中的協(xié)程(Coroutine)和C#線程之間的區(qū)別是什么?
Unity3d沒有多線程的概念,不過unity也給我們提供了StartCoroutine(協(xié)同程序)和LoadLevelAsync(異步加載關(guān)卡)后臺加載場景的方法。StartCoroutine為什么叫協(xié)同程序呢,所謂協(xié)同,就是當(dāng)你在StartCoroutine的函數(shù)體里處理一段代碼時,利用yield語句等待執(zhí)行結(jié)果,這期間不影響主程序的繼續(xù)執(zhí)行,可以協(xié)同工作。而LoadLevelAsync則允許你在后臺加載新資源和場景,所以再利用協(xié)同,你就可以前臺用loading條或動畫提示玩家游戲未卡死,同時后臺協(xié)同處理加載的事宜asynchronous[e??s??kr?n?s].synchronous同步
004km.cn
48.請簡述四元數(shù)的作用以及四元數(shù)相對于歐拉角的優(yōu)點(diǎn)
A.四元數(shù)一般定義如下:q=w+xi+yj+zk其中 w,x,y,z是實(shí)數(shù)。同時,有: i*i=-1 j*j=-1 k*k=-1 B.四元數(shù)也可以表示為: q=[w,v] 有多種方式可表示旋轉(zhuǎn),如 axis/angle、歐拉角(Euler angles)、矩陣(matrix)、四元組等。相對于其它方法,四元組有其本身的優(yōu)點(diǎn):
a.四元數(shù)不會有歐拉角存在的 gimbal lock 問題[萬向節(jié)死鎖] b.四元數(shù)由4個數(shù)組成,旋轉(zhuǎn)矩陣需要9個數(shù)
c.兩個四元數(shù)之間更容易插值
d.四元數(shù)、矩陣在多次運(yùn)算后會積攢誤差,需要分別對其做規(guī)范化(normalize)和正交化(orthogonalize),對四元數(shù)規(guī)范化更容易 e.與旋轉(zhuǎn)矩陣類似,兩個四元組相乘可表示兩次旋轉(zhuǎn)
49.請簡述OnBecameVisible及OnBecameInvisible的發(fā)生時機(jī),以及他們執(zhí)行的意義?
當(dāng)renderer(渲染器)在任何相機(jī)上都不可見時調(diào)用:OnBecameInvisible
004km.cn
當(dāng)renderer(渲染器)在任何相機(jī)上可見時調(diào)用:OnBecameVisible 50.動畫層(Animation Layers)的作用是什么?
動畫層作為一個具有層級動畫編輯概念的工具,可以用來制作和處理任何類型的動畫
51.請說出4種面向?qū)ο蟮脑O(shè)計原則,并分別簡述它們的含義。
1)單一職責(zé)原則(The Single Responsiblity Principle,簡稱SRP):一個類,最好只做一件事,只有一個引起它的變化.2)開放-封閉原則(The Open-Close Principle,簡稱OCP):對于擴(kuò)展是開放的,對于更改是封閉的
3)Liskov 替換原則(The Liskov Substitution Principle,簡稱LSP):子類必須能夠替換其基類
4)依賴倒置原則(The Dependency Inversion Pricinple,簡稱DIP):依賴于抽象
5)接口隔離原則(The Interface Segregation Principle,簡稱ISP):使用多個小的專門的接口,而不要使用一個大的總接口。
52.Material和Physic Material區(qū)別?
004km.cn
PhysicMaterial 物理材質(zhì):物理材質(zhì)描述,如何處理物體碰撞(摩擦,彈性)。
Material材質(zhì)(材質(zhì)類)為了獲得一個對象使用的材質(zhì),可以使用 Renderer.materia屬性:
53.法線貼圖、CG動畫
A.法線貼圖:是在原物體的凹凸表面的每個點(diǎn)上均作法線,通過RGB顏色通道來標(biāo)記法線的方向,你可以把它理解成與原凹凸表面平行的另一個不同的表面,但實(shí)際上它又只是一個光滑的平面。
B.CG動畫:原為Computer Graphics的英文縮寫。隨著以計算機(jī)為主要工具進(jìn)行視覺設(shè)計和生產(chǎn)的一系列相關(guān)產(chǎn)業(yè)的形成,國際上習(xí)慣將利用計算機(jī)技術(shù)進(jìn)行視覺設(shè)計和生產(chǎn)的領(lǐng)域通稱為CG。它既包括技術(shù)也包括藝術(shù),幾乎囊括了當(dāng)今電腦時代中所有的視覺藝術(shù)創(chuàng)作活動,如平面印刷品的設(shè)計、網(wǎng)頁設(shè)計、三維動畫、影視特效、多媒體技術(shù)、以計算機(jī)輔助設(shè)計為主的建筑設(shè)計及工業(yè)造型設(shè)計等。NGUI(NUGUI1、NGUI2)
54.如何銷毀一個UnityEngine.Object及其子類?
使用Destroy()方法;
55、請描述游戲動畫有哪幾種,以及其原理。
004km.cn
主要有關(guān)節(jié)動畫、單一網(wǎng)格模型動畫(關(guān)鍵幀動畫)、骨骼動畫。
a、關(guān)節(jié)動畫把角色分成若干獨(dú)立部分,一個部分對應(yīng)一個網(wǎng)格模型,部分的動畫連接成一個整體的動畫,角色比較靈活Quake2([kwe?k]vi.發(fā)抖,顫抖;)中使用了這種動畫;b、單一網(wǎng)絡(luò)模型動畫由一個完整的網(wǎng)格模型構(gòu)成,在動畫序列的關(guān)鍵幀里記錄各個頂點(diǎn)的原位置及其改變量,然后插值運(yùn)算實(shí)現(xiàn)動畫效果,角色動畫較真實(shí)。
c、骨骼動畫,廣泛應(yīng)用的動畫方式,集成了以上兩個方式的優(yōu)點(diǎn),骨骼按角色特點(diǎn)組成一定的層次結(jié)構(gòu),由關(guān)節(jié)相連,可做相對運(yùn)動,皮膚作為單一網(wǎng)格蒙在骨骼之外,決定角色的外觀。皮膚網(wǎng)格每一個頂點(diǎn)都會受到骨骼的影響,從而實(shí)現(xiàn)完美的動畫
56、下面哪種做法可以打開Unity的Asset Store Windows-> Asset Store
57、Mecanim系統(tǒng)中,Body Mask的作用是?
指定身體的某一部分是否參與渲染
58、以下哪種操作步驟可以打開Unity編輯器的Lightmapping視圖?
Windows--> Lightmapping
004km.cn
59、關(guān)于光照貼圖
A:使用光照貼圖比使用實(shí)時光源渲染要快
B:可以降低游戲內(nèi)存消耗
C、多個物體可以使用同一張光照貼圖
60、關(guān)于Vector3的API,以下說法正確的是?
Vector3.forward與Vector3(0,0,1)是一樣的意思;
61、什么是導(dǎo)航網(wǎng)格(NavMesh)?
一種用于實(shí)現(xiàn)自動尋路的網(wǎng)格
62、什么是局部坐標(biāo),什么是世界坐標(biāo)?
世界坐標(biāo)是不會變的,一直以世界坐標(biāo)軸的XYZ為標(biāo)準(zhǔn)。局部坐標(biāo)其實(shí)就是自身的坐標(biāo),會隨著物體的旋轉(zhuǎn)而變化的。
63、itween插件的作用是什么,itween作用于世界坐標(biāo)還是局部坐標(biāo),請列舉出3個其常用方法?
004km.cn
iTween是一個動畫庫,作者創(chuàng)建它的目的就是最小的投入實(shí)現(xiàn)最大的產(chǎn)出。讓你做開發(fā)更輕松,用它可以輕松實(shí)現(xiàn)各種動畫,晃動,旋轉(zhuǎn),移動,褪色,上色,控制音頻等等“
方法:
a、MoveTo 物體移動 ;
b、ColorTo:隨著時間改變對象的顏色組;
c、LookTo:隨時間旋轉(zhuǎn)物體讓其臉部朝向所提供的Vector3或Transform位置
64、請簡述NGUI中Panel和Anchor的作用
Anchor包含UIAnchor腳本。UIAnchor的功能是把對象錨定在屏幕的邊緣(左上,左中,左下,上,中,下,右上,右中,右下),或縮放物體使其匹配屏幕的尺寸Panel對象有UIPanel腳本,UIPanel是一個容器,它將包含所有UI小部件,并負(fù)責(zé)將所包含的部件組合優(yōu)化、承載,以減少繪制命令的調(diào)用。
65、Unity攝像機(jī)有幾種工作方式,分別是什么?
perspective透視攝像機(jī)和orthographic正交攝像機(jī)
66、LayerMask.NameToLayer()這個方法有什么作用?
004km.cn
LayerMask的使用是按位操作的,LayerMask.NameToLayer(“Players”)返回該Layer的編號。
67、請描述MeshRender中material和shader的區(qū)別?
Shader(著色器)實(shí)際上就是一小段程序,它負(fù)責(zé)將輸入的Mesh(網(wǎng)格)以指定的方式和輸入的貼圖或者顏色等組合作用,然后輸出。繪圖單元可以依據(jù)這個輸出來將圖像繪制到屏幕上。輸入的貼圖或者顏色等,加上對應(yīng)的Shader,以及對Shader的特定的參數(shù)設(shè)置,將這些內(nèi)容(Shader及輸入?yún)?shù))打包存儲在一起,得到的就是一個Material(材質(zhì))
Shader大體上可以分為兩類: 表面著色器(Surface Shader)、片段著色器(Fragment Shader)
68、什么是矢量圖
矢量圖:計算機(jī)中顯示的圖形一般可以分為兩大類——矢量圖和位圖。矢量圖使用直線和曲線來描述圖形,這些圖形的元素是一些點(diǎn)、線、矩形、多邊形、圓和弧線等等,它們都是通過數(shù)學(xué)公式計算獲得的。例如一幅花的矢量圖形實(shí)際上是由線段形成外框輪廓,由外框的顏色以及外框所封閉的顏色決定花顯示出的顏色。由于矢量圖形可通過公式計算獲得,所以
004km.cn
矢量圖形文件體積一般較小。矢量圖形最大的優(yōu)點(diǎn)是無論放大、縮小或旋轉(zhuǎn)等不會失真;最大的缺點(diǎn)是難以表現(xiàn)色。
69.上機(jī)題:用鼠標(biāo)實(shí)現(xiàn)在場景中拖動物體,用鼠標(biāo)滾輪實(shí)現(xiàn)縮放(用一個Cube即可)。
70、以下哪個函數(shù)在游戲進(jìn)入新場景后會被馬上調(diào)用?
MonoBehaviour.OnLevelWasLoaded 71、Unity3D方法執(zhí)行的順序:
1、Awake(),2、Start()(激活時的初始化代碼)
3、Update()【FixUpdate、LateUpdate】、4、OnGUI(渲染模塊)
5、然后是卸載模塊(TearDown),這里主要有兩個方法OnDisable()與OnDestroy()這里只列出了70個重要的知識點(diǎn),大家可以參照著去學(xué)習(xí),同時也不能忽略其他沒有羅列出來的知識,最好就是在項(xiàng)目中不斷的鍛煉自己,讓自己在各方面的能力都不斷的提升。
第三篇:Unity3D學(xué)習(xí)總結(jié)
高考完了,上大學(xué)(或者大專)這幾乎是現(xiàn)在大多數(shù)孩子的選擇,我就是一個上了一個大專,雖然說是學(xué)制三年制,但是在第三年上了兩個月之后學(xué)校就不講課了,大家都紛紛走出校門開始找適合自己的工作,但是當(dāng)我走出校門的時候,才發(fā)現(xiàn)我在大學(xué)期間幾乎是什么也沒學(xué)到,面試時一問三不知,找不到工作,此時才開始發(fā)現(xiàn)大學(xué)期間懶懶散散、早上起床起晚了不想去上課就不去了,和同學(xué)約好了出去玩也不去上課了,想在宿舍玩游戲就也不去上課了,不去上課,老師也不會多說什么,只會在他點(diǎn)名的時候叫到你的名字,如果你讓舍友幫你答到,你會發(fā)現(xiàn)什么事情也沒有,自此心里會愈發(fā)放松,課也是越曠越多,學(xué)習(xí)更是一點(diǎn)不懂,但是大學(xué)不學(xué)完全沒人管,導(dǎo)致畢業(yè)之后還不如上大學(xué)之前,上大學(xué)之前還會高中知識,上完大學(xué)之后連高中知識都不會了,于是不得不參加一個培訓(xùn)班,但你選擇一個培訓(xùn)班的時候你又會比較很多,怕培訓(xùn)不出來、怕學(xué)不好、怕培訓(xùn)了和沒培訓(xùn)一個樣子...總之你有很多顧慮。
我經(jīng)過思考之后加入了我Unity3D培訓(xùn)班(狗刨學(xué)習(xí)網(wǎng)),因?yàn)槲野l(fā)現(xiàn)現(xiàn)在手機(jī)游戲迅速崛起,占據(jù)了國內(nèi)很大的市場,因?yàn)槭謾C(jī)人人都有,人們在坐公交,坐地鐵,坐火車等交通工具時都會玩手機(jī),甚至有些人在走路時都會玩,我參加了Unity3D培訓(xùn)班之后才發(fā)現(xiàn),培訓(xùn)班遠(yuǎn)遠(yuǎn)比學(xué)校好多了,在這里你不會老師會問你那里不會,然后再教給你,不像學(xué)校老師就是為了拿工資給你上課,你不去,記你一個曠課也不會對你說什么,在這里還有大家可以討論問題。
早上九點(diǎn)開始上課期間也有一些休息時間,可是幾乎沒有人亂走動,都是坐在自己的位置依舊學(xué)習(xí),一直到晚上10點(diǎn)以后甚至到12點(diǎn)以后,大家都在拼命的學(xué)習(xí),因?yàn)榇蠹叶贾懒诉@是我們最后的機(jī)會,我們已經(jīng)可以說是一只腳踏出了懸崖,如果我們還不能好好學(xué)習(xí)的話我們就會掉下懸崖,萬劫不復(fù),所以大家都在拼命的學(xué)習(xí),只為了將來出人頭地,不至于像大學(xué)那樣上完以后碌碌無為。
所以我現(xiàn)在的心情總結(jié)就為自己琢磨的一句話“活著干,死了算,聽天由命非好漢,拼命努力向前看?!碑?dāng)然我也想起了我們初中語文老師說的一句比較有文化的話“人生能有幾回搏,此時不搏何時搏。”
第四篇:Unity3d面試題總結(jié)
本人總結(jié)的一些Unity3d高頻面試題目,希望可以幫助到大家。限于個人水平有限,只附上一些參考答案。
======================================= 數(shù)據(jù)結(jié)構(gòu)和算法很重要,圖形學(xué)也很重要!大的游戲公司很看重個人基礎(chǔ)、綜合能力; 小公司看你實(shí)際工作能力,看你的Demo。
高頻問答的問題: 一.什么是渲染管道?
是指在顯示器上為了顯示出圖像而經(jīng)過的一系列必要操作。渲染管道中的很多步驟,都要將幾何物體從一個坐標(biāo)系中變換到另一個坐標(biāo)系中去。主要步驟有:
本地坐標(biāo)->視圖坐標(biāo)->背面裁剪->光照->裁剪->投影->視圖變換->光柵化。
二.如何優(yōu)化內(nèi)存? 有很多種方式,例如 1.壓縮自帶類庫;
2.將暫時不用的以后還需要使用的物體隱藏起來而不是直接Destroy掉;
3.釋放AssetBundle占用的資源; 4.降低模型的片面數(shù),降低模型的骨骼數(shù)量,降低貼圖的大?。?5.使用光照貼圖,使用多層次細(xì)節(jié)(LOD),使用著色器(Shader),使用預(yù)設(shè)(Prefab)。
三、動態(tài)加載資源的方式?(有時候也問區(qū)別,具體請百度)1.Resources.Load();2.AssetBundle
四、什么是協(xié)同程序?
在主線程運(yùn)行時同時開啟另一段邏輯處理,來協(xié)助當(dāng)前程序的執(zhí)行。換句話說,開啟協(xié)程就是開啟一個線程。可以用來控制運(yùn)動、序列以及對象的行為。
五、你用過哪些插件?
(最好多熟悉幾個插件,問的時候好回答)====== 1.使用Unity3d實(shí)現(xiàn)2d游戲,有幾種方式? 1.使用本身的GUI;
2.把攝像機(jī)的Projection(投影)值調(diào)為Orthographic(正交投影),不考慮z軸;
3.使用2d插件,如:2DToolKit;
2.Unity3d中的碰撞器和觸發(fā)器的區(qū)別?
碰撞器有碰撞的效果,IsTrigger=false,可以調(diào)用OnCollisionEnter/Stay/Exit函數(shù);
觸發(fā)器沒有碰撞效果,IsTrigger=true,可以調(diào)用OnTriggerEnter/Stay/Exit函數(shù)。
3.物體發(fā)生碰撞的必要條件
兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體。
4.CharacterController和Rigidbody的區(qū)別?
CharacterController自帶膠囊碰撞器,里面包含有剛體的屬性; Rigidbody就是剛體,使物體帶有剛體的特征。
5.在物體發(fā)生碰撞的整個過程中,有幾個階段,分別列出對應(yīng)的函數(shù) 三個階段
1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit
6.Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來 rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函數(shù)中。7.什么叫做鏈條關(guān)節(jié)?
Hinge Joint,可以模擬兩個物體間用一根鏈條連接在一起的情況,能保持兩個物體在一個固定距離內(nèi)部相互移動而不產(chǎn)生作用力,但是達(dá)到固定距離后就會產(chǎn)生拉力。
8.物體自身旋轉(zhuǎn)使用的函數(shù)? Transform.Rotate()
9.物體圍繞某點(diǎn)旋轉(zhuǎn)使用的函數(shù)? Transform.RotateAround()
10.Unity3d提供了一個用于保存和讀取數(shù)據(jù)的類(PlayerPrefs),請列出保存和讀取整形數(shù)據(jù)的函數(shù) PlayerPrefs.SetInt()
11.Unity3d提供了幾種光源類型,分別是哪幾種? 四種。
平行光:Directional Light 聚光燈:Spot Light
12.Unity3d腳本從喚醒到銷毀有著一套比較完整的生命周期,請列出系統(tǒng)自帶的幾個重要的方法。
點(diǎn)光源:Point Light 區(qū)域光源:Area Light
PlayerPrefs.GetInt()Awake——>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>Reset——>OnDisable——>OnDestroy
13.物理更新一般放在哪個系統(tǒng)函數(shù)里?
FixedUpdate,每固定幀繪制時執(zhí)行一次,和Update不同的是FixedUpdate是渲染幀執(zhí)行,如果你的渲染效率低下的時候FixedUpdate調(diào)用次數(shù)就會跟著下降。FixedUpdate比較適用于物理引擎的計算,因?yàn)槭歉繋秩居嘘P(guān)。Update就比較適合做控制。
14.移動攝像機(jī)的動作放在哪個系統(tǒng)函數(shù)中,為什么放在這個函數(shù)中?
LateUpdate,在每幀執(zhí)行完畢調(diào)用,它是在所有Update結(jié)束后才調(diào),比較適合用于命令腳本的執(zhí)行。官網(wǎng)上例子是攝像機(jī)的跟隨,都是在所有Update操作完才跟進(jìn)攝像機(jī),不然就有可能出現(xiàn)攝像機(jī)已經(jīng)推進(jìn)了,但是視角里還未有角色的空幀出現(xiàn)。
15.當(dāng)游戲中需要頻繁創(chuàng)建一個物體時,我們需要怎樣做能夠節(jié)省內(nèi)存?
使用預(yù)制物體對象Prefab,然后復(fù)制創(chuàng)建。
16.在場景中放置多個Camera并同時處于活動狀態(tài)會發(fā)生什么? 游戲界面可以看到很多攝像機(jī)的混合。
17.請描述Prefab的作用,并描述如何在移動設(shè)備的環(huán)境下恰當(dāng)?shù)氖褂盟?/p>
Prefab在實(shí)例化的時候用到,主要用于經(jīng)常會用到的物體,屬性方便修改。
18.如何銷毀一個UnityEngine.Object及其子類? 使用Destroy()方法;
19.請簡述Unity3d下如何安全的在不同工程間遷移asset數(shù)據(jù),請列舉出三種方法?
1.可以把a(bǔ)ssets目錄和Library目錄一起遷移 2.導(dǎo)出包
3.用Unity帶的assets Server功能
20.請描述游戲動畫有哪幾種,以及其原理?
主要有關(guān)節(jié)動畫、骨骼動畫、單一網(wǎng)格模型動畫(關(guān)鍵幀動畫)。關(guān)節(jié)動畫:把角色分成若干獨(dú)立部分,一個部分對應(yīng)一個網(wǎng)格模型,部分的動畫連接成一個整體的動畫,角色比較靈活,Quake2中使用這種動畫;
骨骼動畫,廣泛應(yīng)用的動畫方式,集成了以上兩個方式的優(yōu)點(diǎn),骨骼按角色特點(diǎn)組成一定的層次結(jié)構(gòu),有關(guān)節(jié)相連,可做相對運(yùn)動,皮膚作為單一網(wǎng)格蒙在骨骼之外,決定角色的外觀;
單一網(wǎng)格模型動畫由一個完整的網(wǎng)格模型構(gòu)成,在動畫序列的關(guān)鍵幀里記錄各個頂點(diǎn)的原位置及其改變量,然后插值運(yùn)算實(shí)現(xiàn)動畫效果,角色動畫較真實(shí)。
21.請描述為什么Unity3d中會發(fā)生在組件上出現(xiàn)數(shù)據(jù)丟失的情況 一般是組件上綁定的物體對象被刪除了
22.alpha blend工作原理
Alpha Blend 實(shí)現(xiàn)透明效果,不過只能針對某塊區(qū)域進(jìn)行alpha操作,透明度可設(shè)。
23.寫出光照計算中的diffuse的計算公式
diffuse = Kd x colorLight x max(N*L,0);Kd 漫反射系數(shù)、colorLight 光的顏色、N 單位法線向量、L 由點(diǎn)指向光源的單位向量、其中N與L點(diǎn)乘,如果結(jié)果小于等于0,則漫反射為0。
24.Lod是什么,優(yōu)缺點(diǎn)是什么?
LOD(Level of detail)多層次細(xì)節(jié),是最常用的游戲優(yōu)化技術(shù)。它按照模型的位置和重要程度決定物體渲染的資源分配,降低非重要物體的面數(shù)和細(xì)節(jié)度,從而獲得高效率的渲染運(yùn)算。
25.兩種陰影判斷的方法、工作原理。
26.Vertex Shader是什么,怎么計算? 頂點(diǎn)著色器
27.MipMap是什么,作用?
MipMapping:在三維計算機(jī)圖形的貼圖渲染中有常用的技術(shù),為加快渲染進(jìn)度和減少圖像鋸齒,貼圖被處理成由一系列被預(yù)先計算和優(yōu)化過的圖片組成的文件,這樣的貼圖被稱為MipMap。
28.機(jī)試:二選一
1.用代碼實(shí)現(xiàn)第三角色控制器 2.實(shí)現(xiàn)吊機(jī)吊物體的功能
29.反向旋轉(zhuǎn)動畫的方法是什么?
30.碰撞檢測需要物體具備什么屬性?
31.獲取、增加、刪除組件的命令分別是什么? 獲?。篏etComponent 增加:AddComponent 刪除:Destroy
32.Animation.CrossFade命令作用是:(C)A.動畫放大 B.動畫轉(zhuǎn)換 C.動畫的淡入為其他動畫
33.Application.loadLevel命令為:(A)A.加載關(guān)卡 B.異步加載關(guān)卡 C.加載動作
34.調(diào)試記錄到控制臺的命令是什么? Debug.Log();
35.編輯器類存放路徑是什么?
工程目錄下的Assets/Editor文件夾下。
36.使用原生GUI創(chuàng)建一個可以拖動的窗口命令是什么? GUI.DragWindow();
37.localPosition與Position的使用區(qū)別?
localPosition:自身位置,相對于父級的變換的位置。Position:在世界坐標(biāo)transform的位置
38.意義連線 Mathf.Round Mathf.Clamp Mathf.Lerp
插值 四舍五入 限制
39.寫一個計時器工具,從整點(diǎn)開始計時,格式為:00:00:00
40.寫出Animation的五個方法
41.怎么拿到一個對象上腳本的方法 GameObject.GetComponent<>();
42.上機(jī)題:用鼠標(biāo)實(shí)現(xiàn)在場景中拖動物體,用鼠標(biāo)滾輪實(shí)現(xiàn)縮放(用一個Cube即可)。
43.請簡述向量的點(diǎn)乘,向量的叉乘以及向量歸一化的幾何意義? 點(diǎn)乘的幾何意義是:計算兩個向量之間的夾角,以及在某一方向上的投影;
叉乘的幾何意義是:創(chuàng)建垂直于平面,三角形,或者多邊形的向量;
參
考
:http://blog.sina.com.cn/s/blog_9283b6f601017hfw.html
第五篇:Unity3D【飛機(jī)大戰(zhàn)項(xiàng)目總結(jié)】
Unity3D——飛機(jī)大戰(zhàn)項(xiàng)目總結(jié)
學(xué)飛機(jī)大戰(zhàn)好幾天了,今天就總結(jié)一下飛機(jī)大戰(zhàn)所學(xué)的知識,所遇到的困難,還有常出現(xiàn)在錯誤。
一:資源包的導(dǎo)入,場景的搭建步驟不在闡述在這包的導(dǎo)入和創(chuàng)建新文件夾在回顧一下Scences存放場景視圖,Scripts存放腳本,Resources存放資源包,資源包下有Textures存放圖片,Materials存放材質(zhì),Audios存放聲音,Madels存放模型。
二:腳本的建立
(1)玩家的飛機(jī)的前后左右的移動代碼如下:
float x = Input.GetAxis(“Horizontal”);//左右移動 float z = Input.GetAxis(“Vertical”);//前后移動 transform.Translate(-x,0,-z);(2)子彈的不停發(fā)射我們采用了鼠標(biāo)事件用if判斷代碼如下:
if(Input.GetMouseButtonDown(0)||Input.GetKey(KeyCode.Space))//鼠標(biāo)左鍵或空格發(fā)射子彈
(3)子彈的個數(shù)我們用克隆的方法代碼如下:
GameObject u=GameObject.Instantiate(yushe,transform.position,Quaternion.identity)as GameObject;//Instantiate有三個參數(shù)一個是所克隆的對象,第二個是所克隆的位置,第三個是位置。
(4)在克隆出子彈時,子彈是靜止不動的,我們在給它加個力,有于我這個腳本是掛在子彈預(yù)設(shè)體上的代碼如下:
u.rigidbody.AddForce(0,0,-8000);//有三個參數(shù),一個是X軸的力,一個是Y軸的力,一個是Z軸的力。
(5)敵機(jī)的飛行就按傻瓜的來所代碼如下:
transform.Translate(new Vector3(0,0,-1));//有三個參數(shù),一個是X軸的飛行,一個是Y軸的飛行,一個是Z軸的飛行。
(6)敵機(jī)的子彈發(fā)射也是傻瓜類型代碼如下: float rocketTime=1;//給敵機(jī)所發(fā)射的時間
rocketTime-= Time.deltaTime;//時間遞減 if(rocketTime<=0){//如果時間小于零為真 rocketTime=1;GameObject
aa=GameObject.Instantiate(EnPeoRo2,transform.position,Quaternion.identity)as GameObject;aa.rigidbody.AddForce(0,0,8000);//給敵機(jī)子彈加力
(7)子彈的銷毀,腳本添加給玩家子彈的預(yù)設(shè)體上代碼如下:
Destroy(this.gameObject,2);//倆個參數(shù)一個是銷毀目標(biāo),而是幾秒后所消失
(8)敵機(jī)子彈的消失,腳本添加給敵機(jī)腳本代碼如下:
Destroy(this.gameObject,2);(9)玩家子彈打到敵機(jī)時,敵機(jī)消失代碼如下 void OnTriggerEnter(Collider aa){//添加觸發(fā)器
if(aa.tag==“PlayRocket”){//如果玩家的子彈碰到標(biāo)簽為PlayRocket則為真 //Debug.Log(collision.gameObject.name);
Destroy(this.gameObject);//銷毀目標(biāo)
}else if(transform.transform.position.z>=227){//當(dāng)敵機(jī)飛出電腦屏幕敵機(jī)自動 } } Destroy(this.gameObject);銷毀
(10)當(dāng)敵機(jī)子彈打到玩家飛機(jī)時則玩家飛機(jī)生命減少,若干次銷毀代碼如下;void OnTriggerEnter(Collider aa){
}
if(aa.tag==“EnenmyRocket”){//打到一次
} i--;//生命建少一次 if(i==0){//當(dāng)減為零時為真 Destroy(this.gameObject);}//銷毀目標(biāo)
具體代碼如下:
玩家飛機(jī)代碼public class PlayerPlan : MonoBehaviour {
public GameObject yushe;int i=2;// Use this for initialization void Start(){ }
// Update is called once per frame void Update(){
float x = Input.GetAxis(“Horizontal”);float z = Input.GetAxis(“Vertical”);transform.Translate(-x,0,-z);if(Input.GetMouseButtonDown(0)||Input.GetKey(KeyCode.Space)){ GameObject
u=GameObject.Instantiate(yushe,transform.position,Quaternion.identity)as GameObject;
} void OnTriggerEnter(Collider aa){
}
if(aa.tag==“EnenmyRocket”){
} i--;if(i==0){ Destroy(this.gameObject);} } u.rigidbody.AddForce(0,0,-8000);}
玩家子彈代碼如下: using UnityEngine;using System.Collections;
public class PlayRicket : MonoBehaviour {
} 敵機(jī)子彈代碼: using UnityEngine;using System.Collections;
public class EnProRock2 : MonoBehaviour {
public GameObject EnPeoRo2;float rocketTime=1;// Use this for initialization void Start(){ }
// Update is called once per frame void Update(){
} //this.gameObject.rigidbody.AddForce(Vector3.back);Destroy(this.gameObject,2);// Use this for initialization void Start(){ }
// Update is called once per frame void Update(){
rocketTime-= Time.deltaTime;if(rocketTime<=0){ rocketTime=1;GameObject
aa=GameObject.Instantiate(EnPeoRo2,transform.position,Quaternion.identity)as GameObject;
} } aa.rigidbody.AddForce(0,0,8000);} 敵機(jī)代碼如下: using UnityEngine;using System.Collections;
public class EnenmyPeople2 : MonoBehaviour {
}
if(aa.tag==“PlayRocket”){
} } // Use this for initialization void Start(){ }
// Update is called once per frame void Update(){ } void OnTriggerEnter(Collider aa){ transform.Translate(new Vector3(0,0,-1));//Debug.Log(collision.gameObject.name);
Destroy(this.gameObject);}else if(transform.transform.position.z>=227){ Destroy(this.gameObject);//想了解更多到狗刨學(xué)習(xí)網(wǎng)