在網絡上搜到的一些Unity筆試題,下面解答部分爲本人從新編寫的,但願幫到你們!安全
1.請描述遊戲動畫有哪幾種,以及其原理。網絡
主要有關節動畫、單一網格模型動畫(關鍵幀動畫)、骨骼動畫。app
關節動畫把角色分紅若干獨立部分,一個部分對應一個網格模型,部分的動畫鏈接成一個總體的動畫,角色比較靈活Quake2中使用了這種動畫。ide
單一網絡模型動畫由一個完整的網格模型構成,在動畫序列的關鍵幀裏記錄各個頂點的原位置及其改變量,而後插值運算實現動畫效果,角色動畫較真實。函數
骨骼動畫,普遍應用的動畫方式,集成了以上兩個方式的優勢,骨骼按角色特色組成必定的層次結構,由關節相連,可作相對運動,皮膚做爲單一網格蒙在骨骼以外,決定角色的外觀。皮膚網格每個頂點都會受到骨骼的影響,從而實現完美的動畫。(骨骼動畫是由關節動畫發展而來的,現在基本都使用骨骼動畫來實現角色動畫)優化
2.alpha blend 工做原理動畫
實際顯示顏色 = 前景顏色*Alpha/255 + 背景顏色*(255-Alpha)/255spa
3.寫光照計算中的diffuse的計算公式插件
實際光照強度 I= 環境光(Iambient) + 漫反射光(Idiffuse) + 鏡面高光(Ispecular);3d
環境光: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
陰影分爲兩種:自身陰影和投射陰影
自身陰影:因物體自身的遮擋而使光線照射不到它上面的某些可見面
工做原理:利用背面剔除的方法求出,即假設視點在點光源的位置。
投射陰影:因不透明物體遮擋光線使得場景中位於該物體後面的物體或區域受不到光照照射而造成的陰影
工做原理:從光源處向物體的全部可見面投射光線,將這些面投影到場景中獲得投影面,再將這些投影面與場景中的其餘平面求交得出陰影多邊形,保存這些陰影多邊形信息,而後再按視點位置對場景進行相應處理獲得所要求的視圖(利用空間換時間,每次只需依據視點位置進行一次陰影計算便可,省去了一次消隱過程)
如果動態光源此方法就無效了。
5.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幾個過程。
6.MipMap是什麼?做用?
在三維計算機圖形的貼圖渲染中有一個經常使用的技術被稱爲Mipmapping。爲了加快渲染速度和減小圖像鋸齒,貼圖被處理成由一系列被預先計算和優化過的圖片組成的文件,這樣的貼圖被稱爲 MIP map 或者 mipmap。
7.用u3d實現2d遊戲,有幾種方式?
1.利用引擎自帶的GUI
2.把攝像機設爲Orthographic,用面片做爲2d元素
3.利用第三方插件:NGUI、2dToolkit
8.u3d中碰撞器和觸發器的區別?
collider碰撞器會有碰撞的效果,IsTrigger = false,能夠調用OnCollisionEnter/Stay/Exit函數
trigger觸發器沒有碰撞效果,isTrigger = true,能夠調用OnTriggerEnter/stay/exit函數
9.物體發生碰撞的必要條件
物體A必須帶有(collider+rigidbody)或者CharacterController,另外一個物體也必須至少帶有collider
10.CharacterController和Rigidbody的區別
Rigidbody具備徹底真實物理的特性,而CharacterController能夠說是受限的Rigidbody,具備必定的物理效果但不是徹底真實的。
11.物體發生碰撞時,有幾個階段,分別對應的函數
三個階段,OnCollisionEnter/Stay/Exit函數
12.u3d中,幾種施加力的方式,描述出來
rigidbody.AddForce/AddForceAtPosition,都是rigidbody的成員函數
13.什麼叫作鏈條關節
Hinge Joint ,他能夠模擬兩個物體間用一根鏈條鏈接在一塊兒的狀況,能保持兩個物體在一個固定距離內部相互移動而不產生做用力,可是達到固定距離後就會產生拉力。(簡單說就是彈簧)
14.物體自旋轉使用的函數叫什麼
transform.Rotate
15.物體繞某點旋轉使用函數叫什麼
transform.RotateAround
16.u3d提供了一個用於保存讀取數據的類,(playerPrefs),請列出保存讀取整形數據的函數
PlayerPrefs.SetInt 與 PlayerPrefs.GetInt
17.unity3d提供了幾種光源,分別是什麼
共4種,Directional Light、Point Light、Spot Light、Area Light(只用於烘培)
18.unity3d從喚醒到銷燬有一段生命週期,請列出系統本身調用的幾個重要方法。
Awake –>OnEnable –> Start –> Update –> FixedUpdate –> LateUpdate –> OnGUI –> Reset –> OnDisable –> OnDestroy
19.物理更新通常在哪一個系統函數裏?
FixedUpdate,每固定幀繪製時執行一次,和update不一樣的是FixedUpdate是渲染幀執行,若是你的渲染效率低下的時候FixedUpdate調用次數就會跟着降低。FixedUpdate比較適用於物理引擎的計算,由於是跟每幀渲染有關。Update就比較適合作控制。
20.移動相機動做在哪一個函數裏,爲何在這個函數裏。
LateUpdate,,是在全部update結束後才調,比較適合用於命令腳本的執行。官網上例子是攝像機的跟隨,都是在全部update操做完纔跟進攝像機,否則就有可能出現攝像機已經推動了,可是視角里還未有角色的空幀出現。
21.當遊戲中須要頻繁建立一個物體對象時,咱們須要怎麼作來節省內存。
作一個pool,遊戲開始時預先實例化足夠的數量,而後用的時候取不用的時候收回
22.一個場景放置多個camera並同時處於活動狀態,會發生什麼
實際看到的畫面由多個camera的畫面組成,由depth、Clear Flag、Culling Mask都會影響最終合成效果。
23.簡述prefab的用處和環境
在遊戲運行時實例化,prefab至關於一個模版,對你已有的素材、腳本、參數作一個默認配置,以便於之後修改,同時prefab打包的內容簡化了導出的操做,便於團隊的交流。
24.如何銷燬一個UnityEngine.Object以及其子類
Destroy
25.爲何u3d會出現組件上數據丟失的狀況
通常是組件上綁定的物體對象被刪除了
26.u3d下如何安全的在不一樣工程遷移asset數據
方法1,能夠把assets目錄和Library目錄一塊兒遷移,
方法2,導出包
方法3,用unity帶的assets server功能