針對大家即將面臨的職場生涯的藍(lán)鷗VR培訓(xùn)班的學(xué)生,藍(lán)鷗Unity3d培訓(xùn)學(xué)校老師特意整理了一些Unity3d常見面試題【附答案】,供大家參考學(xué)習(xí)。
1. 請描述游戲動畫有哪幾種,以及其原理
主要有關(guān)節(jié)動畫、單一網(wǎng)格模型動畫(關(guān)鍵幀動畫)、骨骼動畫。
關(guān)節(jié)動畫把角色分成若干獨(dú)立部分,一個部分對應(yīng)一個網(wǎng)格模型,部分的動畫連接成一個整體的動畫,角色比較靈活Quake2中使用了這種動畫。
單一網(wǎng)絡(luò)模型動畫由一個完整的網(wǎng)格模型構(gòu)成,在動畫序列的關(guān)鍵幀里記錄各個頂點(diǎn)的原位置及其改變量,然后插值運(yùn)算實(shí)現(xiàn)動畫效果,角色動畫較真實(shí)。
骨骼動畫,廣泛應(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)完美的動畫。(骨骼動畫是由關(guān)節(jié)動畫發(fā)展而來的,如今基本都使用骨骼動畫來實(shí)現(xiàn)角色動畫)
2. alpha blend 工作原理
實(shí)際顯示顏色 = 前景顏色*Alpha/255 + 背景顏色*(255-Alpha)/255
3. 寫光照計(jì)算中的diffuse的計(jì)算公式
實(shí)際光照強(qiáng)度 I= 環(huán)境光(Iambient) + 漫反射光(Idiffuse) + 鏡面高光(Ispecular);
環(huán)境光:Iambient= Aintensity* Acolor; (Aintensity表示環(huán)境光強(qiáng)度,Acolor表示環(huán)境光顏色);
漫反射光:Idiffuse = Dintensity*Dcolor*N.L;
(Dintensity表示漫反射強(qiáng)度,Dcolor表示漫反射光顏色,N為該點(diǎn)的法向量,L為光源向量)
鏡面反射光:Ispecular = Sintensity*Scolor*(R.V)^n;
(Sintensity表示鏡面光照強(qiáng)度,Scolor表示鏡面光顏色,R為光的反射向量,V為觀察者向量,n稱為鏡面光指數(shù))
4. lod是什么,優(yōu)缺點(diǎn)是什么
LOD技術(shù)即Levels of Detail的簡稱,意為多細(xì)節(jié)層次。LOD技術(shù)指根據(jù)物體模型的節(jié)點(diǎn)在顯示環(huán)境中所處的位置和重要度,決定物體渲染的資源分配,降低非重要物體的面數(shù)和細(xì)節(jié)度,從而獲得高效率的渲染運(yùn)算。
優(yōu)點(diǎn):可根據(jù)距離動態(tài)地選擇渲染不同細(xì)節(jié)的模型;
缺點(diǎn):加重美工的負(fù)擔(dān),要準(zhǔn)備不同細(xì)節(jié)的同一模型,同樣的會稍微增加游戲的容量。
5. 兩種陰影判斷的方法工作原理
陰影由兩部分組成:本影與半影。
本影:景物表面上那些沒有被光源直接照射的區(qū)域(全黑的輪廓分明的區(qū)域);
半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的區(qū)域(半明半暗區(qū)域);
求陰影區(qū)域的方法:做兩次消隱過程;
一次對每個光源進(jìn)行消隱,求出對于光源而言不可見的區(qū)域L;
一次對視點(diǎn)的位置進(jìn)行消隱,求出對于視點(diǎn)而言可見的面S;
shadow area= L ∩ S
陰影分為兩種:自身陰影和投射陰影
自身陰影:因物體自身的遮擋而使光線照射不到它上面的某些可見面
工作原理:利用背面剔除的方法求出,即假設(shè)視點(diǎn)在點(diǎn)光源的位置。
投射陰影:因不透明物體遮擋光線使得場景中位于該物體后面的物體或區(qū)域受不到光照照射而形成的陰影
工作原理:從光源處向物體的所有可見面投射光線,將這些面投影到場景 中得到投影面,再將這些投影面與場景中的其他平面求交得出陰影多邊形,保存這些陰影多邊形信息,然后再按視點(diǎn)位置對場景進(jìn)行相應(yīng)處理得到所要求的視圖(利 用空間換時間,每次只需依據(jù)視點(diǎn)位置進(jìn)行一次陰影計(jì)算即可,省去了一次消隱過程)
若是動態(tài)光源此方法就無效了。
6. Vertex Shader是什么?怎么計(jì)算?
頂點(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幾個過程。
7. MipMap是什么?作用?
在三維計(jì)算機(jī)圖形的貼圖渲染中有一個常用的技術(shù)被稱為Mipmapping。為了加快渲染速度和減少圖像鋸齒,貼圖被處理成由一系列被預(yù)先計(jì)算和優(yōu)化過的圖片組成的文件,這樣的貼圖被稱為 MIP map 或者 mipmap。
8. 用[color=rgb(85, 85, 85) !important]u3d實(shí)現(xiàn)2d游戲,有幾種方式?
利用引擎自帶的GUI
把攝像機(jī)設(shè)為Orthographic,用面片作為2d元素
利用第三方插件:NGUI、2dToolkit
9. u3d中碰撞器和觸發(fā)器的區(qū)別?
collider碰撞器會有碰撞的效果,IsTrigger = false,可以調(diào)用OnCollisionEnter/Stay/Exit函數(shù)
trigger觸發(fā)器沒有碰撞效果,isTrigger = true,可以調(diào)用OnTriggerEnter/stay/exit函數(shù)
10. 物體發(fā)生碰撞的必要條件
物體A必須帶有(collider+rigidbody)或者CharacterController,另一個物體也必須至少帶有collider
11. CharacterController和Rigidbody的區(qū)別
Rigidbody具有完全真實(shí)物理的特性,而CharacterController可以說是受限的Rigidbody,具有一定的物理效果但不是完全真實(shí)的。
12. 物體發(fā)生碰撞時,有幾個階段,分別對應(yīng)的函數(shù)
三個階段,OnCollisionEnter/Stay/Exit函數(shù)
13. U3D中,幾種施加力的方式,描述出來
rigidbody.AddForce/AddForceAtPosition,都是rigidbody的成員函數(shù)
14. 什么叫做鏈條關(guān)節(jié)
Hinge Joint ,他可以模擬兩個物體間用一根鏈條連接在一起的情況,能保持兩個物體在一個固定距離內(nèi)部相互移動而不產(chǎn)生作用力,但是達(dá)到固定距離后就會產(chǎn)生拉力。(簡單說就是彈簧)
15. 物體自旋轉(zhuǎn)使用的函數(shù)叫什么
transform.Rotate
16. 物體繞某點(diǎn)旋轉(zhuǎn)使用函數(shù)叫什么
transform.RotateAround
17. U3D提供了一個用于保存讀取數(shù)據(jù)的類,(playerPrefs),請列出保存讀取整形數(shù)據(jù)的函數(shù)
PlayerPrefs.SetInt 與 PlayerPrefs.GetInt
18. [color=rgb(85, 85, 85) !important]unity3d提供了幾種光源,分別是什么
共4種,Directional Light、Point Light、Spot Light、Area Light(只用于烘培)
19. unity3d從喚醒到銷毀有一段生命周期,請列出系統(tǒng)自己調(diào)用的幾個重要方法。
Awake –>OnEnable –> Start –> Update –> FixedUpdate –> LateUpdate –> OnGUI –> Reset –> OnDisable –> OnDestroy
20. 物理更新一般在哪個系統(tǒng)函數(shù)里?
FixedUpdate,每固定幀繪制時執(zhí)行一次,和update不 同的是FixedUpdate是渲染幀執(zhí)行,如果你的渲染效率低下的時候FixedUpdate調(diào)用次數(shù)就會跟著下降。FixedUpdate比較適用于 物理引擎的計(jì)算,因?yàn)槭歉繋秩居嘘P(guān)。Update就比較適合做控制。
21. 移動相機(jī)動作在哪個函數(shù)里,為什么在這個函數(shù)里。
LateUpdate,,是在所有update結(jié)束后才調(diào),比較適合用于命令腳本的執(zhí)行。官網(wǎng)上例子是攝像機(jī)的跟隨,都是在所有update操作完才跟進(jìn)攝像機(jī),不然就有可能出現(xiàn)攝像機(jī)已經(jīng)推進(jìn)了,但是視角里還未有角色的空幀出現(xiàn)。
22. 當(dāng)游戲中需要頻繁創(chuàng)建一個物體對象時,我們需要怎么做來節(jié)省內(nèi)存。
做一個pool,游戲開始時預(yù)先實(shí)例化足夠的數(shù)量,然后用的時候取不用的時候收回
23. 一個場景放置多個camera并同時處于活動狀態(tài),會發(fā)生什么
實(shí)際看到的畫面由多個camera的畫面組成,由depth、Clear Flag、Culling Mask都會影響最終合成效果。
24. 簡述prefab的用處和環(huán)境
在游戲運(yùn)行時實(shí)例化,prefab相當(dāng)于一個模版,對你已有的素材、腳本、參數(shù)做一個默認(rèn)配置,以便于以后修改,同時prefab打包的內(nèi)容簡化了導(dǎo)出的操作,便于團(tuán)隊(duì)的交流。
25. 如何銷毀一個UnityEngine.Object以及其子類
Destroy
26. 為什么U3D會出現(xiàn)組件上數(shù)據(jù)丟失的情況
一般是組件上綁定的物體對象被刪除了
27.U3D下如何安全的在不同工程遷移asset數(shù)據(jù)
方法1、可以把a(bǔ)ssets目錄和Library目錄一起遷移
方法2、導(dǎo)出包
方法3、用unity帶的assets server功能
選擇藍(lán)鷗VR虛擬現(xiàn)實(shí)培訓(xùn),讓你成為一名優(yōu)秀的程序員!