Unity3D面试ABC
Unity3D面試ABC
楊航最近在學(xué)Unity3D
最先執(zhí)行的方法是:
1、(激活時(shí)的初始化代碼)Awake,2、Start、3、Update【FixUpdate、LateUpdate】、4、(渲染模塊)OnGUI、5、再向后,就是卸載模塊(TearDown),這里主要有兩個(gè)方法OnDisable與OnDestroy
?
高頻問答的問題:
1.什么是渲染管道?
是指在顯示器上為了顯示出圖像而經(jīng)過的一系列必要操作。
渲染管道中的很多步驟,都要將幾何物體從一個(gè)坐標(biāo)系中變換到另一個(gè)坐標(biāo)系中去。
主要步驟有:
本地坐標(biāo)->視圖坐標(biāo)->背面裁剪->光照->裁剪->投影->視圖變換->光柵化。
2.如何優(yōu)化內(nèi)存?
有很多種方式,例如
A、壓縮自帶類庫;
B、將暫時(shí)不用的以后還需要使用的物體隱藏起來而不是直接Destroy掉;
C、釋放AssetBundle占用的資源;AssetBundle資源包
D、降低模型的片面數(shù),降低模型的骨骼數(shù)量,降低貼圖的大小;
E、使用光照貼圖,使用多層次細(xì)節(jié)(LOD),使用著色器(Shader),使用預(yù)設(shè)(Prefab)。
3.動(dòng)態(tài)加載資源的方式?(有時(shí)候也問區(qū)別,具體請(qǐng)百度)
1.通過Resources模塊,調(diào)用它的load函數(shù):可以直接load并返回某個(gè)類型的Object,前提是要把這個(gè)資源放在Resource命名的文件夾下,Unity不關(guān)有沒有場(chǎng)景引用,都會(huì)將其全部打入到安裝包中。Resources.Load();
2.通過bundle的形式:即將資源打成?asset?bundle?放在服務(wù)器或本地磁盤,然后使用WWW模塊get?下來,然后從這個(gè)bundle中l(wèi)oad某個(gè)object。AssetBundle
3.通過AssetDatabase.loadasset?:這種方式只在editor范圍內(nèi)有效,游戲運(yùn)行時(shí)沒有這個(gè)函數(shù),它通常是在開發(fā)中調(diào)試用的【AssetDatabase?資源數(shù)據(jù)庫】
區(qū)別:Resources的方式需要把所有資源全部打入安裝包,這對(duì)游戲的分包發(fā)布(微端)和版本升級(jí)(patch)是不利的,所以u(píng)nity推薦的方式是不用它,都用bundle的方式替代,把資源達(dá)成幾個(gè)小的bundle,用哪個(gè)就load哪個(gè),這樣還能分包發(fā)布和patch,但是在開發(fā)過程中,不可能沒更新一個(gè)資源就打一次bundle,所以editor環(huán)境下可以使用AssetDatabase來模擬,這通常需要我們封裝一個(gè)dynamic?resource的loader模塊,在不同的環(huán)境下做不同實(shí)現(xiàn)。
動(dòng)態(tài)資源的存放
??有時(shí)我需要存放一些自己的文件在磁盤上,例如我想把幾個(gè)bundle放在初始的安裝里,?unity有一個(gè)streaming?asset的概念,用于提供存儲(chǔ)接口的訪問。我們需要在編輯器建立一個(gè)StreamingAssets名字的文件夾,把需要我們放在客戶磁盤上的動(dòng)態(tài)文件放在這個(gè)文件夾下面,這樣安裝后,這些文件會(huì)放在用戶磁盤的指定位置,這個(gè)位置可以通過Application.streamingAssetsPath來得到。
?
4.什么是協(xié)同程序?
在主線程運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來協(xié)助當(dāng)前程序的執(zhí)行。換句話說,開啟協(xié)程就是開啟一個(gè)線程。可以用來控制運(yùn)動(dòng)、序列以及對(duì)象的行為。
5.你用過哪些插件?
一?界面制作?推薦:NGUI
二?2D游戲制作?推薦:2D?Toolkit???//[?tu:lk?t]?工具包,工具箱
三?可視化編程?推薦:PlayMaker
四?插值插件?推薦:iTween,HOTween
五?路徑搜尋?推薦:Simple?Path
六?美術(shù)及動(dòng)畫制作?推薦:RageSpline,Smooth?Moves
七?畫面增強(qiáng)????推薦:Bitmap2Material,Strumpy?Shader?Editor
八?攝像機(jī)管理??推薦:Security?Camera
九?資源包??推薦:Nature?Pack?
十、造路插件EasyRoads3D
6.使用unity3d實(shí)現(xiàn)2d游戲,有幾種方式?
1.使用本身的GUI;
2.把攝像機(jī)的Projection(投影)值調(diào)為Orthographic(正交投影),不考慮z軸;
//[??:θ?'ɡr?f?k]?adj.?正字法的,拼字正確的;正射
3.使用2d插件,如:2DToolKit;
?
7.unity3d中的碰撞器和觸發(fā)器的區(qū)別?
觸發(fā)器只是碰撞器身上的一個(gè)屬性,碰撞器是觸發(fā)器的載體。
碰撞器有碰撞的效果,IsTrigger=false,可以調(diào)用OnCollisionEnter/Stay/Exit函數(shù);
{[k??l??n]n.?碰撞;沖突;(意見,看法)的抵觸;(政黨等的)傾軋}
觸發(fā)器沒有碰撞效果,IsTrigger=true,可以調(diào)用OnTriggerEnter/Stay/Exit函數(shù)。
a.如果不想讓碰撞檢測(cè)影響物體移動(dòng)但是又想檢測(cè)到碰撞這時(shí)用到觸發(fā)器(Trigger)
b.觸發(fā)器用來檢測(cè)一個(gè)物件是否經(jīng)過空間中的某個(gè)區(qū)域?
8.物體發(fā)生碰撞的必要條件
兩個(gè)物體都必須帶有碰撞器(Collider),其中一個(gè)物體還必須帶有Rigidbody剛體。
?
8.1?.CharacterController和Rigidbody的區(qū)別?
CharacterController自帶膠囊碰撞器,里面包含有剛體的屬性;
Rigidbody就是剛體,使物體帶有剛體的特征。
[CharacterController:角色控制器]
Rigidbody具有完全真實(shí)物理的特性,而CharacterController可以說是受限的Rigidbody,具有一定的物理效果但不是完全真實(shí)的
?
9.在物體發(fā)生碰撞的整個(gè)過程中,有幾個(gè)階段,分別列出對(duì)應(yīng)的函數(shù)
三個(gè)階段
1.OnCollisionEnter(進(jìn)入碰撞)?2.OnCollisionStay?(逗留碰撞)?3.OnCollisionExit(當(dāng)退出碰撞)?
?
10.Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來
rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函數(shù)中。
?
11.什么叫做鏈條關(guān)節(jié)?
Hinge?Joint,可以模擬兩個(gè)物體間用一根鏈條連接在一起的情況,能保持兩個(gè)物體在一個(gè)固定距離內(nèi)部相互移動(dòng)而不產(chǎn)生作用力,但是達(dá)到固定距離后就會(huì)產(chǎn)生拉力。
{?[h?nd?]?n.?鉸鏈,折葉;關(guān)鍵,轉(zhuǎn)折點(diǎn);樞要,中樞}
12.物體自身旋轉(zhuǎn)使用的函數(shù)?
Transform.Rotate()
?
13.物體圍繞某點(diǎn)旋轉(zhuǎn)使用的函數(shù)?
Transform.RotateAround()
?
14.Unity3d提供了一個(gè)用于保存和讀取數(shù)據(jù)的類(PlayerPrefs),請(qǐng)列出保存和讀取整形數(shù)據(jù)的函數(shù)
PlayerPrefs.SetInt() PlayerPrefs.GetInt()
?
15.Unity3d提供了幾種光源類型,分別是哪幾種?
四種。
平行光:Directional?Light 點(diǎn)光源:Point?Light
聚光燈:Spot?Light 區(qū)域光源:Area?Light
16.Unity3d腳本從喚醒到銷毀有著一套比較完整的生命周期,請(qǐng)列出系統(tǒng)自帶的幾個(gè)重要的方法。
Awake—>Start—>Update—>FixedUpdate—>LateUpdate—>OnGUI—>Reset—>OnDisable—>OnDestroy
?
17.物理更新一般放在哪個(gè)系統(tǒng)函數(shù)里?
FixedUpdate,每固定幀繪制時(shí)執(zhí)行一次,和Update不同的是FixedUpdate是渲染幀執(zhí)行,如果你的渲染效率低下的時(shí)候FixedUpdate調(diào)用次數(shù)就會(huì)跟著下降。FixedUpdate比較適用于物理引擎的計(jì)算,因?yàn)槭歉繋秩居嘘P(guān)。Update就比較適合做控制。
?
18.移動(dòng)攝像機(jī)的動(dòng)作放在哪個(gè)系統(tǒng)函數(shù)中,為什么放在這個(gè)函數(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)建一個(gè)物體時(shí),我們需要怎樣做能夠節(jié)省內(nèi)存?
使用預(yù)制物體對(duì)象Prefab,然后復(fù)制創(chuàng)建。
?
20.在場(chǎng)景中放置多個(gè)Camera并同時(shí)處于活動(dòng)狀態(tài)會(huì)發(fā)生什么?
游戲界面可以看到很多攝像機(jī)的混合。
?
21.請(qǐng)描述Prefab的作用,并描述如何在移動(dòng)設(shè)備的環(huán)境下恰當(dāng)?shù)氖褂盟?#xff1f;
Prefab在實(shí)例化的時(shí)候用到,主要用于經(jīng)常會(huì)用到的物體,屬性方便修改。
如何銷毀一個(gè)UnityEngine.Object及其子類?
使用Destroy()方法;
22.請(qǐng)簡(jiǎn)述Unity3d下如何安全的在不同工程間遷移asset數(shù)據(jù),請(qǐng)列舉出三種方法?
1.可以把a(bǔ)ssets目錄和Library目錄一起遷移
2.導(dǎo)出包
3.用Unity帶的assets?Server功能?
23.請(qǐng)描述游戲動(dòng)畫有哪幾種,以及其原理?
主要有關(guān)節(jié)動(dòng)畫、骨骼動(dòng)畫、單一網(wǎng)格模型動(dòng)畫(關(guān)鍵幀動(dòng)畫)。
a.關(guān)節(jié)動(dòng)畫:把角色分成若干獨(dú)立部分,一個(gè)部分對(duì)應(yīng)一個(gè)網(wǎng)格模型,部分的動(dòng)畫連接成一?個(gè)整體的動(dòng)畫,角色比較靈活,Quake2中使用這種動(dòng)畫;
b.骨骼動(dòng)畫,廣泛應(yīng)用的動(dòng)畫方式,集成了以上兩個(gè)方式的優(yōu)點(diǎn),骨骼按角色特點(diǎn)組成一定的層次結(jié)構(gòu),有關(guān)節(jié)相連,可做相對(duì)運(yùn)動(dòng),皮膚作為單一網(wǎng)格蒙在骨骼之外,決定角色的外觀;
c.單一網(wǎng)格模型動(dòng)畫由一個(gè)完整的網(wǎng)格模型構(gòu)成,在動(dòng)畫序列的關(guān)鍵幀里記錄各個(gè)頂點(diǎn)的原位置及其改變量,然后插值運(yùn)算實(shí)現(xiàn)動(dòng)畫效果,角色動(dòng)畫較真實(shí)。
?
24.請(qǐng)描述為什么Unity3d中會(huì)發(fā)生在組件上出現(xiàn)數(shù)據(jù)丟失的情況
一般是組件上綁定的物體對(duì)象被刪除了
?
25.alpha?blend工作原理
Alpha?Blend?實(shí)現(xiàn)透明效果,不過只能針對(duì)某塊區(qū)域進(jìn)行alpha操作,透明度可設(shè)。
{['?lf?]?透明(度);?[blend]?混合;把…摻在一起}
26.寫出光照計(jì)算中的diffuse的計(jì)算公式
計(jì)算公式為:?Idiffuse?=?Dintensity*Dcolor*N.L?;?(Dintensity表示漫反射強(qiáng)度,?Dcolor?表示漫反射光顏色,?N?為該點(diǎn)的法向量,?L?為光源向量?其中N與L點(diǎn)乘,如果結(jié)果小于等于0,則漫反射為0。){[d?'fju:z]?vi.?傳播;四散|intensity[?n'tens?t?]?n.?強(qiáng)烈;(感情的)強(qiáng)烈程度;強(qiáng)度;烈度}
?
27.Lod是什么,優(yōu)缺點(diǎn)是什么?
LOD(Level?of?detail)多層次細(xì)節(jié),是最常用的游戲優(yōu)化技術(shù)。它按照模型的位置和重要程度決定物體渲染的資源分配,降低非重要物體的面數(shù)和細(xì)節(jié)度,從而獲得高效率的渲染運(yùn)算。
?
28.兩種陰影判斷的方法、工作原理。
A.陰影由兩部分組成:本影與半影
a.本影:景物表面上那些沒有被光源直接照射的區(qū)域(全黑的輪廓分明的區(qū)域)
b.半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的區(qū)域(半明半暗區(qū)域)
求陰影區(qū)域的方法:做兩次消隱過程
一次對(duì)每個(gè)光源進(jìn)行消隱,求出對(duì)于光源而言不可見的區(qū)域L;
一次對(duì)視點(diǎn)的位置進(jìn)行消隱,求出對(duì)于視點(diǎn)而言可見的面S;
shadow?area=?L?∩?S
B.陰影分為兩種:自身陰影和投射陰影
自身陰影:因物體自身的遮擋而使光線照射不到它上面的某些可見面
工作原理:利用背面剔除的方法求出,即假設(shè)視點(diǎn)在點(diǎn)光源的位置。
投射陰影:因不透明物體遮擋光線使得場(chǎng)景中位于該物體后面的物體或區(qū)域受不到光照照射而形成的陰影
工作原理:從光源處向物體的所有可見面投射光線,將這些面投影到場(chǎng)景中得到投影面,再將這些投影面與場(chǎng)景中的其他平面求交得出陰影多邊形,保存這些陰影多邊形信息,然后再按視點(diǎn)位置對(duì)場(chǎng)景進(jìn)行相應(yīng)處理得到所要求的視圖(利用空間換時(shí)間,每次只需依據(jù)視點(diǎn)位置進(jìn)行一次陰影計(jì)算即可,省去了一次消隱過程)
若是動(dòng)態(tài)光源此方法就無效了。
29.Vertex?Shader是什么,怎么計(jì)算?
頂點(diǎn)著色器
頂點(diǎn)著色器是一段執(zhí)行在GPU上的程序,用來取代fixed?pipeline中的transformation和lighting,Vertex?Shader主要操作頂點(diǎn)。
Vertex?Shader對(duì)輸入頂點(diǎn)完成了從local?space到homogeneous?space(齊次空間)的變換過程,homogeneous?space即projection?space的下一個(gè)space。在這其間共有world?transformation,?view?transformation和projection?transformation及l(fā)ighting幾個(gè)過程。
?
30.MipMap是什么,作用?
MipMapping:在三維計(jì)算機(jī)圖形的貼圖渲染中有常用的技術(shù),為加快渲染進(jìn)度和減少圖像鋸齒,貼圖被處理成由一系列被預(yù)先計(jì)算和優(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)動(dòng)畫的方法是什么?
【反轉(zhuǎn)動(dòng)畫,講動(dòng)畫的速度調(diào)到-1,碰撞時(shí),被碰撞物體與碰撞物體有collider組件,碰撞物體有剛體組件,或角色碰撞得包含角色組件?OR?改變animation.speed】
?
33.碰撞檢測(cè)需要物體具備什么屬性?
能檢測(cè)碰撞發(fā)生的方式有兩種,一種是利用碰撞器,另一種則是利用觸發(fā)器
【Physics.OverlapSphere相交球檢測(cè)碰撞,碰撞檢測(cè)需要包圍盒】
?
34.獲取、增加、刪除組件的命令分別是什么?
獲取:GetComponent?增加:AddComponent??刪除:Destroy
?
35.Animation.CrossFade命令作用是:(C)??{Fadevi.?褪去,失去光澤;}
A.動(dòng)畫放大 B.動(dòng)畫轉(zhuǎn)換 C.動(dòng)畫的淡入為其他動(dòng)畫
?
36.Application.loadLevel命令為:(A)
A加載關(guān)卡 B.異步加載關(guān)卡 C.加載動(dòng)作
?
37.調(diào)試記錄到控制臺(tái)的命令是什么?
Debug.Log();
?
39.編輯器類存放路徑是什么?
工程目錄下的Assets/Editor文件夾下。
?
40.使用原生GUI創(chuàng)建一個(gè)可以拖動(dòng)的窗口命令是什么?
GUI.DragWindow();
?
41.localPosition與Position的使用區(qū)別?
localPosition:自身位置,相對(duì)于父級(jí)的變換的位置。
Position:在世界坐標(biāo)transform的位置
?
意義連線
Mathf.Round 插值
Mathf.Clamp 四舍五入
Mathf.Lerp 限制
?
42.寫一個(gè)計(jì)時(shí)器工具,從整點(diǎn)開始計(jì)時(shí),格式為:00:00:00
?
43.寫出Animation的五個(gè)方法
AddClip?添加剪輯、Blend?混合、Play?播放、Stop?停止、Sample?采樣
?
44.怎么拿到一個(gè)對(duì)象上腳本的方法
GameObject.GetComponent<>();
?
上機(jī)題:用鼠標(biāo)實(shí)現(xiàn)在場(chǎng)景中拖動(dòng)物體,用鼠標(biāo)滾輪實(shí)現(xiàn)縮放(用一個(gè)Cube即可)。
?
45.請(qǐng)簡(jiǎn)述向量的點(diǎn)乘,向量的叉乘以及向量歸一化的幾何意義?
點(diǎn)乘的幾何意義是:計(jì)算兩個(gè)向量之間的夾角,以及在某一方向上的投影;
叉乘的幾何意義是:創(chuàng)建垂直于平面,三角形,或者多邊形的向量;?
?
46..Unity3D是否支持寫成多線程?如果支持的話要注意什么?
支持:如果同時(shí)你要處理很多事情或者與Unity的對(duì)象互動(dòng)小可以用thread,否則使用coroutine.{?[k?ru:'ti:n]?n.?協(xié)同程序}
注意:C#中有l(wèi)ock這個(gè)關(guān)鍵字,以確保只有一個(gè)線程可以在特定時(shí)間內(nèi)訪問特定的對(duì)象
?
?
47.Unity3D中的協(xié)程(Coroutine)和C#線程之間的區(qū)別是什么?
Unity3d沒有多線程的概念,不過unity也給我們提供了StartCoroutine(協(xié)同程序)和LoadLevelAsync(異步加載關(guān)卡)后臺(tái)加載場(chǎng)景的方法。?StartCoroutine為什么叫協(xié)同程序呢,所謂協(xié)同,就是當(dāng)你在StartCoroutine的函數(shù)體里處理一段代碼時(shí),利用yield語句等待執(zhí)行結(jié)果,這期間不影響主程序的繼續(xù)執(zhí)行,可以協(xié)同工作。而LoadLevelAsync則允許你在后臺(tái)加載新資源和場(chǎng)景,所以再利用協(xié)同,你就可以前臺(tái)用loading條或動(dòng)畫提示玩家游戲未卡死,同時(shí)后臺(tái)協(xié)同處理加載的事宜asynchronous[e??s??kr?n?s].synchronous同步
48.請(qǐng)簡(jiǎn)述四元數(shù)的作用以及四元數(shù)相對(duì)于歐拉角的優(yōu)點(diǎn)
A.四元數(shù)一般定義如下:q=w+xi+yj+zk其中?w,x,y,z是實(shí)數(shù)。同時(shí),有:?i*i=-1????j*j=-1????k*k=-1
B.四元數(shù)也可以表示為:?q=[w,v]
有多種方式可表示旋轉(zhuǎn),如?axis/angle、歐拉角(Euler?angles)、矩陣(matrix)、四元組等。?相對(duì)于其它方法,四元組有其本身的優(yōu)點(diǎn):
a.四元數(shù)不會(huì)有歐拉角存在的?gimbal?lock?問題[萬向節(jié)死鎖]
b.四元數(shù)由4個(gè)數(shù)組成,旋轉(zhuǎn)矩陣需要9個(gè)數(shù)
c.兩個(gè)四元數(shù)之間更容易插值
d.四元數(shù)、矩陣在多次運(yùn)算后會(huì)積攢誤差,需要分別對(duì)其做規(guī)范化(normalize)和正交化?(orthogonalize),對(duì)四元數(shù)規(guī)范化更容易
e.與旋轉(zhuǎn)矩陣類似,兩個(gè)四元組相乘可表示兩次旋轉(zhuǎn)
49.請(qǐng)簡(jiǎn)述OnBecameVisible及OnBecameInvisible的發(fā)生時(shí)機(jī),以及他們執(zhí)行的意義?
當(dāng)renderer(渲染器)在任何相機(jī)上都不可見時(shí)調(diào)用:OnBecameInvisible?
當(dāng)renderer(渲染器)在任何相機(jī)上可見時(shí)調(diào)用:OnBecameVisible
50.動(dòng)畫層(Animation?Layers)的作用是什么?
動(dòng)畫層作為一個(gè)具有層級(jí)動(dòng)畫編輯概念的工具,可以用來制作和處理任何類型的動(dòng)畫
51.
52.請(qǐng)說出4種面向?qū)ο蟮脑O(shè)計(jì)原則,并分別簡(jiǎn)述它們的含義。
1)?單一職責(zé)原則?(The?Single?Responsiblity?Principle,簡(jiǎn)稱SRP):一個(gè)類,最好只做一件事,只有一個(gè)引起它的變化.
2)?開放-封閉原則?(The?Open-Close?Principle,簡(jiǎn)稱OCP):對(duì)于擴(kuò)展是開放的,對(duì)于更改是封閉的
3)?Liskov?替換原則(The?Liskov?Substitution?Principle,簡(jiǎn)稱LSP):子類必須能夠替換其基類
4)?依賴倒置原則(The?Dependency?Inversion?Pricinple,簡(jiǎn)稱DIP):依賴于抽象
5)?接口隔離原則?(The?Interface?Segregation?Principle,簡(jiǎn)稱ISP):使用多個(gè)小的專門的接口,而不要使用一個(gè)大的總接口。
53.Material和Physic?Material區(qū)別?
PhysicMaterial?物理材質(zhì):物理材質(zhì)描述,如何處理物體碰撞(摩擦,彈性)。
Material材質(zhì)(材質(zhì)類)為了獲得一個(gè)對(duì)象使用的材質(zhì),可以使用?Renderer.materia屬性:
54.法線貼圖?、CG動(dòng)畫
A.法線貼圖:是在原物體的凹凸表面的每個(gè)點(diǎn)上均作法線,通過RGB顏色通道來標(biāo)記法線的方向,你可以把它理解成與原凹凸表面平行的另一個(gè)不同的表面,但實(shí)際上它又只是一個(gè)光滑的平面。?
B.CG動(dòng)畫:原為Computer?Graphics的英文縮寫。隨著以計(jì)算機(jī)為主要工具進(jìn)行視覺設(shè)計(jì)和生產(chǎn)的一系列相關(guān)產(chǎn)業(yè)的形成,國際上習(xí)慣將利用計(jì)算機(jī)技術(shù)進(jìn)行視覺設(shè)計(jì)和生產(chǎn)的領(lǐng)域通稱為CG。它既包括技術(shù)也包括藝術(shù),幾乎囊括了當(dāng)今電腦時(shí)代中所有的視覺藝術(shù)創(chuàng)作活動(dòng),如平面印刷品的設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、三維動(dòng)畫、影視特效、多媒體技術(shù)、以計(jì)算機(jī)輔助設(shè)計(jì)為主的建筑設(shè)計(jì)及工業(yè)造型設(shè)計(jì)等。
NGUI(NUGUI1、NGUI2)
55、NGUI Button怎樣接受用戶點(diǎn)擊并調(diào)用函數(shù),具體方法名稱是什么
a、直接監(jiān)聽事件
把下面腳本直接綁定在按鈕上,當(dāng)按鈕點(diǎn)擊時(shí)就可以監(jiān)聽到,這種方法不太好很不靈活。
[code]csharpcode: view source print?| 1 | void?OnClick() |
| 2 | { |
| 3 | Debug.Log("Button is Click!!!"); |
| 4 | } |
b、SendMessage
選擇Button-Component-NGUI-Interaction-Button Message//[??nt?r'?k?n]n.?一起活動(dòng);合作;互相影響;互動(dòng)
c、UIListener(推薦)
選擇Button-Component-NGUI-Internal-Event Listener
調(diào)用方法:
[code]csharpcode: view source print?| 01 | using?UnityEngine; |
| 02 | using?System.Collections; |
| 03 | ? |
| 04 | public?class?BtnNUGUI : MonoBehaviour { |
| 05 | ? |
| 06 | ? |
| 07 | ????void?Awake() |
| 08 | ????{ |
| 09 | ????????GameObject button = GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/Button"); |
| 10 | ????????UIEventListener.Get(button).onClick = ButtonClick; |
| 11 | ????} |
| 12 | ? |
| 13 | ????void?ButtonClick(GameObject button) |
| 14 | ????{ |
| 15 | ????????Debug.Log("NGUI button name :"+button.name); |
| 16 | ????} |
| 17 | ????// Use this for initialization |
| 18 | ????void?Start () { |
| 19 | ? |
| 20 | ????} |
| 21 | ? |
| 22 | ????// Update is called once per frame |
| 23 | ????void?Update () { |
| 24 | ? |
| 25 | ????} |
| 26 | } |
?56、請(qǐng)描述游戲動(dòng)畫有哪幾種,以及其原理。
主要有關(guān)節(jié)動(dòng)畫、單一網(wǎng)格模型動(dòng)畫(關(guān)鍵幀動(dòng)畫)、骨骼動(dòng)畫。 a、關(guān)節(jié)動(dòng)畫把角色分成若干獨(dú)立部分,一個(gè)部分對(duì)應(yīng)一個(gè)網(wǎng)格模型,部分的動(dòng)畫連接成一個(gè)整體的動(dòng)畫,角色比較靈活Quake2([kwe?k]vi.發(fā)抖,顫抖;)中使用了這種動(dòng)畫;b、 單一網(wǎng)絡(luò)模型動(dòng)畫由一個(gè)完整的網(wǎng)格模型構(gòu)成,在動(dòng)畫序列的關(guān)鍵幀里記錄各個(gè)頂點(diǎn)的原位置及其改變量,然后插值運(yùn)算實(shí)現(xiàn)動(dòng)畫效果,角色動(dòng)畫較真實(shí)。 c、骨骼動(dòng)畫,廣泛應(yīng)用的動(dòng)畫方式,集成了以上兩個(gè)方式的優(yōu)點(diǎn),骨骼按角色特點(diǎn)組成一定的層次結(jié)構(gòu),由關(guān)節(jié)相連,可做相對(duì)運(yùn)動(dòng),皮膚作為單一網(wǎng)格蒙在骨骼之外,決定角色的外觀。皮膚網(wǎng)格每一個(gè)頂點(diǎn)都會(huì)受到骨骼的影響,從而實(shí)現(xiàn)完美的動(dòng)畫
57、下面哪種做法可以打開Unity的Asset?Store
Windows?->?Asset?Store
58、Mecanim系統(tǒng)中,Body?Mask的作用是?
指定身體的某一部分是否參與渲染
59、以下哪種操作步驟可以打開Unity編輯器的Lightmapping視圖?
Windows?-->?Lightmapping
60、關(guān)于光照貼圖
A:使用光照貼圖比使用實(shí)時(shí)光源渲染要快?B:可以降低游戲內(nèi)存消耗 C、多個(gè)物體可以使用同一張光照貼圖
61、關(guān)于Vector3的API,以下說法正確的是?
Vector3.forward與Vector3(0,0,1)是一樣的意思;?
62、?以下哪個(gè)函數(shù)在游戲進(jìn)入新場(chǎng)景后會(huì)被馬上調(diào)用?
MonoBehaviour.OnLevelWasLoaded
63、?什么是導(dǎo)航網(wǎng)格(?NavMesh)?
一種用于實(shí)現(xiàn)自動(dòng)尋路的網(wǎng)格
64、什么是局部坐標(biāo),什么是世界坐標(biāo)?
世界坐標(biāo)是不會(huì)變的,一直以世界坐標(biāo)軸的XYZ為標(biāo)準(zhǔn)。局部坐標(biāo)其實(shí)就是自身的坐標(biāo),會(huì)隨著物體的旋轉(zhuǎn)而變化的。
65、itween插件的作用是什么,itween作用于世界坐標(biāo)還是局部坐標(biāo),請(qǐng)列舉出3個(gè)其常用方法?
iTween是一個(gè)動(dòng)畫庫,作者創(chuàng)建它的目的就是最小的投入實(shí)現(xiàn)最大的產(chǎn)出。讓你做開發(fā)更輕松,用它可以輕松實(shí)現(xiàn)各種動(dòng)畫,晃動(dòng),旋轉(zhuǎn),移動(dòng),褪色,上色,控制音頻等等“
方法:a、MoveTo ?物體移動(dòng) ;b、ColorTo:隨著時(shí)間改變對(duì)象的顏色組; c、LookTo:隨時(shí)間旋轉(zhuǎn)物體讓其臉部朝向所提供的Vector3或Transform位置
66、請(qǐng)簡(jiǎn)述NGUI中Panel和Anchor的作用
Anchor包含UIAnchor腳本。UIAnchor的功能是把對(duì)象錨定在屏幕的邊緣(左上,左中,左下,上,中,下,右上,右中,右下),或縮放物體使其匹配屏幕的尺寸
Panel對(duì)象有UIPanel腳本,UIPanel是一個(gè)容器,它將包含所有UI小部件,并負(fù)責(zé)將所包含的部件組合優(yōu)化,以減少繪制命令的調(diào)用。
67、Unity攝像機(jī)有幾種工作方式,分別是什么?
?
68、LayerMask.NameToLayer()這個(gè)方法有什么作用?
LayerMask的使用是按位操作的,LayerMask.NameToLayer("Players") 返回該Layer的編號(hào)。
?69、請(qǐng)描述MeshRender中material和shader的區(qū)別?
Shader(著色器)實(shí)際上就是一小段程序,它負(fù)責(zé)將輸入的Mesh(網(wǎng)格)以指定的方式和輸入的貼圖或者顏色等組合作用,然后輸出。繪圖單元可以依據(jù)這個(gè)輸出來將圖像繪制到屏幕上。輸入的貼圖或者顏色等,加上對(duì)應(yīng)的Shader,以及對(duì)Shader的特定的參數(shù)設(shè)置,將這些內(nèi)容(Shader及輸入?yún)?shù))打包存儲(chǔ)在一起,得到的就是一個(gè)Material(材質(zhì))
Shader大體上可以分為兩類:表面著色器(Surface Shader) 、片段著色器(Fragment Shader)
?70、什么是矢量圖
矢量圖:計(jì)算機(jī)中顯示的圖形一般可以分為兩大類——矢量圖和位圖。矢量圖使用直線和曲線來描述圖形,這些圖形的元素是一些點(diǎn)、線、矩形、多邊形、圓和弧線等等,它們都是通過數(shù)學(xué)公式計(jì)算獲得的。例如一幅花的矢量圖形實(shí)際上是由線段形成外框輪廓,由外框的顏色以及外框所封閉的顏色決定花顯示出的顏色。由于矢量圖形可通過公式計(jì)算獲得,所以矢量圖形文件體積一般較小。矢量圖形最大的優(yōu)點(diǎn)是無論放大、縮小或旋轉(zhuǎn)等不會(huì)失真;最大的缺點(diǎn)是難以表現(xiàn)色彩層次豐富的逼真圖像效果。
?71、Unity 連接數(shù)據(jù)庫
需要得到Mono.Data.Sqlite.dll 文件與System.Data.dll文件
72、四元組是什么?
所謂四元數(shù),就是把4個(gè)實(shí)數(shù)組合起來的東西。4個(gè)元素中,一個(gè)是實(shí)部,其余3個(gè)是虛部。
------------------------------------------------------------------------------------------
【轉(zhuǎn)】
| ? |
總結(jié)
以上是生活随笔為你收集整理的Unity3D面试ABC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多个摄像机之间的切换
- 下一篇: 3D场景中选取场景中的物体。