Unity的一些筆試題

2022-06-28 14:24:12 字數 4369 閱讀 5755

在網路上搜到的一些unity筆試題,下面解答部分為本人重新編寫的,希望幫到大家!

1.請描述遊戲動畫有哪幾種,以及其原理。

主要有關節動畫、單一網格模型動畫(關鍵幀動畫)、骨骼動畫。

關節動畫把角色分成若干獨立部分,乙個部分對應乙個網格模型,部分的動畫連線成乙個整體的動畫,角色比較靈活quake2中使用了這種動畫。

單一網路模型動畫由乙個完整的網格模型構成,在動畫序列的關鍵幀裡記錄各個頂點的原位置及其改變量,然後插值運算實現動畫效果,角色動畫較真實。

骨骼動畫,廣泛應用的動畫方式,整合了以上兩個方式的優點,骨骼按角色特點組成一定的層次結構,由關節相連,可做相對運動,**作為單一網格蒙在骨骼之外,決定角色的外觀。**網格每乙個頂點都會受到骨骼的影響,從而實現完美的動畫。(骨骼動畫是由關節動畫發展而來的,如今基本都使用骨骼動畫來實現角色動畫)

2.alpha blend 工作原理

實際顯示顏色 = 前景顏色*alpha/255 + 背景顏色*(255-alpha)/255

3.寫光照計算中的diffuse的計算公式

實際光照強度 i= 環境光(iambient) + 漫反射光(idiffuse) + 鏡面高光(ispecular);

環境光:iambient= aintensity* acolor; (aintensity表示環境光強度,acolor表示環境光顏色)

漫反射光:idiffuse = dintensity*dcolor*n.l;

(dintensity表示漫反射強度,dcolor表示漫反射光顏色,n為該點的法向量,l為光源向量)

鏡面反射光:ispecular = sintensity*scolor*(r.v)^n;

(sintensity表示鏡面光照強度,scolor表示鏡面光顏色,r為光的反射向量,v為觀察者向量,n稱為鏡面光指數)

4.lod是什麼,優缺點是什麼

lod技術即levels of detail的簡稱,意為多細節層次。lod技術指根據物體模型的節點在顯示環境中所處的位置和重要度,決定物體渲染的資源分配,降低非重要物體的面數和細節度,從而獲得高效率的渲染運算。

優點:可根據距離動態地選擇渲染不同細節的模型

缺點:加重美工的負擔,要準備不同細節的同一模型,同樣的會稍微增加遊戲的容量。

5.兩種陰影判斷的方法工作原理

陰影由兩部分組成:本影與半影

本影:景物表面上那些沒有被光源直接照射的區域(全黑的輪廓分明的區域)

半影:景物表面上那些被某些特定光源直接照射但並非被所有特定光源直接照射的區域(半明半暗區域)

求陰影區域的方法:做兩次消隱過程

一次對每個光源進行消隱,求出對於光源而言不可見的區域l;

一次對視點的位置進行消隱,求出對於視點而言可見的面s;

shadow area= l ∩ s

陰影分為兩種:自身陰影和投射陰影

自身陰影:因物體自身的遮擋而使光線照射不到它上面的某些可見面

工作原理:利用背面剔除的方法求出,即假設視點在點光源的位置。

投射陰影:因不透明物體遮擋光線使得場景中位於該物體後面的物體或區域受不到光照照射而形成的陰影

工作原理:從光源處向物體的所有可見面投射光線,將這些面投影到場景中得到投影面,再將這些投影面與場景中的其他平面求交得出陰影多邊形,儲存這些陰影多邊形資訊,然後再按視點位置對場景進行相應處理得到所要求的檢視(利用空間換時間,每次只需依據視點位置進行一次陰影計算即可,省去了一次消隱過程)

若是動態光源此方法就無效了。

5.vertex shader是什麼?怎麼計算?

頂點著色器是一段執行在gpu上的程式,用來取代fixed pipeline中的transformation和lighting,vertex shader主要操作頂點。

vertex shader對輸入頂點完成了從local space到homogeneous space(齊次空間)的變換過程,homogeneous space即projection space的下乙個space。在這其間共有world transformation, view transformation和projection transformation及lighting幾個過程。

6.mipmap是什麼?作用?7.用u3d實現2d遊戲,有幾種方式?

1.利用引擎自帶的gui

2.把攝像機設為orthographic,用麵片作為2d元素

3.利用第三方外掛程式:ngui、2dtoolkit

8.u3d中碰撞器和觸發器的區別?

collider碰撞器會有碰撞的效果,istrigger = false,可以呼叫oncollisionenter/stay/exit函式

trigger觸發器沒有碰撞效果,istrigger = true,可以呼叫ontriggerenter/stay/exit函式

9.物體發生碰撞的必要條件

物體a必須帶有(collider+rigidbody)或者charactercontroller,另乙個物體也必須至少帶有collider

10.charactercontroller和rigidbody的區別

rigidbody具有完全真實物理的特性,而charactercontroller可以說是受限的rigidbody,具有一定的物理效果但不是完全真實的。

11.物體發生碰撞時,有幾個階段,分別對應的函式

三個階段,oncollisionenter/stay/exit函式

12.u3d中,幾種施加力的方式,描述出來

rigidbody.addforce/addforceatposition,都是rigidbody的成員函式

13.什麼叫做鏈條關節

hinge joint ,他可以模擬兩個物體間用一根鏈條連線在一起的情況,能保持兩個物體在乙個固定距離內部相互移動而不產生作用力,但是達到固定距離後就會產生拉力。(簡單說就是彈簧)

14.物體自旋轉使用的函式叫什麼

transform.rotate

15.物體繞某點旋轉使用函式叫什麼

transform.rotatearound

16.u3d提供了乙個用於儲存讀取資料的類,(playerprefs),請列出儲存讀取整形資料的函式

playerprefs.setint 與 playerprefs.getint

17.unity3d提供了幾種光源,分別是什麼

共4種,directional light、point light、spot light、area light(只用於烘培)

18.unity3d從喚醒到銷毀有一段生命週期,請列出系統自己呼叫的幾個重要方法。

awake –>onenable –> start  –> update –> fixedupdate –> lateupdate –> ongui –> reset –> ondisable –> ondestroy

19.物理更新一般在哪個系統函式裡?

fixedupdate,每固定幀繪製時執行一次,和update不同的是fixedupdate是渲染幀執行,如果你的渲染效率低下的時候fixedupdate呼叫次數就會跟著下降。fixedupdate比較適用於物理引擎的計算,因為是跟每幀渲染有關。update就比較適合做控制。

20.移動相機動作在哪個函式裡,為什麼在這個函式裡。

lateupdate,,是在所有update結束後才調,比較適合用於命令指令碼的執行。官網上例子是攝像機的跟隨,都是在所有update操作完才跟進攝像機,不然就有可能出現攝像機已經推進了,但是視角裡還未有角色的空幀出現。

21.當遊戲中需要頻繁建立乙個物體物件時,我們需要怎麼做來節省記憶體。

做乙個pool,遊戲開始時預先例項化足夠的數量,然後用的時候取不用的時候收回

22.乙個場景放置多個camera並同時處於活動狀態,會發生什麼

實際看到的畫面由多個camera的畫面組成,由depth、clear flag、culling mask都會影響最終合成效果。

23.簡述prefab的用處和環境

在遊戲執行時例項化,prefab相當於乙個模版,對你已有的素材、指令碼、引數做乙個預設配置,以便於以後修改,同時prefab打包的內容簡化了匯出的操作,便於團隊的交流。

24.如何銷毀乙個unityengine.object以及其子類

destroy

25.為什麼u3d會出現元件上資料丟失的情況

一般是元件上繫結的物體物件被刪除了

26.u3d下如何安全的在不同工程遷移asset資料

方法1,可以把assets目錄和library目錄一起遷移,

方法2,匯出包

方法3,用unity帶的assets server功能

一些筆試題

int main int argc,char argv int multi int a,int b,int c typedef int func1 int in typedef int func2 int int int 013.請寫出下列 的輸出內容 include stdio.h main 解 ...

記一些筆試題

思路 每乙個元素去與後面的元素去比較,只要相等就退出,說明已經找到第乙個重複的字元了。該字串沒有重複字元 例如 輸入 1,4,3,4,null,undefined,nan,null 輸出 6思路 將每乙個元素全部轉成字串,避免了null和undefined的影響。null undefined為tru...

一些筆試題(C C )

1.there are two variables,don t use if.else or or switch or other judgement statements,find out the biggest number of the two numbers.返回2個數中較大的數,不使用if...