Unity面試干貨
過了新年就是畢業(yè)季了, 所以這次更新一篇關(guān)于面試題的文章, 供大家提前做準備. 這些知識點可能你平時開發(fā)時經(jīng)常會用到, 也能理解, 但很多時候具體理論卻說不上來, 希望寫這篇文章對大家日后的面試能有所幫助.

一:什么是協(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相似,但不存在ArrayList所說的問題。
五:如何安全的在不同工程間安全地遷移asset數(shù)據(jù)?三種方法
1.將Assets目錄和Library目錄一起遷移
2.導出包,export Package
3.用unity自帶的assets Server功能
六:OnEnable、Awake、Start運行時的發(fā)生順序?
哪些可能在同一個對象周期中反復的發(fā)生
Awake –>OnEnable->Start,OnEnable在同一周期中可以反復地發(fā)生。
七:MeshRender中material和sharedmaterial的區(qū)別?
修改sharedMaterial將改變所有物體使用這個材質(zhì)的外觀,并且也改變儲存在工程里的材質(zhì)設(shè)置。不推薦修改由sharedMaterial返回的材質(zhì)。如果你想修改渲染器的材質(zhì),使用material替代。
八:Unity提供了幾種光源,分別是什么
四種。
平行光:Directional Light
點光源:Point Light
聚光燈:Spot Light
區(qū)域光源:Area Light
九:簡述一下對象池,你覺得在FPS里哪些東西適合使用對象池
對象池就存放需要被反復調(diào)用資源的一個空間,當一個對象回大量生成的時候如果每次都銷毀創(chuàng)建會很費時間,通過對象池把暫時不用的對象放到一個池中(也就是一個集合),當下次要重新生成這個對象的時候先去池中查找一下是否有可用的對象,如果有的話就直接拿出來使用,不需要再創(chuàng)建,如果池中沒有可用的對象,才需要重新創(chuàng)建,利用空間換時間來達到游戲的高速運行效果,在FPS游戲中要常被大量復制的對象包括子彈,敵人,粒子等
十:CharacterController和Rigidbody的區(qū)別
Rigidbody具有完全真實物理的特性,Unity中物理系統(tǒng)最基本的一個組件,包含了常用的物理特性,而CharacterController可以說是受限的的Rigidbody,具有一定的物理效果但不是完全真實的,是Unity為了使開發(fā)者能方便的開發(fā)第一人稱視角的游戲而封裝的一個組件
十一:簡述prefab的用處
在游戲運行時實例化,prefab相當于一個模板,對你已經(jīng)有的素材、腳本、參數(shù)做一個默認的配置,以便于以后的修改,同時prefab打包的內(nèi)容簡化了導出的操作,便于團隊的交流。
十二:請簡述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
更多資源請點擊:https://bycwedu.vipwan.cn/promotion_channels/630597732