unity3d出鏡率最高的面試題
阿新 • • 發佈:2019-02-01
一.什麼是渲染管道?
是指在顯示器上為了顯示出影象而經過的一系列必要操作。
渲染管道中的很多步驟,都要將幾何物體從一個座標系中變換到另一個座標系中去。
主要步驟有:
本地座標->檢視座標->背面裁剪->光照->裁剪->投影->檢視變換->光柵化。
二.如何優化記憶體? 有很多種方式,例如 1.壓縮自帶類庫; 2.將暫時不用的以後還需要使用的物體隱藏起來而不是直接Destroy掉; 3.釋放AssetBundle佔用的資源; 4.降低模型的片面數,降低模型的骨骼數量,降低貼圖的大小; 5.使用光照貼圖,使用多層次細節(LOD),使用著色器(Shader),使用預設(Prefab)。
三、動態載入資源的方式?(有時候也問區別,具體請百度)
1.Resources.Load();
2.AssetBundle
四、什麼是協同程式?
在主執行緒執行時同時開啟另一段邏輯處理,來協助當前程式的執行。換句話說,開啟協程就是開啟一個執行緒。可以用來控制運動、序列以及物件的行為。
五、你用過哪些外掛?
(最好多熟悉幾個外掛,問的時候好回答)
====================================================
1.使用Unity3d實現2d遊戲,有幾種方式?
1.使用本身的GUI;
2.把攝像機的Projection(投影)值調為Orthographic(正交投影),不考慮z軸;
3.使用2d外掛,如:2DToolKit;
2.Unity3d中的碰撞器和觸發器的區別? 碰撞器有碰撞的效果,IsTrigger=false,可以呼叫OnCollisionEnter/Stay/Exit函式; 觸發器沒有碰撞效果,IsTrigger=true,可以呼叫OnTriggerEnter/Stay/Exit函式。
3.物體發生碰撞的必要條件 兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體。
4.CharacterController和Rigidbody的區別? CharacterController自帶膠囊碰撞器,裡面包含有剛體的屬性; Rigidbody就是剛體,使物體帶有剛體的特徵。
5.在物體發生碰撞的整個過程中,有幾個階段,分別列出對應的函式 三個階段 1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit
6.Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來 rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函式中。
7.什麼叫做鏈條關節? Hinge Joint,可以模擬兩個物體間用一根鏈條連線在一起的情況,能保持兩個物體在一個固定距離內部相互移動而不產生作用力,但是達到固定距離後就會產生拉力。
8.物體自身旋轉使用的函式? Transform.Rotate()
9.物體圍繞某點旋轉使用的函式? Transform.RotateAround()
10.Unity3d提供了一個用於儲存和讀取資料的類(PlayerPrefs),請列出儲存和讀取整形資料的函式 PlayerPrefs.SetInt() PlayerPrefs.GetInt()
11.Unity3d提供了幾種光源型別,分別是哪幾種? 四種。 平行光:DirectionalLight 點光源:Point Light 聚光燈:Spot Light 區域光源:Area Light
12.Unity3d指令碼從喚醒到銷燬有著一套比較完整的生命週期,請列出系統自帶的幾個重要的方法。 Awake——>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>Reset——>OnDisable——>OnDestroy
13.物理更新一般放在哪個系統函式裡? FixedUpdate,每固定幀繪製時執行一次,和Update不同的是FixedUpdate是渲染幀執行,如果你的渲染效率低下的時候FixedUpdate呼叫次數就會跟著下降。FixedUpdate比較適用於物理引擎的計算,因為是跟每幀渲染有關。Update就比較適合做控制。
14.移動攝像機的動作放在哪個系統函式中,為什麼放在這個函式中? LateUpdate,在每幀執行完畢呼叫,它是在所有Update結束後才調,比較適合用於命令指令碼的執行。官網上例子是攝像機的跟隨,都是在所有Update操作完才跟進攝像機,不然就有可能出現攝像機已經推進了,但是視角里還未有角色的空幀出現。
15.當遊戲中需要頻繁建立一個物體時,我們需要怎樣做能夠節省記憶體? 使用預製物體物件Prefab,然後複製建立。
16.在場景中放置多個Camera並同時處於活動狀態會發生什麼? 遊戲介面可以看到很多攝像機的混合。
17.請描述Prefab的作用,並描述如何在移動裝置的環境下恰當的使用它? Prefab在例項化的時候用到,主要用於經常會用到的物體,屬性方便修改。
18.如何銷燬一個UnityEngine.Object及其子類? 使用Destroy()方法;
19.請簡述Unity3d下如何安全的在不同工程間遷移asset資料,請列舉出三種方法? 1.可以把assets目錄和Library目錄一起遷移 2.匯出包 3.用Unity帶的assets Server功能
20.請描述遊戲動畫有哪幾種,以及其原理? 主要有關節動畫、骨骼動畫、單一網格模型動畫(關鍵幀動畫)。 關節動畫:把角色分成若干獨立部分,一個部分對應一個網格模型,部分的動畫連線成一個整體的動畫,角色比較靈活,Quake2中使用這種動畫; 骨骼動畫,廣泛應用的動畫方式,集成了以上兩個方式的優點,骨骼按角色特點組成一定的層次結構,有關節相連,可做相對運動,面板作為單一網格蒙在骨骼之外,決定角色的外觀; 單一網格模型動畫由一個完整的網格模型構成,在動畫序列的關鍵幀裡記錄各個頂點的原位置及其改變數,然後插值運算實現動畫效果,角色動畫較真實。
21.請描述為什麼Unity3d中會發生在元件上出現數據丟失的情況 一般是元件上繫結的物體物件被刪除了
22.alpha blend工作原理 Alpha Blend實現透明效果,不過只能針對某塊區域進行alpha操作,透明度可設。
23.寫出光照計算中的diffuse的計算公式 diffuse =Kd x colorLight x max(N*L,0);Kd 漫反射係數、colorLight 光的顏色、N 單位法線向量、L 由點指向光源的單位向量、其中N與L點乘,如果結果小於等於0,則漫反射為0。
24.Lod是什麼,優缺點是什麼? LOD(Levelof detail)多層次細節,是最常用的遊戲優化技術。它按照模型的位置和重要程度決定物體渲染的資源分配,降低非重要物體的面數和細節度,從而獲得高效率的渲染運算。
25.兩種陰影判斷的方法、工作原理。
26.Vertex Shader是什麼,怎麼計算? 頂點著色器
27.MipMap是什麼,作用? MipMapping:在三維計算機圖形的貼圖渲染中有常用的技術,為加快渲染進度和減少影象鋸齒,貼圖被處理成由一系列被預先計算和優化過的圖片組成的檔案,這樣的貼圖被稱為MipMap。
28.機試:二選一 1.用程式碼實現第三角色控制器 2.實現吊機吊物體的功能
29.反向旋轉動畫的方法是什麼? 30.碰撞檢測需要物體具備什麼屬性? 31.獲取、增加、刪除元件的命令分別是什麼? 獲取:GetComponent 增加:AddComponent 刪除:Destroy 32.Animation.CrossFade命令作用是:(C) A.動畫放大 B.動畫轉換 C.動畫的淡入為其他動畫 33.Application.loadLevel命令為:(A) A.載入關卡 B.非同步載入關卡 C.載入動作 34.除錯記錄到控制檯的命令是什麼? Debug.Log();
35.編輯器類存放路徑是什麼? 工程目錄下的Assets/Editor資料夾下。
36.使用原生GUI建立一個可以拖動的視窗命令是什麼? GUI.DragWindow(); 37.localPosition與Position的使用區別? localPosition:自身位置,相對於父級的變換的位置。 Position:在世界座標transform的位置 38.意義連線 Mathf.Round 插值 Mathf.Clamp 四捨五入 Mathf.Lerp 限制
39.寫一個計時器工具,從整點開始計時,格式為:00:00:00 40.寫出Animation的五個方法 41.怎麼拿到一個物件上指令碼的方法 GameObject.GetComponent<>();
42.上機題:用滑鼠實現在場景中拖動物體,用滑鼠滾輪實現縮放(用一個Cube即可)。 43.請簡述向量的點乘,向量的叉乘以及向量歸一化的幾何意義? 點乘的幾何意義是:計算兩個向量之間的夾角,以及在某一方向上的投影; 叉乘的幾何意義是:建立垂直於平面,三角形,或者多邊形的向量; 1 、Animation.CrossFade命令作用是(C)
A 動畫消失 B動畫轉換 C東環的淡入為其他動畫
2、Application.loadedLevel命令為(A)
A載入關卡 B非同步載入關卡 C載入動作
3、反向播放動畫的方法為?
Animation.Rewind
4、碰撞檢測需要物體具備什麼屬性?
兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體。
5、獲取、增加、刪除元件的命令分別是什麼?
獲取:GetComponent 增加:AddComponent 刪除:Destroy
6、除錯記錄到控制檯的命令式什麼?
Debug.Log();
7、編輯器類存放的路徑是什麼?
工程目錄下的Assets/Editor資料夾下。
8、使用原聲的GUI建立一個可以拖動的視窗的命令是什麼?
GUI.DragWindow();
9、localPosition與position的使用區別
localPosition:自身位置,相對於父級的變換的位置。 Position:在世界座標transform的位置
10、連線題(漢英對照)
Mathf.Round(四捨五入) 插值
Mathf.Clamp(限制) 四捨五入
Mathf.Lerp(插值) 限制
11、寫一個計時器工具,從遊戲開始計時,格式為00:00:00
12、上機題:用滑鼠實現在場景中拖動物體,用滑鼠滾輪實現縮放(用一個Cube即可)
二.如何優化記憶體? 有很多種方式,例如 1.壓縮自帶類庫; 2.將暫時不用的以後還需要使用的物體隱藏起來而不是直接Destroy掉; 3.釋放AssetBundle佔用的資源; 4.降低模型的片面數,降低模型的骨骼數量,降低貼圖的大小; 5.使用光照貼圖,使用多層次細節(LOD),使用著色器(Shader),使用預設(Prefab)。
2.Unity3d中的碰撞器和觸發器的區別? 碰撞器有碰撞的效果,IsTrigger=false,可以呼叫OnCollisionEnter/Stay/Exit函式; 觸發器沒有碰撞效果,IsTrigger=true,可以呼叫OnTriggerEnter/Stay/Exit函式。
3.物體發生碰撞的必要條件 兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體。
4.CharacterController和Rigidbody的區別? CharacterController自帶膠囊碰撞器,裡面包含有剛體的屬性; Rigidbody就是剛體,使物體帶有剛體的特徵。
5.在物體發生碰撞的整個過程中,有幾個階段,分別列出對應的函式 三個階段 1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit
6.Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來 rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函式中。
7.什麼叫做鏈條關節? Hinge Joint,可以模擬兩個物體間用一根鏈條連線在一起的情況,能保持兩個物體在一個固定距離內部相互移動而不產生作用力,但是達到固定距離後就會產生拉力。
8.物體自身旋轉使用的函式? Transform.Rotate()
9.物體圍繞某點旋轉使用的函式? Transform.RotateAround()
10.Unity3d提供了一個用於儲存和讀取資料的類(PlayerPrefs),請列出儲存和讀取整形資料的函式 PlayerPrefs.SetInt() PlayerPrefs.GetInt()
11.Unity3d提供了幾種光源型別,分別是哪幾種? 四種。 平行光:DirectionalLight 點光源:Point Light 聚光燈:Spot Light 區域光源:Area Light
12.Unity3d指令碼從喚醒到銷燬有著一套比較完整的生命週期,請列出系統自帶的幾個重要的方法。 Awake——>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>Reset——>OnDisable——>OnDestroy
13.物理更新一般放在哪個系統函式裡? FixedUpdate,每固定幀繪製時執行一次,和Update不同的是FixedUpdate是渲染幀執行,如果你的渲染效率低下的時候FixedUpdate呼叫次數就會跟著下降。FixedUpdate比較適用於物理引擎的計算,因為是跟每幀渲染有關。Update就比較適合做控制。
14.移動攝像機的動作放在哪個系統函式中,為什麼放在這個函式中? LateUpdate,在每幀執行完畢呼叫,它是在所有Update結束後才調,比較適合用於命令指令碼的執行。官網上例子是攝像機的跟隨,都是在所有Update操作完才跟進攝像機,不然就有可能出現攝像機已經推進了,但是視角里還未有角色的空幀出現。
15.當遊戲中需要頻繁建立一個物體時,我們需要怎樣做能夠節省記憶體? 使用預製物體物件Prefab,然後複製建立。
16.在場景中放置多個Camera並同時處於活動狀態會發生什麼? 遊戲介面可以看到很多攝像機的混合。
17.請描述Prefab的作用,並描述如何在移動裝置的環境下恰當的使用它? Prefab在例項化的時候用到,主要用於經常會用到的物體,屬性方便修改。
18.如何銷燬一個UnityEngine.Object及其子類? 使用Destroy()方法;
19.請簡述Unity3d下如何安全的在不同工程間遷移asset資料,請列舉出三種方法? 1.可以把assets目錄和Library目錄一起遷移 2.匯出包 3.用Unity帶的assets Server功能
20.請描述遊戲動畫有哪幾種,以及其原理? 主要有關節動畫、骨骼動畫、單一網格模型動畫(關鍵幀動畫)。 關節動畫:把角色分成若干獨立部分,一個部分對應一個網格模型,部分的動畫連線成一個整體的動畫,角色比較靈活,Quake2中使用這種動畫; 骨骼動畫,廣泛應用的動畫方式,集成了以上兩個方式的優點,骨骼按角色特點組成一定的層次結構,有關節相連,可做相對運動,面板作為單一網格蒙在骨骼之外,決定角色的外觀; 單一網格模型動畫由一個完整的網格模型構成,在動畫序列的關鍵幀裡記錄各個頂點的原位置及其改變數,然後插值運算實現動畫效果,角色動畫較真實。
21.請描述為什麼Unity3d中會發生在元件上出現數據丟失的情況 一般是元件上繫結的物體物件被刪除了
22.alpha blend工作原理 Alpha Blend實現透明效果,不過只能針對某塊區域進行alpha操作,透明度可設。
23.寫出光照計算中的diffuse的計算公式 diffuse =Kd x colorLight x max(N*L,0);Kd 漫反射係數、colorLight 光的顏色、N 單位法線向量、L 由點指向光源的單位向量、其中N與L點乘,如果結果小於等於0,則漫反射為0。
24.Lod是什麼,優缺點是什麼? LOD(Levelof detail)多層次細節,是最常用的遊戲優化技術。它按照模型的位置和重要程度決定物體渲染的資源分配,降低非重要物體的面數和細節度,從而獲得高效率的渲染運算。
25.兩種陰影判斷的方法、工作原理。
26.Vertex Shader是什麼,怎麼計算? 頂點著色器
27.MipMap是什麼,作用? MipMapping:在三維計算機圖形的貼圖渲染中有常用的技術,為加快渲染進度和減少影象鋸齒,貼圖被處理成由一系列被預先計算和優化過的圖片組成的檔案,這樣的貼圖被稱為MipMap。
28.機試:二選一 1.用程式碼實現第三角色控制器 2.實現吊機吊物體的功能
29.反向旋轉動畫的方法是什麼? 30.碰撞檢測需要物體具備什麼屬性? 31.獲取、增加、刪除元件的命令分別是什麼? 獲取:GetComponent 增加:AddComponent 刪除:Destroy 32.Animation.CrossFade命令作用是:(C) A.動畫放大 B.動畫轉換 C.動畫的淡入為其他動畫 33.Application.loadLevel命令為:(A) A.載入關卡 B.非同步載入關卡 C.載入動作 34.除錯記錄到控制檯的命令是什麼? Debug.Log();
35.編輯器類存放路徑是什麼? 工程目錄下的Assets/Editor資料夾下。
36.使用原生GUI建立一個可以拖動的視窗命令是什麼? GUI.DragWindow(); 37.localPosition與Position的使用區別? localPosition:自身位置,相對於父級的變換的位置。 Position:在世界座標transform的位置 38.意義連線 Mathf.Round 插值 Mathf.Clamp 四捨五入 Mathf.Lerp 限制
39.寫一個計時器工具,從整點開始計時,格式為:00:00:00 40.寫出Animation的五個方法 41.怎麼拿到一個物件上指令碼的方法 GameObject.GetComponent<>();
42.上機題:用滑鼠實現在場景中拖動物體,用滑鼠滾輪實現縮放(用一個Cube即可)。 43.請簡述向量的點乘,向量的叉乘以及向量歸一化的幾何意義? 點乘的幾何意義是:計算兩個向量之間的夾角,以及在某一方向上的投影; 叉乘的幾何意義是:建立垂直於平面,三角形,或者多邊形的向量; 1
A 動畫消失 B動畫轉換 C東環的淡入為其他動畫
2、Application.loadedLevel命令為(A)
A載入關卡 B非同步載入關卡 C載入動作
3、反向播放動畫的方法為?
Animation.Rewind
4、碰撞檢測需要物體具備什麼屬性?
兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體。
5、獲取、增加、刪除元件的命令分別是什麼?
獲取:GetComponent 增加:AddComponent 刪除:Destroy
6、除錯記錄到控制檯的命令式什麼?
Debug.Log();
7、編輯器類存放的路徑是什麼?
工程目錄下的Assets/Editor資料夾下。
8、使用原聲的GUI建立一個可以拖動的視窗的命令是什麼?
GUI.DragWindow();
9、localPosition與position的使用區別
localPosition:自身位置,相對於父級的變換的位置。 Position:在世界座標transform的位置
10、連線題(漢英對照)
Mathf.Round(四捨五入) 插值
Mathf.Clamp(限制) 四捨五入
Mathf.Lerp(插值) 限制
11、寫一個計時器工具,從遊戲開始計時,格式為00:00:00
12、上機題:用滑鼠實現在場景中拖動物體,用滑鼠滾輪實現縮放(用一個Cube即可)