更新:【面試題含答案】
http://bbs.9ria.com/thread-288394-1-1.html
高頻問答的問題:
什么是多態(tài)?
簡(jiǎn)單的說,就是用父類的引用指向子類的對(duì)象。多態(tài)可以理解成“一個(gè)接口,多種實(shí)現(xiàn)”,就是同一種事物表現(xiàn)出的多種形態(tài),多態(tài)允許將子類的對(duì)象當(dāng)作父類的對(duì)象使用,某父類型的引用指向其子類型的對(duì)象,調(diào)用的方法是該子類型的方法。
多態(tài)的作用?
把不同的子類對(duì)象都當(dāng)作父類來看,可以屏蔽不同子類對(duì)象之間的差異,寫出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。
有限狀態(tài)機(jī)(finite-state machine)
有限狀態(tài)機(jī),又稱有限狀態(tài)自動(dòng)機(jī),簡(jiǎn)稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型。
有限狀態(tài)機(jī)可以將復(fù)雜的邏輯簡(jiǎn)化為有限個(gè)穩(wěn)定狀態(tài),在穩(wěn)定狀態(tài)中判斷事件。其中有限不是指有限次處理,而是有限個(gè)穩(wěn)定狀態(tài),并且有限狀態(tài)機(jī)是一個(gè)閉環(huán)系統(tǒng),可以用有限的狀態(tài)處理無盡的事務(wù)。
【Unity3d中的力的模式分為4種(ForceMode 力模式)分別是:】
1、Force:添加一個(gè)可持續(xù)力到剛體,使用它的質(zhì)量。
2、Acceleration:添加一個(gè)可持續(xù)加速度到剛體,忽略它的質(zhì)量。
3、Impulse:添加一個(gè)瞬間沖擊力到剛體,使用它的質(zhì)量。
4、VelocityChange:添加一個(gè)瞬間速度變化給剛體,忽略它的質(zhì)量。
【物理系統(tǒng)中一共有6中添加力的方法,分別是:】
1、AddForce:添加一個(gè)力到剛體。作為結(jié)果剛體將開始移動(dòng)。
2、AddRelativeForce:添加一個(gè)力到剛體。相對(duì)于它的系統(tǒng)坐標(biāo)。
3、AddTorque:添加一個(gè)力矩到剛體。
4、AddRelativeTorque:添加一個(gè)力矩到剛體,相對(duì)于剛體自身的坐標(biāo)系統(tǒng)。
5、AddForceAtPosition:在position位置應(yīng)用force力。作為結(jié)果這個(gè)將在這個(gè)物體上應(yīng)用一個(gè)力矩和力。
6、AddExplosionForce:應(yīng)用一個(gè)力到剛體來模擬爆炸效果。爆炸力將隨著到剛體的距離線形衰減。
1什么是渲染管道?
是指在顯示器上為了顯示出圖像而經(jīng)過的一系列必要操作。
渲染管道中的很多步驟,都要將幾何物體從一個(gè)坐標(biāo)系中變換到另一個(gè)坐標(biāo)系中去。
主要步驟有:
本地坐標(biāo)->視圖坐標(biāo)->背面裁剪->光照->裁剪->投影->視圖變換->光柵化。
2如何優(yōu)化內(nèi)存?
有很多種方式,例如
1.壓縮自帶類庫;
2.將暫時(shí)不用的以后還需要使用的物體隱藏起來而不是直接Destroy掉;
3.釋放AssetBundle占用的資源;
4.降低模型的片面數(shù),降低模型的骨骼數(shù)量,降低貼圖的大小;
5.使用光照貼圖,使用多層次細(xì)節(jié)(LOD),使用著色器(Shader),使用預(yù)設(shè)(Prefab)。
3動(dòng)態(tài)加載資源的方式?(有時(shí)候也問區(qū)別,具體請(qǐng)百度)
1.Resources.Load();
2.AssetBundle
4什么是協(xié)同程序?
在主線程運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來協(xié)助當(dāng)前程序的執(zhí)行。換句話說,開啟協(xié)程就是開啟一個(gè)線程??梢杂脕砜刂七\(yùn)動(dòng)、序列以及對(duì)象的行為。
5你用過哪些插件?
(最好多熟悉幾個(gè)插件,問的時(shí)候好回答)
6什么是渲染管道?
是指在顯示器上為了顯示出圖像而經(jīng)過的一系列必要操作。
渲染管道中的很多步驟,都要將幾何物體從一個(gè)坐標(biāo)系中變換到另一個(gè)坐標(biāo)系中去。
主要步驟有:
本地坐標(biāo)->視圖坐標(biāo)->背面裁剪->光照->裁剪->投影->視圖變換->光柵化。
7如何優(yōu)化內(nèi)存?
有很多種方式,例如
1.壓縮自帶類庫;
2.將暫時(shí)不用的以后還需要使用的物體隱藏起來而不是直接Destroy掉;
3.釋放AssetBundle占用的資源;
4.降低模型的片面數(shù),降低模型的骨骼數(shù)量,降低貼圖的大??;
5.使用光照貼圖,使用多層次細(xì)節(jié)(LOD),使用著色器(Shader),使用預(yù)設(shè)(Prefab)。
8動(dòng)態(tài)加載資源的方式?(有時(shí)候也問區(qū)別,具體請(qǐng)百度)
1.Resources.Load();
2.AssetBundle
9什么是協(xié)同程序?
在主線程運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來協(xié)助當(dāng)前程序的執(zhí)行。換句話說,開啟協(xié)程就是開啟一個(gè)線程??梢杂脕砜刂七\(yùn)動(dòng)、序列以及對(duì)象的行為。
10你用過哪些插件?
(最好多熟悉幾個(gè)插件,問的時(shí)候好回答)
a) 一 界面制作 推薦:NGUI
b) 二 2D游戲制作 推薦:2D Toolkit //[?tu:lk?t] 工具包,工具箱
c) 三 可視化編程 推薦:PlayMaker
d) 四 插值插件 推薦:iTween,HOTween
e) 五 路徑搜尋 推薦:Simple Path
f) 六 美術(shù)及動(dòng)畫制作 推薦:RageSpline,Smooth Moves
g) 七 畫面增強(qiáng) 推薦:Bitmap2Material,Strumpy Shader Editor
h) 八 攝像機(jī)管理 推薦:Security Camera
i) 九 資源包 推薦:Nature Pack
j) 十、造路插件EasyRoads3D
====================================================
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ā)生碰撞的必要條件
兩個(gè)物體都必須帶有碰撞器(Collider),其中一個(gè)物體還必須帶有Rigidbody剛體。
4.CharacterController和Rigidbody的區(qū)別?
CharacterController自帶膠囊碰撞器,里面包含有剛體的屬性;
Rigidbody就是剛體,使物體帶有剛體的特征。
5.在物體發(fā)生碰撞的整個(gè)過程中,有幾個(gè)階段,分別列出對(duì)應(yīng)的函數(shù)
三個(gè)階段
1.OnCollisionEnter
2.OnCollisionStay
3.OnCollisionExit
6.Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來
rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函數(shù)中。
7.什么叫做鏈條關(guān)節(jié)?
Hinge Joint,可以模擬兩個(gè)物體間用一根鏈條連接在一起的情況,能保持兩個(gè)物體在一個(gè)固定距離內(nèi)部相互移動(dòng)而不產(chǎn)生作用力,但是達(dá)到固定距離后就會(huì)產(chǎn)生拉力。
8.物體自身旋轉(zhuǎn)使用的函數(shù)?
Transform.Rotate()
9.物體圍繞某點(diǎn)旋轉(zhuǎn)使用的函數(shù)?
Transform.RotateAround()
10.Unity3d提供了一個(gè)用于保存和讀取數(shù)據(jù)的類(PlayerPrefs),請(qǐng)列出保存和讀取整形數(shù)據(jù)的函數(shù)
PlayerPrefs.SetInt() PlayerPrefs.GetInt()
11.Unity3d提供了幾種光源類型,分別是哪幾種?
四種。
平行光:Directional Light 點(diǎn)光源:Point Light
聚光燈:Spot Light 區(qū)域光源:Area Light
12.Unity3d腳本從喚醒到銷毀有著一套比較完整的生命周期,請(qǐng)列出系統(tǒng)自帶的幾個(gè)重要的方法。
Awake——>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>Reset——>OnDisable——>OnDestroy
13.物理更新一般放在哪個(gè)系統(tǒng)函數(shù)里?
FixedUpdate,每固定幀繪制時(shí)執(zhí)行一次,和Update不同的是FixedUpdate是渲染幀執(zhí)行,如果你的渲染效率低下的時(shí)候FixedUpdate調(diào)用次數(shù)就會(huì)跟著下降。FixedUpdate比較適用于物理引擎的計(jì)算,因?yàn)槭歉繋秩居嘘P(guān)。Update就比較適合做控制。
14.移動(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)。
15.當(dāng)游戲中需要頻繁創(chuàng)建一個(gè)物體時(shí),我們需要怎樣做能夠節(jié)省內(nèi)存?
使用預(yù)制物體對(duì)象Prefab,然后復(fù)制創(chuàng)建。
16.在場(chǎng)景中放置多個(gè)Camera并同時(shí)處于活動(dòng)狀態(tài)會(huì)發(fā)生什么?
游戲界面可以看到很多攝像機(jī)的混合。
17.請(qǐng)描述Prefab的作用,并描述如何在移動(dòng)設(shè)備的環(huán)境下恰當(dāng)?shù)氖褂盟?/p>
Prefab在實(shí)例化的時(shí)候用到,主要用于經(jīng)常會(huì)用到的物體,屬性方便修改。
18.如何銷毀一個(gè)UnityEngine.Object及其子類?
使用Destroy()方法;
19.請(qǐng)簡(jiǎn)述Unity3d下如何安全的在不同工程間遷移asset數(shù)據(jù),請(qǐng)列舉出三種方法?
1.可以把a(bǔ)ssets目錄和Library目錄一起遷移
2.導(dǎo)出包
3.用Unity帶的assets Server功能
20.請(qǐng)描述游戲動(dòng)畫有哪幾種,以及其原理?
主要有關(guān)節(jié)動(dòng)畫、骨骼動(dòng)畫、單一網(wǎng)格模型動(dòng)畫(關(guān)鍵幀動(dòng)畫)。
關(guān)節(jié)動(dòng)畫:把角色分成若干獨(dú)立部分,一個(gè)部分對(duì)應(yīng)一個(gè)網(wǎng)格模型,部分的動(dòng)畫連接成一個(gè)整體的動(dòng)畫,角色比較靈活,Quake2中使用這種動(dòng)畫;
骨骼動(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)格模型動(dòng)畫由一個(gè)完整的網(wǎng)格模型構(gòu)成,在動(dòng)畫序列的關(guān)鍵幀里記錄各個(gè)頂點(diǎn)的原位置及其改變量,然后插值運(yùn)算實(shí)現(xiàn)動(dòng)畫效果,角色動(dòng)畫較真實(shí)。
21.請(qǐng)描述為什么Unity3d中會(huì)發(fā)生在組件上出現(xiàn)數(shù)據(jù)丟失的情況
一般是組件上綁定的物體對(duì)象被刪除了
22.alpha blend工作原理
Alpha Blend 實(shí)現(xiàn)透明效果,不過只能針對(duì)某塊區(qū)域進(jìn)行alpha操作,透明度可設(shè)。
23.寫出光照計(jì)算中的diffuse的計(jì)算公式
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.A.陰影由兩部分組成:本影與半影
27.a.本影:景物表面上那些沒有被光源直接照射的區(qū)域(全黑的輪廓分明的區(qū)域)
28.b.半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的區(qū)域(半明半暗區(qū)域)
29.求陰影區(qū)域的方法:做兩次消隱過程
30.一次對(duì)每個(gè)光源進(jìn)行消隱,求出對(duì)于光源而言不可見的區(qū)域L;
31.一次對(duì)視點(diǎn)的位置進(jìn)行消隱,求出對(duì)于視點(diǎn)而言可見的面S;
32.shadow area= L ∩ S
33.B.陰影分為兩種:自身陰影和投射陰影
34.自身陰影:因物體自身的遮擋而使光線照射不到它上面的某些可見面
35.工作原理:利用背面剔除的方法求出,即假設(shè)視點(diǎn)在點(diǎn)光源的位置。
36.投射陰影:因不透明物體遮擋光線使得場(chǎng)景中位于該物體后面的物體或區(qū)域受不到光照照射而形成的陰影
37.工作原理:從光源處向物體的所有可見面投射光線,將這些面投影到場(chǎng)景中得到投影面,再將這些投影面與場(chǎng)景中的其他平面求交得出陰影多邊形,保存這些陰影多邊形信息,然后再按視點(diǎn)位置對(duì)場(chǎng)景進(jìn)行相應(yīng)處理得到所要求的視圖(利用空間換時(shí)間,每次只需依據(jù)視點(diǎn)位置進(jìn)行一次陰影計(jì)算即可,省去了一次消隱過程)
38.若是動(dòng)態(tài)光源此方法就無效了。
26.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è)過程。
27.MipMap是什么,作用?
MipMapping:在三維計(jì)算機(jī)圖形的貼圖渲染中有常用的技術(shù),為加快渲染進(jìn)度和減少圖像鋸齒,貼圖被處理成由一系列被預(yù)先計(jì)算和優(yōu)化過的圖片組成的文件,這樣的貼圖被稱為MipMap。
28.機(jī)試:二選一
1.用代碼實(shí)現(xiàn)第三角色控制器
2.實(shí)現(xiàn)吊機(jī)吊物體的功能
29.反向旋轉(zhuǎn)動(dòng)畫的方法是什么?
【反轉(zhuǎn)動(dòng)畫,講動(dòng)畫的速度調(diào)到-1,碰撞時(shí),被碰撞物體與碰撞物體有collider組件,碰撞物體有剛體組件,或角色碰撞得包含角色組件 OR 改變animation.speed】
30.碰撞檢測(cè)需要物體具備什么屬性?
31.能檢測(cè)碰撞發(fā)生的方式有兩種,一種是利用碰撞器,另一種則是利用觸發(fā)器
32.【Physics.OverlapSphere相交球檢測(cè)碰撞,碰撞檢測(cè)需要包圍盒】
31.獲取、增加、刪除組件的命令分別是什么?
獲?。篏etComponent
增加:AddComponent
刪除:Destroy
32.Animation.CrossFade命令作用是:(C)
A.動(dòng)畫放大 B.動(dòng)畫轉(zhuǎn)換 C.動(dòng)畫的淡入為其他動(dòng)畫
33.Application.loadLevel命令為:(A)
A.加載關(guān)卡 B.異步加載關(guān)卡 C.加載動(dòng)作
34.調(diào)試記錄到控制臺(tái)的命令是什么?
Debug.Log();
35.編輯器類存放路徑是什么?
工程目錄下的Assets/Editor文件夾下。
36.使用原生GUI創(chuàng)建一個(gè)可以拖動(dòng)的窗口命令是什么?
GUI.DragWindow();
37.localPosition與Position的使用區(qū)別?
localPosition:自身位置,相對(duì)于父級(jí)的變換的位置。
Position:在世界坐標(biāo)transform的位置
38.意義連線
Mathf.Round 插值
Mathf.Clamp 四舍五入
Mathf.Lerp 限制
39.寫一個(gè)計(jì)時(shí)器工具,從整點(diǎn)開始計(jì)時(shí),格式為:00:00:00
40.寫出Animation的五個(gè)方法
AddClip 添加剪輯、Blend 混合、Play 播放、Stop 停止、Sample 采樣
41.怎么拿到一個(gè)對(duì)象上腳本的方法
GameObject.GetComponent<>();
42.上機(jī)題:用鼠標(biāo)實(shí)現(xiàn)在場(chǎng)景中拖動(dòng)物體,用鼠標(biāo)滾輪實(shí)現(xiàn)縮放(用一個(gè)Cube即可)。
43.請(qǐng)簡(jiǎn)述向量的點(diǎn)乘,向量的叉乘以及向量歸一化的幾何意義?
點(diǎn)乘的幾何意義是:計(jì)算兩個(gè)向量之間的夾角,以及在某一方向上的投影;
叉乘的幾何意義是:創(chuàng)建垂直于平面,三角形,或者多邊形的向量;參考:http://blog.sina.com.cn/s/blog_9283b6f601017hfw.html
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í),有: ii=-1 jj=-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)畫
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)聽到,這種方法不太好很不靈活。
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è)是虛部。
數(shù)據(jù)結(jié)構(gòu)和算法很重要,圖形學(xué)也很重要!
大的游戲公司很看重個(gè)人基礎(chǔ)、綜合能力;
小公司看你實(shí)際工作能力,看你的Demo。
高頻問答的問題
A:委托與事件什么?
所謂委托就是一個(gè)類,它定義了方法的類型,使得可以將方法當(dāng)作另一個(gè)方法的參數(shù)來進(jìn)行傳遞,這種將方法動(dòng)態(tài)地賦給參數(shù)的做法,可以避免在程序中大量使用If … Else(Switch)語句,同時(shí)使得程序具有更好的可擴(kuò)展性??梢詫⒍鄠€(gè)方法賦給同一個(gè)委托,或者叫將多個(gè)方法綁定到同一個(gè)委托,當(dāng)調(diào)用這個(gè)委托的時(shí)候,將依次調(diào)用其所綁定的方法。
【事件的本質(zhì)就是對(duì)消息的封裝,用作對(duì)象之間的通信;發(fā)送方叫事件發(fā)送器,接收方叫事件接收器】
【B:能用foreach遍歷訪問的對(duì)象需要實(shí)現(xiàn)什么接口或聲明什么方法的類型】
答案:能用foreach遍歷訪問的對(duì)象必須是集合或數(shù)組對(duì)象,而這些都是靠實(shí)現(xiàn)超級(jí)接口IEnumerator或被聲明 GetEnumerator 方法的類型
問:但是我在平常使用foreach in 的時(shí)候都是直接用的呀,也沒出什么問題呀。請(qǐng)問,這是為什么呢。 如果按題目中問的那樣去實(shí)現(xiàn)超級(jí)接口IEnumerator或被聲明 GetEnumerator 方法的類型,應(yīng)該怎樣去做呢? 謝謝
答:平常使用foreach in 的時(shí)候都是用的系統(tǒng)定義好的集合類(實(shí)現(xiàn)ICollection接口)。比如 arrayList,stringDictionary ,數(shù)組等。這些是平臺(tái)封裝好的,已近實(shí)現(xiàn)了IEnumerator 接口了。要讓自己寫的類也能時(shí)候foreach 就必須 在編寫類的時(shí)候?qū)崿F(xiàn)該接口。這樣就可以事后foreach遍歷了。比如 定義一個(gè) people 的類,實(shí)現(xiàn)了IEnumerator接口。有一個(gè)數(shù)組 People[] tempPeople ,那么 就可以用: foreach( p in tempPeople){ console.writeline(p.name);}這樣就免去了用for 循環(huán)的麻煩。
1.關(guān)于協(xié)同程序說法正確的是:( )
A. 協(xié)同程序,即在主程序運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來協(xié)同當(dāng)前程序的執(zhí)行。換句話說,開啟協(xié)同程序就是開啟一個(gè)線程。
C. 在[unity](http://www.manew.com)3D中,使用StopCoroutine(string methodName)來終止一個(gè)協(xié)同程序,使用StopAllCoroutines()來終止所有可以終止的協(xié)同程序,但這兩個(gè)方法都只能終止該MonoBehaviour中的協(xié)同程序
D. 協(xié)同程序的返回類型為Coroutine類型。在[unity3d](http://www.manew.com)中,Coroutine類繼承于YieldInstruction,所以,協(xié)同程序的返回類型只能為null、等待的幀數(shù)(frame)以及等待的時(shí)間
2. 對(duì)Mesh Renderer組件描述正確的是哪一項(xiàng)( )
A.Mesh Renderer組件從Mesh Filter組件中獲得網(wǎng)格信息,并根據(jù)物體的Transform組件所定義的位置進(jìn)行渲染
B. Mesh Renderer組件決定了場(chǎng)景中游戲?qū)ο蟮奈恢?,旋轉(zhuǎn)和縮放
C. 為場(chǎng)景中的某一游戲?qū)ο笤鎏砦锢淼奶匦?,需要為該游戲?qū)ο筇砑覯esh Renderer組件
D. Mesh Renderer是從網(wǎng)格資源中獲取網(wǎng)格信息的組件
3. 當(dāng)游戲中需要頻繁創(chuàng)建一個(gè)物體對(duì)象時(shí),我們需要怎么做來最大化節(jié)省內(nèi)存
( )
A. 異步加載
B. 動(dòng)態(tài)加載動(dòng)作
C. 對(duì)象池技術(shù)
D. 分步加載
4. if(go.CompareTag("Enemy"))和if(go.tag=="Enemy")兩種判斷方法說法錯(cuò)誤的是:( )
A. go.tag 一個(gè)標(biāo)簽可以用于識(shí)別一個(gè)游戲物體標(biāo)簽必須在使用之前在標(biāo)簽管理器里面先聲明
B. 因?yàn)間o.CompareTag 表示這個(gè)游戲物體是否被標(biāo)識(shí)tag標(biāo)簽
C. go.tag 會(huì)在內(nèi)部循環(huán)調(diào)用對(duì)象分配的標(biāo)簽屬性以及拷貝額外的內(nèi)存,推薦使用go.CompareTag("Enemy")來代替go.tag=="Enemy")
D. go.CompareTag("Enemy")與go.tag=="Enemy"都是比較標(biāo)簽,性能上沒有區(qū)別,可以按自己的喜好來使用。
5. 當(dāng)一個(gè)物體在視野內(nèi)被其它物體遮擋,不希望對(duì)該物體進(jìn)行渲染,可以通過以下哪一個(gè)模塊實(shí)現(xiàn)該功能( )
A. NavMesh
B. Light Probes
C. Occlusion Culling
D. Culling Mask
6. 下列選項(xiàng)錯(cuò)誤的是( )
A. 在[Unity3d](http://www.taidous.com/bbs/tag-name-Unity3d.html)中,GameObject 表示游戲?qū)ο?B. GameObject.Find方法的作用是通過對(duì)象名稱查找游戲?qū)ο?C. GameObject.FindWithTag方法的作用是通過標(biāo)簽查找多個(gè)游戲?qū)ο?D. obj.Tranform.Translate方法的作用是對(duì)象平移
判斷題:
7.在C#中,a.Equals(b) 和 a==b 完全是一樣的
8.在C#中string[,] strArray=new string[3,4]創(chuàng)建7個(gè)string對(duì)象
9.StringBuilder是可變字符串,string是不可變字符串
10.C#中:bool占1字節(jié),byte占1字節(jié),int占4字節(jié),long占8字節(jié)
前面三題: A A C 4:C 5:A 6:C 7: 錯(cuò) 8 : 錯(cuò) 9: 對(duì)
Unity3d 程序員面試題
1. 什么是渲染管道?渲染管道有哪些步驟?
答:渲染管道是指程序?yàn)榱嗽陲@示器上輸出圖像而經(jīng)過的一系列必要操作. 渲染管道的步驟有:
本地空間->世界空間->視圖空間->背面剔除->光照計(jì)算->相機(jī)裁剪->投影計(jì)算->視口變換 ->光柵化 2. Unity3d有幾種加載Prefab的方式?
答: 1.靜態(tài)引用,建一個(gè)public變量,在Inspector里把prefab拉上去,在場(chǎng)景運(yùn)行時(shí)會(huì)自動(dòng)加載,用的時(shí)候instantiate
2.Resource.Load, 在調(diào)用該函數(shù)后加載, Load以后instantiate 3.AssetBundle.Load 在調(diào)用該函數(shù)后加載, Load以后instantiate 3. 什么是協(xié)同程序?
答:在主線程序運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來協(xié)助當(dāng)前程序的執(zhí)行.換名話說. 開啟協(xié)程就象開啟一個(gè)線程.
4. 你例舉幾個(gè)你用過的Unity3d插件,并說明它們的用途和特點(diǎn).
5. Unity3d中的碰撞器Collision和觸發(fā)器Trigger的區(qū)別?
答:碰撞器有碰撞效果, IsTrigger = false 在碰撞發(fā)生時(shí)會(huì)調(diào)用 OnCollisionEnter,OnCollisionStay,OnCollisionExit函數(shù).
觸發(fā)器沒有碰撞效果, IsTrigger = true, 可被觸發(fā)時(shí)會(huì)調(diào)用 OnTriggerEnter,OnTriggerStay,OnTriggerExit函數(shù)
6. 物體發(fā)生碰撞的必要條件
答:兩件物體都必須有碰撞組件(Collider),其中一物體還必須帶有Rigidbody剛體組件
7. 在物體發(fā)生碰撞的整個(gè)過程中,有幾個(gè)階段,不同階段分別調(diào)用哪些函數(shù)
答:1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit
8. 在unity3D中有Update還有FixedUpdate,物理引擎的更新一般放在哪個(gè)系統(tǒng)函數(shù)里,為什
么?
答:物理引擎的更新一般放在FixedUpdate里面,和Update不同,FixedUpdate是渲染幀執(zhí)行,如果你的渲染效率低下的時(shí)候FixedUpdate調(diào)用次數(shù)就會(huì)跟著下降.因?yàn)镕ixedUpdate是每固定幀繪制時(shí)執(zhí)行一次,所以更適合做物理控制.
9. 移動(dòng)攝像機(jī)的動(dòng)作放在哪個(gè)系統(tǒng)函數(shù)中,為什么放在這個(gè)函數(shù)中?
答:移動(dòng)攝像機(jī)的動(dòng)作應(yīng)該放在LateUpdate函數(shù)中.在每幀執(zhí)行完畢調(diào)用,它是在所有Update結(jié)束后才調(diào)用,比較適合用于命令腳本的執(zhí)行.如果不是在所有Update執(zhí)行完后就移動(dòng)攝像機(jī)可能會(huì)出現(xiàn)攝像機(jī)移動(dòng)了,視口里的內(nèi)容還沒有更新的空幀現(xiàn)象.
var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);
10. 場(chǎng)景中有多個(gè)相機(jī)(Camera)時(shí),怎么來設(shè)置多個(gè)相機(jī)的渲染順序.
答: Depth參數(shù),設(shè)為-1會(huì)最先被渲染,值越大越后被渲染.
11. LOD是什么, 優(yōu)缺點(diǎn)是什么?
答 : LOD 是Level Of Detail的縮寫,是指的多層次細(xì)節(jié)技術(shù),是最常用的游戲優(yōu)化技術(shù).它按照模型的位置和重要程度決定物體渲染的精細(xì)層度,從而降低非重要物體的在視口中的面數(shù)和細(xì)節(jié)度,來提高渲染運(yùn)算的速度.
12. 寫出光照計(jì)算中的Diffuse的計(jì)算公式?
答 : diffuse = Kd * colorLight *max(N . L, 0) Kd漫反射系數(shù),ColorLight光照的顏色, N物體表面單位法線向量, L由點(diǎn)指向光源的單位向量, 其中N與L為點(diǎn)乘,如果結(jié)果 小于等于0,則漫反射為0
13. Vertex Shader是什么?
答:頂點(diǎn)著色器
14. MipMap是什么,作用?
答:MIP map技術(shù)與材質(zhì)帖圖技術(shù)結(jié)合,根據(jù)距觀看者遠(yuǎn)近距離的不同,以不同的分辨率將單一的材質(zhì)帖圖以多重圖像的形式表現(xiàn)出來并代表平面紋理:尺寸最大的圖像放在前面顯著的位置,而相對(duì)較小的圖像則后退到背景區(qū)域。每一個(gè)不同的尺寸等級(jí)定義成一個(gè)MIP map水平。MIP map技術(shù)幫助避免了不想要的鋸齒邊緣(稱為鋸齒狀圖形)在圖像中出現(xiàn),這種鋸齒狀圖形可能是由于在不同分辨率下使用bit map圖像產(chǎn)生的。
15. 編輯器類Editor Classes 存放路徑在哪里?和Runtime Classes運(yùn)行時(shí)類有什么不同?
答 : 存放路么在工程目錄下的 Assets/Editor文件夾下.和運(yùn)行時(shí)類不同的是,RuntimeClasses是用來開發(fā)最終產(chǎn)品的,使用RuntimeClasses開發(fā)的程序在軟件發(fā)布后也可以運(yùn)行, EditorClasses是用來對(duì)編輯器進(jìn)行2次開發(fā)用的,可以用它開發(fā)一些自已的模塊或工具,但在最終發(fā)布的程序中是不能使用的.
16. 請(qǐng)簡(jiǎn)述向量的點(diǎn)乘,向量的叉乘以及向量的歸一化的幾何意義?
答: 向量的點(diǎn)乘是計(jì)算兩個(gè)向量之間的夾角的Cos值,
A,B向量的叉乘是計(jì)算垂直于由兩個(gè)A,B兩向量構(gòu)成的平面的向量, 向量歸一化,是指在空間坐標(biāo)系內(nèi)將向量的長度設(shè)為1.
17. 機(jī)試: 多選
1) 用鼠標(biāo)實(shí)現(xiàn)在場(chǎng)景中拖動(dòng)物體,用鼠標(biāo)滾輪實(shí)現(xiàn)視口縮放(用一個(gè)Cube即可). 2) 用代碼實(shí)現(xiàn)第三人稱角色控制器 3) 實(shí)現(xiàn)吊機(jī)吊物體的功能
1.關(guān)于協(xié)同程序說法正確的是:( )
A. 協(xié)同程序,即在主程序運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來協(xié)同當(dāng)前程序的執(zhí)行。換句話說,開啟協(xié)同程序就是開啟一個(gè)線程。
C. 在[unity](http://www.manew.com)3D中,使用StopCoroutine(string methodName)來終止一個(gè)協(xié)同程序,使用StopAllCoroutines()來終止所有可以終止的協(xié)同程序,但這兩個(gè)方法都只能終止該MonoBehaviour中的協(xié)同程序
D. 協(xié)同程序的返回類型為Coroutine類型。在[unity3d](http://www.manew.com)中,Coroutine類繼承于YieldInstruction,所以,協(xié)同程序的返回類型只能為null、等待的幀數(shù)(frame)以及等待的時(shí)間
2. 對(duì)Mesh Renderer組件描述正確的是哪一項(xiàng)( )
A.Mesh Renderer組件從Mesh Filter組件中獲得網(wǎng)格信息,并根據(jù)物體的Transform組件所定義的位置進(jìn)行渲染
B. Mesh Renderer組件決定了場(chǎng)景中游戲?qū)ο蟮奈恢?,旋轉(zhuǎn)和縮放
C. 為場(chǎng)景中的某一游戲?qū)ο笤鎏砦锢淼奶匦?,需要為該游戲?qū)ο筇砑覯esh Renderer組件
D. Mesh Renderer是從網(wǎng)格資源中獲取網(wǎng)格信息的組件
3. 當(dāng)游戲中需要頻繁創(chuàng)建一個(gè)物體對(duì)象時(shí),我們需要怎么做來最大化節(jié)省內(nèi)存
( )
A. 異步加載
B. 動(dòng)態(tài)加載動(dòng)作
C. 對(duì)象池技術(shù)
D. 分步加載
4. if(go.CompareTag("Enemy"))和if(go.tag=="Enemy")兩種判斷方法說法錯(cuò)誤的是:( )
A. go.tag 一個(gè)標(biāo)簽可以用于識(shí)別一個(gè)游戲物體標(biāo)簽必須在使用之前在標(biāo)簽管理器里面先聲明
B. 因?yàn)間o.CompareTag 表示這個(gè)游戲物體是否被標(biāo)識(shí)tag標(biāo)簽
C. go.tag 會(huì)在內(nèi)部循環(huán)調(diào)用對(duì)象分配的標(biāo)簽屬性以及拷貝額外的內(nèi)存,推薦使用go.CompareTag("Enemy")來代替go.tag=="Enemy")
D. go.CompareTag("Enemy")與go.tag=="Enemy"都是比較標(biāo)簽,性能上沒有區(qū)別,可以按自己的喜好來使用。
5. 當(dāng)一個(gè)物體在視野內(nèi)被其它物體遮擋,不希望對(duì)該物體進(jìn)行渲染,可以通過以下哪一個(gè)模塊實(shí)現(xiàn)該功能( )
A. NavMesh
B. Light Probes
C. Occlusion Culling
D. Culling Mask
6. 下列選項(xiàng)錯(cuò)誤的是( )
A. 在[Unity3d](http://www.taidous.com/bbs/tag-name-Unity3d.html)中,GameObject 表示游戲?qū)ο?B. GameObject.Find方法的作用是通過對(duì)象名稱查找游戲?qū)ο?C. GameObject.FindWithTag方法的作用是通過標(biāo)簽查找多個(gè)游戲?qū)ο?D. obj.Tranform.Translate方法的作用是對(duì)象平移
判斷題:
7.在C#中,a.Equals(b) 和 a==b 完全是一樣的
8.在C#中string[,] strArray=new string[3,4]創(chuàng)建7個(gè)string對(duì)象
9.StringBuilder是可變字符串,string是不可變字符串
10.C#中:bool占1字節(jié),byte占1字節(jié),int占4字節(jié),long占8字節(jié)
前面三題: A A C 4:C 5:A 6:C 7: 錯(cuò) 8 : 錯(cuò) 9: 對(duì)
Unity3d 程序員面試題
1. 什么是渲染管道?渲染管道有哪些步驟?
答:渲染管道是指程序?yàn)榱嗽陲@示器上輸出圖像而經(jīng)過的一系列必要操作. 渲染管道的步驟有:
本地空間->世界空間->視圖空間->背面剔除->光照計(jì)算->相機(jī)裁剪->投影計(jì)算->視口變換 ->光柵化 2. Unity3d有幾種加載Prefab的方式?
答: 1.靜態(tài)引用,建一個(gè)public變量,在Inspector里把prefab拉上去,在場(chǎng)景運(yùn)行時(shí)會(huì)自動(dòng)加載,用的時(shí)候instantiate
2.Resource.Load, 在調(diào)用該函數(shù)后加載, Load以后instantiate 3.AssetBundle.Load 在調(diào)用該函數(shù)后加載, Load以后instantiate 3. 什么是協(xié)同程序?
答:在主線程序運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來協(xié)助當(dāng)前程序的執(zhí)行.換名話說. 開啟協(xié)程就象開啟一個(gè)線程.
4. 你例舉幾個(gè)你用過的Unity3d插件,并說明它們的用途和特點(diǎn).
5. Unity3d中的碰撞器Collision和觸發(fā)器Trigger的區(qū)別?
答:碰撞器有碰撞效果, IsTrigger = false 在碰撞發(fā)生時(shí)會(huì)調(diào)用 OnCollisionEnter,OnCollisionStay,OnCollisionExit函數(shù).
觸發(fā)器沒有碰撞效果, IsTrigger = true, 可被觸發(fā)時(shí)會(huì)調(diào)用 OnTriggerEnter,OnTriggerStay,OnTriggerExit函數(shù)
6. 物體發(fā)生碰撞的必要條件
答:兩件物體都必須有碰撞組件(Collider),其中一物體還必須帶有Rigidbody剛體組件
7. 在物體發(fā)生碰撞的整個(gè)過程中,有幾個(gè)階段,不同階段分別調(diào)用哪些函數(shù)
答:1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit
8. 在unity3D中有Update還有FixedUpdate,物理引擎的更新一般放在哪個(gè)系統(tǒng)函數(shù)里,為什
么?
答:物理引擎的更新一般放在FixedUpdate里面,和Update不同,FixedUpdate是渲染幀執(zhí)行,如果你的渲染效率低下的時(shí)候FixedUpdate調(diào)用次數(shù)就會(huì)跟著下降.因?yàn)镕ixedUpdate是每固定幀繪制時(shí)執(zhí)行一次,所以更適合做物理控制.
9. 移動(dòng)攝像機(jī)的動(dòng)作放在哪個(gè)系統(tǒng)函數(shù)中,為什么放在這個(gè)函數(shù)中?
答:移動(dòng)攝像機(jī)的動(dòng)作應(yīng)該放在LateUpdate函數(shù)中.在每幀執(zhí)行完畢調(diào)用,它是在所有Update結(jié)束后才調(diào)用,比較適合用于命令腳本的執(zhí)行.如果不是在所有Update執(zhí)行完后就移動(dòng)攝像機(jī)可能會(huì)出現(xiàn)攝像機(jī)移動(dòng)了,視口里的內(nèi)容還沒有更新的空幀現(xiàn)象.
var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);
10. 場(chǎng)景中有多個(gè)相機(jī)(Camera)時(shí),怎么來設(shè)置多個(gè)相機(jī)的渲染順序.
答: Depth參數(shù),設(shè)為-1會(huì)最先被渲染,值越大越后被渲染.
11. LOD是什么, 優(yōu)缺點(diǎn)是什么?
答 : LOD 是Level Of Detail的縮寫,是指的多層次細(xì)節(jié)技術(shù),是最常用的游戲優(yōu)化技術(shù).它按照模型的位置和重要程度決定物體渲染的精細(xì)層度,從而降低非重要物體的在視口中的面數(shù)和細(xì)節(jié)度,來提高渲染運(yùn)算的速度.
12. 寫出光照計(jì)算中的Diffuse的計(jì)算公式?
答 : diffuse = Kd * colorLight *max(N . L, 0) Kd漫反射系數(shù),ColorLight光照的顏色, N物體表面單位法線向量, L由點(diǎn)指向光源的單位向量, 其中N與L為點(diǎn)乘,如果結(jié)果 小于等于0,則漫反射為0
13. Vertex Shader是什么?
答:頂點(diǎn)著色器
14. MipMap是什么,作用?
答:MIP map技術(shù)與材質(zhì)帖圖技術(shù)結(jié)合,根據(jù)距觀看者遠(yuǎn)近距離的不同,以不同的分辨率將單一的材質(zhì)帖圖以多重圖像的形式表現(xiàn)出來并代表平面紋理:尺寸最大的圖像放在前面顯著的位置,而相對(duì)較小的圖像則后退到背景區(qū)域。每一個(gè)不同的尺寸等級(jí)定義成一個(gè)MIP map水平。MIP map技術(shù)幫助避免了不想要的鋸齒邊緣(稱為鋸齒狀圖形)在圖像中出現(xiàn),這種鋸齒狀圖形可能是由于在不同分辨率下使用bit map圖像產(chǎn)生的。
15. 編輯器類Editor Classes 存放路徑在哪里?和Runtime Classes運(yùn)行時(shí)類有什么不同?
答 : 存放路么在工程目錄下的 Assets/Editor文件夾下.和運(yùn)行時(shí)類不同的是,RuntimeClasses是用來開發(fā)最終產(chǎn)品的,使用RuntimeClasses開發(fā)的程序在軟件發(fā)布后也可以運(yùn)行, EditorClasses是用來對(duì)編輯器進(jìn)行2次開發(fā)用的,可以用它開發(fā)一些自已的模塊或工具,但在最終發(fā)布的程序中是不能使用的.
16. 請(qǐng)簡(jiǎn)述向量的點(diǎn)乘,向量的叉乘以及向量的歸一化的幾何意義?
答: 向量的點(diǎn)乘是計(jì)算兩個(gè)向量之間的夾角的Cos值,
A,B向量的叉乘是計(jì)算垂直于由兩個(gè)A,B兩向量構(gòu)成的平面的向量, 向量歸一化,是指在空間坐標(biāo)系內(nèi)將向量的長度設(shè)為1.