Unity編輯器操作面試題集錦(上)
1.請描述遊戲動畫有幾種,以及其原理。
答案:主要有關節動畫、單一網格模型動畫(關鍵幀動畫)、骨骼動畫。
關節動畫把角色分成若干獨立部分,一個部分對應一個網格模型,部分的動畫連線成一個整
體的動畫,角色比較靈活 Quake2 中使用了這種動畫。
單一網路模型動畫由一個完整的網格模型構成, 在動畫序列的關鍵幀裡記錄各個頂點的原位
置及其改變數,然後插值運算實現動畫效果,角色動畫較真實。
骨骼動畫,廣泛應用的動畫方式,集成了以上兩個方式的優點,骨骼按角色特點組成一定的
層次結構,由關節相連,可做相對運動,面板作為單一網格蒙在骨骼之外,決定角色的外觀。
面板網格每一個頂點都會受到骨骼的影響,從而實現完美的動畫。(骨骼動畫是由關節動畫
發展而來的,如今基本都使用骨骼動畫來實現角色動畫)
2.物體發生碰撞的必要條件
答案:物體 A 必須帶有(collider+rigidbody)或者 CharacterController,另一個物體也必須至少帶有 collider。
3.GUI與UGUI的優點和缺點
答案:GUI不方便控制,UGUI所見即所得,方便控制。GUI使用在生命週期函式OnGUI中使用,指令碼來書寫控制。UGUI使用Canvas畫布和事件系統。UGUI適應螢幕上比GUI簡單。
4.一個場景放置多個carmera並同時處於活動狀態,會發生什麼
答案:實際看到的畫面由多個 camera 的畫面組成,由 depth、Clear Flag、Culling Mask 都會影響最終合成效果。
5.U3D 中用於記錄節點空間幾何資訊的元件名稱,及其父類名稱
答案:Transform 父類是 Component。
6.請簡述如何在不同解析度下保持 UI 的一致性
答案:NGUI 很好的解決了這一點,螢幕解析度的自適應性,原理就是計算出螢幕的寬高比跟原來的預設的螢幕解析度求出一個對比值,然後修改攝像機的 size。
7.為什麼 dynamic font 在 unicode 環境下優於 static font
答案:Unicode 是國際組織制定的可以容納世界上所有文字和符號的字元編碼方案。
使用動態字型時,Unity 將不會預先生成一個與所有字型的字元紋理。當需要支援亞洲語言
或者較大的字型的時候,若使用正常紋理,則字型的紋理將非常大。
8.Render 的作用?描述 MeshRender 和 SkinnedMeshRender 的關係與不同
答案:Mesh 就是指模型的網格(同名元件是用於調整網格屬性的),MeshFilter 一般是用於獲得模型網格的元件,而 MeshRender 是用於把網格渲染出來的元件
9.簡述 SkinnedMesh 的實現原理
答案:Skinned Mesh 中文一般稱作骨骼蒙皮動畫.這種動畫中包含骨骼( Bone )和蒙皮 (Skinned Mesh) 兩個部分, Bone 的層次結構和關節動畫類似, Mesh 則和關節動畫不同:關節動畫中是使用多個分散的 Mesh, 而 Skinned Mesh 中 Mesh 是一個整體,也就是說只有一個 Mesh, 實際上如果沒有骨骼讓 Mesh 運動變形, Mesh 就和靜態模型一樣了。Skinned Mesh 技術的精華在於蒙皮,所謂的皮並不是模型的貼圖。而是 Mesh 本身,蒙皮是指將 Mesh 中的頂點附著(繫結)在骨骼之上,而且每個頂點可以被多個骨骼所控制,這樣在關節處的頂點由於同時受到父子骨骼的拉扯而改變位置就消除了裂縫。可以理解為具有蒙皮資訊的 Mesh 或可當做面板用的 Mesh ,這個面板就是 Mesh 。而為了有面板功能, Mesh 還需要蒙皮資訊,即 Skin 資料,沒有 Skin 資料就是一個普通的靜態 Mesh 了。 Skin 資料決定頂點如何繫結到骨骼上。頂點的 Skin 資料包括頂點受哪些骨骼影響以及這些骨骼影響該頂點時的權重 (weight) ,另外對於每塊骨骼還需要骨骼偏移矩陣 (BoneOffsetMatrix) 用來將頂點從 Mesh 空間變換到骨骼空間。
10.Prefab 的作用?如何在移動環境的裝置下恰當地使用它?
答案:在遊戲執行時例項化,prefab 相當於一個模版,對你已有的素材、指令碼、引數做一個預設配置,以便於以後修改,同時 prefab 打包的內容簡化了匯出的操作,便於團隊的交流。
11.如何銷燬一個 UnityEngine.Object 及其子類
答案:呼叫Destory()方法。
12.為什麼 Unity3D 中會發生在元件上出現數據丟失的情況?
答案:元件上繫結的物件被刪除了。
13.如何安全的在不同工程間安全地遷移 asset 資料?三種方法
答案:1.將 Assets 目錄和 ProjectSetting 目錄一起遷移。
2.匯出包。
3.使用版本控制器Git/SVN。
14.MeshCollider 和其他 Collider 的一個主要不同點?
答案:Meshcollider 是基於頂點的。建議還是用 boxcollider,boxcollider 本身
是基於演算法,沒有面的概念。
15.當一個細小的高速物體撞向另一個較大的物體時,會出現什麼情況?如何避免?
答案:穿透(碰撞檢測失敗)(避免方法:碰撞體變大,FixedUpdate, 程式碼限制)
16.MeshRender 中 material 和 sharedmaterial 的區別?
答案:修改 sharedMaterial 將改變所有物體使用這個材質的外觀,並且也改變儲存在工程裡的材質設定。
不推薦修改由 sharedMaterial 返回的材質。如果你想修改渲染器的材質,使用 material替代。
17.用 u3d 實現 2d 遊戲,有幾種方式?
答案:1.利用引擎自帶的 GUI和2D系統。
2.把攝像機設為 Orthographic,用面片作為 2d 元素。
3.利用第三方外掛:NGUI、2dToolkit。
18.u3d 中碰撞器和觸發器的區別?
答案:1.collider 碰撞器會有碰撞的效果,IsTrigger = false,可以呼叫。
2.OnCollisionEnter/Stay/Exit 函式。
3.trigger 觸發器沒有碰撞效果,isTrigger = true,可以呼叫 OnTriggerEnter/stay/exit 函
數。
19.CharacterController 和 Rigidbody 的區別
答案:Rigidbody 具有完全真實物理的特性, 而 CharacterController 可以說是受限的 Rigidbody,具有一定的物理效果但不是完全真實的。
20.什麼叫做鏈條關節
答案:Hinge Joint ,他可以模擬兩個物體間用一根鏈條連線在一起的情況,能保持兩個物體在一個固定距離內部相互移動而不產生作用力,但是達到固定距離後就會產生拉力。 (簡單說就是彈簧).