1. 程式人生 > >Unity面試題匯總

Unity面試題匯總

坐標系 遊戲 des 還需要 我們 文件 隱藏 pos 優化內存

一、什麽是渲染管道?

    答:是指顯示器為了顯示出圖像而經過的一系列的必要操作。渲染管道中的很多步驟,都要將幾何物體從一個坐標系變換到另一個坐標系中去。

      主要步驟如下:

       本地坐標系 -- 經過世界變換矩陣 --> 世界坐標系 -- 經過視圖變換矩陣 --> 視圖坐標系 -- 經過投影變換矩陣 --> 投影坐標系 -- 經過視口變換矩陣 --> 視口坐標系

二、如何優化內存?

    答:優化內存的方式有很多種

      比如:

       1.壓縮自帶類庫;

       2.將暫時不用的,以後還需要使用的物體隱藏起來,而不是Destroy掉;

       3.釋放AssetBundle占用的資源;

       4.降低模型的片面數,降低模型的骨骼數量,降低貼圖的大小;

       5.使用光照貼圖,使用多層次細節(LOD),使用著色器(Shader),使用預設(Prefab)。

三、動態加載資源的方式,以及區別。

    答:

     1.通過Resources.Load()模塊:調用它的load函數,可以直接load並返回某個類型的Object,前提是需要把這個資源放在Resource命名的文件夾下,Unity不管有沒有場景引用,都會將其全部打包到安裝包中。

     2.通過bundle的形式:即將資源打包成 asset bundle 放在服務器或本地磁盤,然後使用www模塊get下來,之後從這個bundle中load某個Object。

     3.通過AssetDatabase.loadasset:這種方式只在editor範圍內有效,遊戲運行時沒有這個函數,他通常是在開發中調用。

     區別:

      Resoueces的方式需要把所有資源全部打入安裝包,這對遊戲的發布和版本升級(patch)是不利的,所以Unity不太推薦使用它,而都用bundle的方式代替,把資源打成幾個小的bundle,用哪個就load哪個,

      這樣有利於分包發布和版本升級。但是在開發過程中,不可能每更新一個資源就打一次bundle,所以在editor環境下可以使用AssetDatabase來模擬,這通常需要我們封裝一個dynamic resource的loader模塊,

      在不同的環境下做不同的實現。

四、什麽是協同程序?

    答:在主線程運行的同時開啟另一段邏輯處理,來協助當前程序的執行,協程很像多線程,但是不是多線程。Unity的協程是在每幀結束之後去檢測yield的條件是否滿足。

五、Unity中的碰撞器和觸發器的區別。

    答:

     1.碰撞器是觸發器的載體,而觸發器只是碰撞器身上的一個屬性。

     2.當 Is Trigger = fasle 時,碰撞器根據物理引擎引發碰撞,產生碰撞的效果。可以調用OnCollisionEnter、OnCollisionExit 函數;

     3.當 Is Trigger = true 時,碰撞器被物理引擎所忽略,沒有碰撞效果,可以調用OnTriggerEnter、OnTriggerExit 函數。

     4.如果既要檢測到物體的接觸,又不想讓碰撞檢測影響物體移動,或者要檢測一個物體是否經過空間中的你某個區域,這時就可以用到觸發器。

               

Unity面試題匯總