- 相關(guān)推薦
Unity面試題(超全)
這個是我們Unity技術(shù)經(jīng)理總結(jié)出來的面試題,也是企業(yè)面試Unity開發(fā)技術(shù)人員經(jīng)常用到的。希望能夠幫助正在找工作的你們。
這個是我剛剛整理出的Unity面試題,為了幫助大家面試,同時幫助大家更好地復(fù)習Unity知識點,如果大家發(fā)現(xiàn)有什么錯誤,(包括錯別字和知識點),或者發(fā)現(xiàn)哪里描述的不清晰,請在下面留言,我會重新更新,希望大家共同來幫助開發(fā)者
一:什么是協(xié)同程序?
在主線程運行的同時開啟另一段邏輯處理,來協(xié)助當前程序的執(zhí)行,協(xié)程很像多線程,但是不是多線程,Unity的協(xié)程實在每幀結(jié)束之后去檢測yield的條件是否滿足。
二:Unity3d中的碰撞器和觸發(fā)器的區(qū)別?
碰撞器是觸發(fā)器的載體,而觸發(fā)器只是碰撞器身上的一個屬性。當Is Trigger=false時,碰撞器根據(jù)物理引擎引發(fā)碰撞,產(chǎn)生碰撞的效果,可以調(diào)用OnCollisionEnter/Stay/Exit函數(shù);
當Is Trigger=true時,碰撞器被物理引擎所忽略,沒有碰撞效果,可以調(diào)用OnTriggerEnter/Stay/Exit函數(shù)。
如果既要檢測到物體的接觸又不想讓碰撞檢測影響物體移動或要檢測一個物件是否經(jīng)過空間中的某個區(qū)域這時就可以用到觸發(fā)器
三:物體發(fā)生碰撞的必要條件?
兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體,而且必須是運動的物體帶有Rigidbody腳本才能檢測到碰撞。
四:請簡述ArrayList和List的主要區(qū)別?
####ArrayList存在不安全類型(ArrayList會把所有插入其中的數(shù)據(jù)都當做Object來處理)裝箱拆箱的操作(費時)List是接口,ArrayList是一個實現(xiàn)了該接口的類,可以被實例化
五:如何安全的在不同工程間安全地遷移asset數(shù)據(jù)?三種方法
1.將Assets目錄和Library目錄一起遷移
2.導(dǎo)出包,export Package
3.用unity自帶的assets Server功能
六:OnEnable、Awake、Start運行時的發(fā)生順序?哪些可能在同一個對象周期中反復(fù)的發(fā)生
Awake –>OnEnable->Start,OnEnable在同一周期中可以反復(fù)地發(fā)生。
七:MeshRender中material和sharedmaterial的區(qū)別?
修改sharedMaterial將改變所有物體使用這個材質(zhì)的外觀,并且也改變儲存在工程里的材質(zhì)設(shè)置。
不推薦修改由sharedMaterial返回的材質(zhì)。如果你想修改渲染器的材質(zhì),使用material替代。
八:Unity提供了幾種光源,分別是什么
四種。
平行光:Directional Light
點光源:Point Light
聚光燈:Spot Light
區(qū)域光源:Area Light
九:簡述一下對象池,你覺得在FPS里哪些東西適合使用對象池
對象池就存放需要被反復(fù)調(diào)用資源的一個空間,當一個對象回大量生成的時候如果每次都銷毀創(chuàng)建會很費時間,通過對象池把暫時不用的對象放到一個池中(也就是一個集合)。
當下次要重新生成這個對象的時候先去池中查找一下是否有可用的對象,如果有的話就直接拿出來使用,不需要再創(chuàng)建。
如果池中沒有可用的對象,才需要重新創(chuàng)建,利用空間換時間來達到游戲的高速運行效果,在FPS游戲中要常被大量復(fù)制的對象包括子彈,敵人,粒子等
十:CharacterController和Rigidbody的區(qū)別
Rigidbody具有完全真實物理的特性,Unity中物理系統(tǒng)最基本的一個組件,包含了常用的物理特性。
而CharacterController可以說是受限的的Rigidbody,具有一定的物理效果但不是完全真實的,是Unity為了使開發(fā)者能方便的開發(fā)第一人稱視角的游戲而封裝的一個組件
十一:簡述prefab的用處
在游戲運行時實例化,prefab相當于一個模板,對你已經(jīng)有的素材、腳本、參數(shù)做一個默認的配置,以便于以后的修改,同時prefab打包的內(nèi)容簡化了導(dǎo)出的操作,便于團隊的交流。
十二:請簡述sealed關(guān)鍵字用在類聲明時與函數(shù)聲明時的作用
sealed修飾的類為密封類,類聲明時可防止其他類繼承此類,在方法中聲明則可防止派生類重寫此方法。
十三:請簡述private,public,protected,internal的區(qū)別
public:對任何類和成員都公開,無限制訪問
private:僅對該類公開
protected:對該類和其派生類公開
internal:只能在包含該類的程序集中訪問該類
十四:使用Unity3d實現(xiàn)2d游戲,有幾種方式?
1.使用本身的GUI,在Unity4.6以后出現(xiàn)的UGUI
2.把攝像機的Projection(投影)值調(diào)為Orthographic(正交投影),不考慮z軸;
3.使用2d插件,如:2DToolKit,和NGUI
十五:在物體發(fā)生碰撞的整個過程中,有幾個階段,分別列出對應(yīng)的函數(shù)
三個階段,1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit
十六:Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來
rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函數(shù)中。大家可以自己去查看一下rigidbody的API
十七:什么叫做鏈條關(guān)節(jié)?
Hinge Joint,可以模擬兩個物體間用一根鏈條連接在一起的情況,能保持兩個物體在一個固定距離內(nèi)部相互移動而不產(chǎn)生作用力,但是達到固定距離后就會產(chǎn)生拉力。
十八:物體自身旋轉(zhuǎn)使用的函數(shù)?
Transform.Rotate()
十九:Unity3d提供了一個用于保存和讀取數(shù)據(jù)的類(PlayerPrefs),請列出保存和讀取整形數(shù)據(jù)的函數(shù)
PlayerPrefs.SetInt() PlayerPrefs.GetInt()
二十:Unity3d腳本從喚醒到銷毀有著一套比較完整的生命周期,請列出系統(tǒng)自帶的幾個重要的方法。
Awake——>OnEnable–>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>OnDisable——>OnDestroy
二十一:物理更新一般放在哪個系統(tǒng)函數(shù)里?
FixedUpdate,每固定幀繪制時執(zhí)行一次,和Update不同的是FixedUpdate是渲染幀執(zhí)行,如果你的渲染效率低下的時候FixedUpdate調(diào)用次數(shù)就會跟著下降。FixedUpdate比較適用于物理引擎的計算,因為是跟每幀渲染有關(guān)。Update就比較適合做控制。
二十二:在場景中放置多個Camera并同時處于活動狀態(tài)會發(fā)生什么?
游戲界面可以看到很多攝像機的混合。
二十三:如何銷毀一個UnityEngine.Object及其子類?
使用Destroy()方法;
二十四:請描述為什么Unity3d中會發(fā)生在組件上出現(xiàn)數(shù)據(jù)丟失的情況
一般是組件上綁定的物體對象被刪除了
二十五:LOD是什么,優(yōu)缺點是什么?
LOD(Level of detail)多層次細節(jié),是最常用的游戲優(yōu)化技術(shù)。它按照模型的位置和重要程度決定物體渲染的資源分配,降低非重要物體的面數(shù)和細節(jié)度,從而獲得高效率的渲染運算。缺點是增加了內(nèi)存。
二十六:MipMap是什么,作用?
MipMapping:在三維計算機圖形的貼圖渲染中有常用的技術(shù),為加快渲染進度和減少圖像鋸齒,貼圖被處理成由一系列被預(yù)先計算和優(yōu)化過的圖片組成的文件,這樣的貼圖被稱為MipMap。
二十七:請描述Interface與抽象類之間的不同
抽象類表示該類中可能已經(jīng)有一些方法的具體定義,但接口就是公公只能定義各個方法的界面 ,不能具體的實現(xiàn)代碼在成員方法中。
類是子類用來繼承的,當父類已經(jīng)有實際功能的方法時該方法在子類中可以不必實現(xiàn),直接引用父類的方法,子類也可以重寫該父類的方法。實現(xiàn)接口的時候必須要實現(xiàn)接口中所有的方法,不能遺漏任何一個。
二十八:.Net與Mono的關(guān)系?
mono是.net的一個開源跨平臺工具,就類似java虛擬機,java本身不是跨平臺語言,但運行在虛擬機上就能夠?qū)崿F(xiàn)了跨平臺。
.net只能在windows下運行,mono可以實現(xiàn)跨平臺跑,可以運行于linux,Unix,Mac OS等。
二十九:簡述Unity3D支持的作為腳本的語言的名稱
Unity的腳本語言基于Mono的.Net平臺上運行,可以使用.NET庫,這也為XML、數(shù)據(jù)庫、正則表達式等問題提供了很好的解決方案。
Unity里的腳本都會經(jīng)過編譯,他們的運行速度也很快。這三種語言實際上的功能和運行速度是一樣的,區(qū)別主要體現(xiàn)在語言特性上。JavaScript、 C#、Boo
三十:U3D中用于記錄節(jié)點空間幾何信息的組件名稱,及其父類名稱
Transform 父類是 Component
【Unity面試題超全】相關(guān)文章:
求職面試常見問題(超全版)02-11
Unity部分高頻面試試題02-19
硅谷面試題精選02-03
電信面試題07-20
Java經(jīng)典面試題12-29
Cisco的面試題09-25
IBM經(jīng)典面試題07-29
微軟面試題02-16
Java面試題01-22
面試題及答案02-06