Unity常考題目

2021-09-28 20:45:29 字數 2543 閱讀 2060

unity檢測碰撞條件:

雙方都要有碰撞器,一方有剛體就能發生碰撞

碰撞和觸發是碰撞檢測兩種方式,一種是利用碰撞器,另一種則是利用觸發器。

碰撞器與觸發器的區別:

碰撞有碰撞效果,觸發沒有碰撞效果

使用觸發器時,碰撞器根據物理引擎引發碰撞,產生碰撞的效果;

不使用時,碰撞器被物理引擎所忽略,沒有碰撞效果。

(1)怎麼優化:

在優化unity遊戲時,我們一般從四個方面:cpu、gpu、記憶體、工程配置等入手,它們都可能是影響遊戲效能瓶頸的關鍵

①壓縮自帶類庫;

②運用物件池;

③釋放assetbundle占用的資源;

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

⑤使用光照貼圖(烘焙),使用多層次細節(lod),使用著色器(shader),使用預設(prefab)。

(2)ui(圖集使用和網格重建帶來的影響)使用圖集、動靜分離

1)引起canvas對網格的重建大概有幾種情況image,text等ui元素的enable及ui元素的長、寬或color屬性的變化等。因此在一些較複雜的介面,可以多分幾個canvas出來,雖然會增加drawcall,但是減少了網格重建時間,讓效能有更好的提公升。

2)搖桿區,技能區,血條,經驗條是比較容易變化的,把這些都放到乙個叫dynamic的節點,並有自己的canvas,這樣在他們頻繁變化時,也只需要對這小部分進行網格重建,相對於整個mainui重建的開銷就小非常多了

(2)場景(光照、烘焙、相機後期處理)(3)高低適配

1)解析度、高低模、陰影效果、環境光

1.對資源載入有什麼看法。

首先資源載入這個東西,就是老大難,使用者一遍遍的吐槽載入的慢,但是誰也不願意讓載入的少導致後邊必須載入而變得卡頓。對於比較耗費的載入,屬於io操作,在遊戲剛登陸的時候,進行初始化載入。強制載入一些重要模組,比如登陸視窗(使用者輸入使用者名稱密碼的地方)等等。選擇性載入一些必要的模組:如果這人需要新手引導,則載入新手引導模組,否則不載入,反之亦然。這些使用者一定會用(或者一定不用)的模組,在登陸時候處理好。

對於應用模組:比如我開啟乙個很龐大的ui,這個怎麼載入,如果這個模組很吸金,使用者用得概率很大,那麼必須在登陸時載入,否則那只能使用者開啟的時候載入了,載入的時候要轉圈提示使用者。關於場景載入更加的莫衷一是。既然大家被面到這一步了,相信也不需要我廢話了,乙個程式有乙個程式的活法不是嗎?

8種string 字串,一旦賦值不能被修改,可以通過方法string.gsub()來修改

nil 全域性變數沒被賦值預設為nil,刪除變數就賦值為 nil

boolean bool false 和nil為假 ,其它都為真

function 函式

table 陣列、容器

number 實數 ,可以是整數,浮點數

thread 執行緒

userdata (類,其它語言轉換過來就變成userdata型別)

2.lua怎麼做熱更新

lua的執行依賴於其直譯器,通常來說就是lua.c中的**。lua在unity中作為乙個文字資源來使用,當我們通過tolua或者xlua呼叫lua**中某個函式時,直譯器會去對lua進行解釋,因為lua直譯器**允許執行,因此它會執行lua解釋後的**。

好處:可以在程式執行時,直接更新專案資源。不需要重新發布,防止玩家流失

基本就是遊戲玩法的**。網路、資源載入等基礎模組一般不會變,所有很多都是用c#寫的。說白了,不變的**用c#寫更高效,變化的**用lua寫。

打包和lua唯一的關係就是lua**檔案作為資源被打包。

assetbundle.unload(false):釋放assetbundle檔案記憶體映象

assetbundle.unload(true):釋放assetbundle檔案記憶體映象同時銷毀所有已經load的assets記憶體物件

實際執行過程中會出現用assetbundle.unload(false),但是載入的內容沒有顯示出來,導致這種問題的原因是u3d沒有處理好的乙個環節。在www載入資源完畢後,立刻對其資源進行unload,然後再進行instantiate,此時進行unload會對資源造成影響,以至於instantiate沒有貼圖或者等等問題發生。

解決辦法:

先進行instantiate, 再assetbundle.unload,或者自己寫個時間等待功能,等待1到2幀之後再進行unload。這樣就不會出現instantiate渲染中就執行unload的情況了。

unity socket

socket譯為套接字,支援tcp/ip協議網路通訊的基本操作單元,可以將套接字看做不同主機間的程序雙向通訊的端點。

socket的通訊流程

(1) 開啟乙個連線之前,需要新建立乙個socket,然後將位址和埠繫結給這個sockrt,客戶端在呼叫connect的時候,會由系統自動分配埠,因此可以省去bind

(2) 伺服器開啟監聽

(3) 客戶端連線伺服器,伺服器通過accept接收客戶端連線

(4) 客戶端和伺服器通過write和read傳送和接收資料

(5) 通過close關閉連線

python筆試常考題目 三

為物件user動態新增,然後刪除屬性name user.name ojbk del user.name 請簡述一下物件self self指的是object python物件建構函式和析構函式分別是什麼?建構函式 init 析構函式 del python類方法 靜態方法定義關鍵字是什麼?類方法使用裝飾...

軟體測試常考題

1 什麼是軟體測試?答 軟體測試是為了發現錯誤而執行程式的過程。或者說,軟體測試是根據軟體開發各階段的規格說明和程式的內部結構而精心設計一批測試用例 即輸入資料及其預期的輸出結果 並利用這些測試用例去執行程式,以發現程式錯誤的過程。2 軟體測試的目的?答 測試的目的是想以最少的人力 物力和時間找出軟...

順序表常考題

1.設順序表va中的資料元素遞增有序。試寫一演算法,將x插入到順序表的適當位置上,以保持該錶的有序性 不要用二分查詢,易錯 bool insertx pdseqlist va,int x return insert va,x,i 2.比較兩個順序表的大小 類似比較字串大小 intcmp pdseql...