unity3d面試題摘選(全),unity3d面試題摘選
本人總結的一些Unity3d高頻面試題目,希望可以協助到大家。
限於個人水平有限,只附上一些參考答案。
=======================================
資料結構和演算法很重要,圖形學也很重要!
大的遊戲公司很看重個人基礎、綜合能力;也有的看重你實際工作能力,看你的Demo。
高頻問答的問題:
一.什麼是渲染管道?
是指在顯示器上為了顯示出映像而經過的一系列必要操作。
渲染管道中的很多步驟,都要將幾何物體從一個座標系中變換到另一個座標系中去。
主要步驟有:
本地座標->視圖座標->背面裁剪->光照->裁剪->投影->視圖變換->光柵化。
二.如何最佳化記憶體?
有很多種方式,例如
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提供了幾種光源類型,分別是哪幾種?
四種。
平行光:Directional Light 點光源: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(Level of 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.請簡述向量的點乘,向量的叉乘以及向量歸一化的幾何意義?
點乘的幾何意義是:計算兩個向量之間的夾角,以及在某一方向上的投影;
叉乘的幾何意義是:建立垂直於平面,三角形,或者多邊形的向量
更多精彩請點擊 http://www.gopedu.com/
unity3D學誰可以教我完成裡面的功可以 分數全給了
這都是虛擬現實最基本的東西吧,不難,你是要思路?拖動圖片改變牆體顏色就是換材質球或者Maintexture,拖動圖片變成房間裡面的模型就是執行個體化模型,模型多就外部載入,少就resource動態載入,也可以直接情境中執行個體化,只是耗記憶體,點圖片,就要做好執行個體化的準備,放開滑鼠執行個體化,邏輯簡單,代碼也不難,這個視頻對於學生來說做的很不錯了,對於做虛擬現實的專業人員來說還需要提高,效果不行,用unity做這個不難,有哪些地方不明白的再問吧,我只給你思路,我這邊有類似工程只是不方便拿出來,建議去unity3D百度貼吧隨時提問,我每天都在,好多人會幫你解決的,祝你成功!
unity3d怎匯入已經做好的動畫?以及怎控制動畫的播放詳細過程
Unity3D中 Edit>>Project Setting>>Quality Setting 有個 Blend Weights
是配置一個頂點最多受幾個骨骼影響的,最大為4,預設為2
在做模型的時候要注意這個