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