日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Unity3D常见面试题

發(fā)布時(shí)間:2024/9/30 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity3D常见面试题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Unity3D常見面試題

目錄

C#問題 4

1.在類的構(gòu)造函數(shù)前加上static會(huì)報(bào)什么錯(cuò)?為什么? 4

2.C#?StringBuilder類型比string類型的優(yōu)勢是什么? 4

3.C#?函數(shù)Func(string?a,?string?b)Lambda表達(dá)式怎么寫? 4

4.數(shù)列1,1,2,3,5,8,13...n位數(shù)是多少?C#遞歸算法實(shí)現(xiàn) 4

5.?請(qǐng)簡述值類型與引用類型的區(qū)別 4

6.?請(qǐng)簡述ArrayListList<>的主要區(qū)別 5

7.?請(qǐng)簡述GC(垃圾回收)產(chǎn)生的原因,并描述如何避免? 5

8.?請(qǐng)描述Interface與抽象類之間的不同 5

9.下列代碼在運(yùn)行中會(huì)產(chǎn)生幾個(gè)臨時(shí)對(duì)象? 5

10.下列代碼在運(yùn)行中會(huì)發(fā)生什么問題?如何避免? 6

11.請(qǐng)簡述關(guān)鍵字Sealed用在類聲明和函數(shù)聲明時(shí)的作用 6

12.請(qǐng)簡述privatepublicprotectedinternal的區(qū)別 6

13.反射的實(shí)現(xiàn)原理? 6

14.NetMono的關(guān)系? 6

15.請(qǐng)說出4種面向?qū)ο蟮脑O(shè)計(jì)原則,并分別簡述它們的含義。 7

16.?Hashtable是無序的嗎? 7

Unity問題 7

UI 7

1.NGUI?Button怎樣接受用戶點(diǎn)擊并調(diào)用函數(shù),具體方法名稱是什么? 7

2.請(qǐng)簡述NGUIPanelAnchor的作用 7

3.為何大家都在移動(dòng)設(shè)備上尋求U3D原生GUI的替代方案 8

4.使用原生GUI創(chuàng)建一個(gè)可以拖動(dòng)的窗口命令是什么? 8

5.使用Unity3d實(shí)現(xiàn)2d游戲,有幾種方式? 8

碰撞 8

6.怎么判斷兩個(gè)平面是否相交?不能用碰撞體,說出計(jì)算方法 8

7.MeshCollider和其他Collider的一個(gè)主要不同點(diǎn)? 8

8.Unity3d中的碰撞器和觸發(fā)器的區(qū)別? 8

9.物體發(fā)生碰撞的必要條件 9

10.當(dāng)一個(gè)細(xì)小的高速物體撞向另一個(gè)較大的物體時(shí),會(huì)出現(xiàn)什么情況?如何避免? 9

動(dòng)畫 10

11.一個(gè)簡單的游戲,怪物會(huì)走動(dòng)\攻擊\死亡,游戲角色會(huì)走動(dòng),跳躍\攻擊\格擋\死亡,還會(huì)接受玩家從輸入端輸入的指令,NPC會(huì)走動(dòng),他們彼此之間可以互相通信.請(qǐng)畫出以上三種角色的UML圖示. 10

12.請(qǐng)描述游戲動(dòng)畫有哪幾種,以及其原理? 10

13.反向旋轉(zhuǎn)動(dòng)畫的方法是什么? 10

14.寫出Animation的五個(gè)方法 11

15.動(dòng)畫層(AnimationState?Layers)的作用是什么? 11

16.Itween插件的作用是什么,Itween作用于世界坐標(biāo)還是局部坐標(biāo),請(qǐng)列舉出3個(gè)其常用方法? 11

17.法線貼圖?CG動(dòng)畫? 11

線程和協(xié)程 11

18.Unity3D是否支持寫成多線程程序?如果支持的話需要注意什么? 11

19.Unity3D的協(xié)程和C#線程之間的區(qū)別是什么? 12

20.什么是協(xié)同程序? 12

四元數(shù) 12

21.四元數(shù)是什么?主要作用什么?對(duì)歐拉角的優(yōu)點(diǎn)是什么? 12

攝像機(jī) 12

22.在場景中放置多個(gè)Camera并同時(shí)處于活動(dòng)狀態(tài)會(huì)發(fā)生什么? 12

23.Unity攝像機(jī)有幾種工作方式,分別是什么? 13

預(yù)制物 13

24.Prefab的作用?如何在移動(dòng)環(huán)境的設(shè)備下恰當(dāng)?shù)厥褂盟?#xff1f; 13

unity?當(dāng)需要頻繁創(chuàng)建一個(gè)物體對(duì)象時(shí),怎樣減少內(nèi)存 13

Shader 13

25.出光照計(jì)算中的diffuse的計(jì)算公式 13

26.MeshRendermaterialshader的區(qū)別? 13

27.alpha?blend工作原理 14

28.光照貼圖?的優(yōu)勢是什么? 14

29.Vertex?Shader是什么,怎么計(jì)算? 14

系統(tǒng)函數(shù) 14

物理更新一般在哪個(gè)系統(tǒng)函數(shù)里? 14

30.OnEnableAwakeStart運(yùn)行時(shí)的發(fā)生順序?哪些可能在同一個(gè)對(duì)象周期中反復(fù)的發(fā)生? 15

31.Unity3d腳本從喚醒到銷毀有著一套比較完整的生命周期,請(qǐng)列出系統(tǒng)自帶的幾個(gè)重要的方法。 15

32.物理更新一般放在哪個(gè)系統(tǒng)函數(shù)里? 15

33.移動(dòng)攝像機(jī)的動(dòng)作放在哪個(gè)系統(tǒng)函數(shù)中,為什么放在這個(gè)函數(shù)中? 15

34.請(qǐng)簡述OnBecameVisibleOnBecameInvisible的發(fā)生時(shí)機(jī),以及這一對(duì)回調(diào)函數(shù)的意義? 15

35.Unity3d提供了一個(gè)用于保存和讀取數(shù)據(jù)的類(PlayerPrefs),請(qǐng)列出保存和讀取整形數(shù)據(jù)的函數(shù) 15

36.動(dòng)態(tài)加載資源的方式?區(qū)別是什么? 16

37.以下哪個(gè)函數(shù)在游戲進(jìn)入新場景后會(huì)被馬上調(diào)用? 16

38.如何銷毀一個(gè)UnityEngine.Object及其子類 16

39.獲取、增加、刪除組件的命令分別是什么? 16

40.Application.loadLevel命令是什么? 16

41.調(diào)試記錄到控制臺(tái)的命令是什么? 16

42.LayerMask.NameToLayer()這個(gè)方法有什么作用? 16

43.localPositionPosition的使用區(qū)別? 17

44.物體自身旋轉(zhuǎn)使用的函數(shù)? 17

45.物體圍繞某點(diǎn)旋轉(zhuǎn)使用的函數(shù)? 17

46.U3D中用于記錄節(jié)點(diǎn)空間幾何信息的組件名稱,及其父類名稱 17

47.寫一個(gè)計(jì)時(shí)器工具,從整點(diǎn)開始計(jì)時(shí),格式為:00:00:00 17

物理引擎 18

48.<憤怒的小鳥>給予初速度以后,怎么讓小鳥受到重力和空氣阻力的影響而繪制拋物線軌跡,說出具體的計(jì)算方法. 18

49.實(shí)現(xiàn)吊機(jī)吊物體的功能 18

50.上機(jī)題:用鼠標(biāo)實(shí)現(xiàn)在場景中拖動(dòng)物體,用鼠標(biāo)滾輪實(shí)現(xiàn)縮放(用一個(gè)Cube即可) 22

51.MaterialPhysic?Material區(qū)別? 24

52.CharacterControllerRigidbody的區(qū)別? 24

53.Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來 24

54.什么叫做鏈條關(guān)節(jié)? 24

55.什么是導(dǎo)航網(wǎng)格(?NavMesh)? 24

56.Unity3d提供了幾種光源類型,分別是哪幾種? 25

Unity引擎問題 25

57.簡述Unity3D支持的作為腳本的語言的名稱 25

58.向量的點(diǎn)乘、叉乘以及歸一化的意義? 25

59.矩陣相乘的意義及注意點(diǎn)? 25

60.為什么dynamic?fontunicode環(huán)境下優(yōu)于static?font 25

61.Render的作用?描述MeshRenderSkinnedMeshRender的關(guān)系與不同 26

62.簡述SkinnedMesh的實(shí)現(xiàn)原理 26

63.為什么Unity3D中會(huì)發(fā)生在組件上出現(xiàn)數(shù)據(jù)丟失的情況? 26

64.如何安全的在不同工程間安全地遷移asset數(shù)據(jù)?三種方法 26

65.Lod是什么,優(yōu)缺點(diǎn)是什么? 26

66.兩種陰影判斷的方法、工作原理。 26

67.MipMap是什么,作用? 27

68.用代碼實(shí)現(xiàn)第三角色控制器 27

69.Mecanim系統(tǒng)中,Body?Mask的作用是? 27

70.Unity連接數(shù)據(jù)庫 27

71.如何優(yōu)化內(nèi)存? 27

72.你用過哪些插件? 27

在哪個(gè)模塊下可以修改Render?Path? 28

圖形圖像 28

1.什么是渲染管道? 28

2.什么是矢量圖? 29

3.什么是矩陣?矩陣運(yùn)算? 29

4.角度和弧度的轉(zhuǎn)換 29

5.矢量標(biāo)量 29

?

C#問題

1.在類的構(gòu)造函數(shù)前加上static會(huì)報(bào)什么錯(cuò)?為什么?

答:在構(gòu)造函數(shù)如果有public修飾的靜態(tài)構(gòu)造函數(shù)時(shí)會(huì)報(bào):“靜態(tài)構(gòu)造函數(shù)中不允許出現(xiàn)訪問修飾符”,如果什么修飾符都不加的話不會(huì)報(bào)錯(cuò),靜態(tài)構(gòu)造函數(shù)一般是起初始化作用。

2.C#?StringBuilder類型比string類型的優(yōu)勢是什么?

答:StringBuilde的優(yōu)勢在于拼接,string的優(yōu)勢在于對(duì)字符串做一些處理,在使用過程中看具體的需求。

3.C#?函數(shù)Func(string?a,?string?b)Lambda表達(dá)式怎么寫?

答:(a,b)=>{}

4.數(shù)列1,1,2,3,5,8,13...n位數(shù)是多少?C#遞歸算法實(shí)現(xiàn)

答:

5.?請(qǐng)簡述值類型與引用類型的區(qū)別

答:區(qū)別:
????1.值類型存儲(chǔ)在內(nèi)存棧中,引用類型數(shù)據(jù)存儲(chǔ)在內(nèi)存堆中,而內(nèi)存單元中存放的是堆中??

存放的地址。
????2.值類型存取快,引用類型存取慢。
????3.值類型表示實(shí)際數(shù)據(jù),引用類型表示指向存儲(chǔ)在內(nèi)存堆中的數(shù)據(jù)的指針和引用。
????4.棧的內(nèi)存是自動(dòng)釋放的,堆內(nèi)存是.NET中會(huì)由GC來自動(dòng)釋放。
????5.值類型繼承自System.ValueType,引用類型繼承自System.Object

6.?請(qǐng)簡述ArrayListList<>的主要區(qū)別

答:ArrayList是非泛型列表,存儲(chǔ)數(shù)據(jù)時(shí)把所有的數(shù)據(jù)都當(dāng)成object類型存儲(chǔ),存在裝箱問題,取出來使用的時(shí)候存在拆箱問題,裝箱拆箱會(huì)使性能變差,而且存在數(shù)據(jù)安全問題,但是優(yōu)點(diǎn)在于可以讓值類型和引用類型互相轉(zhuǎn)換。

List是泛型列表,在使用的時(shí)候才去定義數(shù)據(jù)類型,泛型避免了拆箱裝箱的問題,存入讀取速度較快,類型也更安全。

7.?請(qǐng)簡述GC(垃圾回收)產(chǎn)生的原因,并描述如何避免?

答:GC回收堆上的內(nèi)存
????避免:1)減少new產(chǎn)生對(duì)象的次數(shù)
??????????2)使用公用的對(duì)象(靜態(tài)成員)
??????????3如果字符串拼接多的將String換為StringBuilder

8.?請(qǐng)描述Interface與抽象類之間的不同

答:語法不同處:1.抽象類中可以有字段,接口沒有。

2.抽象類中可以有實(shí)現(xiàn)成員,接口只能包含抽象成員。

3.抽象類中所有成員修飾符都可以使用,接口中所有的成員都是對(duì)外的,所以不需要修飾符修飾。

用法不同處:1.抽象類是概念的抽象,接口關(guān)注于行為。

???????????2.抽象類的子類與父類的關(guān)系是泛化關(guān)系,耦合度較高,而實(shí)現(xiàn)類和接口之間是實(shí)現(xiàn)的關(guān)系,耦合度比泛化低。

???????????3.一個(gè)類只能繼承一個(gè)類,但是可以實(shí)現(xiàn)多個(gè)接口。

9.下列代碼在運(yùn)行中會(huì)產(chǎn)生幾個(gè)臨時(shí)對(duì)象?

string?a?=?new?string("abc");
a?=?(a.ToUpper()?+?"123").Substring(0,?2);???

答:第一行是會(huì)出錯(cuò)的。應(yīng)該這樣初始化:

string?b?=?new?string(new?char[]{'a','b','c'});

3個(gè)臨時(shí)對(duì)象

10.下列代碼在運(yùn)行中會(huì)發(fā)生什么問題?如何避免?

List<int>?ls?=?new?List<int>(new?int[]?{?1,?2,?3,?4,?5?});

?foreach?(int?item?in?ls)

?{

?Console.WriteLine(item?*?item);

????????ls.Remove(item);

?}???

答:會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤,因?yàn)?span style="font-family:Calibri">foreach是只讀的。不能一邊遍歷一邊修改。

使用foreach時(shí)候不要對(duì)內(nèi)容進(jìn)行修改,如果要修改可以使用for

11.請(qǐng)簡述關(guān)鍵字Sealed用在類聲明和函數(shù)聲明時(shí)的作用

答:Sealed訪問修飾符用于類時(shí),該類是密封類,可防止其他類繼承此類。

在方法中使用時(shí)則可防止派生類重寫此方法。

12.請(qǐng)簡述privatepublicprotectedinternal的區(qū)別

答:public:對(duì)任何類和成員都公開,無限制訪問
????private:僅對(duì)該類公開
????protected:對(duì)該類和其派生類公開
????internal:只能在包含該類的程序集中訪問該類
????protected?internalprotected?+?internal

13.反射的實(shí)現(xiàn)原理?

答:審查元數(shù)據(jù)并收集關(guān)于它的類型信息的能力。

14.NetMono的關(guān)系?

答:mono.net的一個(gè)開源跨平臺(tái)工具。.net只能在windows下運(yùn)行,mono可以實(shí)現(xiàn)跨平臺(tái),可以運(yùn)行于linuxUnixMac?OS等。

15.請(qǐng)說出4種面向?qū)ο蟮脑O(shè)計(jì)原則,并分別簡述它們的含義。?

答:1?單一職責(zé)原則:一個(gè)類,最好只做一件事,只有一個(gè)引起它的變化.?

2?開放-封閉原則:對(duì)于擴(kuò)展是開放的,對(duì)于更改是封閉的?

3)?里氏替換原則:子類必須能夠替換其基類?

4?依賴倒置原則:依賴于抽象?

5?接口隔離原則?:使用多個(gè)小的專門的接口,而不要使用一個(gè)大的總接口。

16.?Hashtable是無序的嗎?

答:電腦沒有絕對(duì)的無序,hashtable是通過哈希碼讓開發(fā)者感覺無序。

?

?

?

?

Unity問題

UI

1.NGUI?Button怎樣接受用戶點(diǎn)擊并調(diào)用函數(shù),具體方法名稱是什么

答:1.直接監(jiān)聽事件:在按鈕上綁定一個(gè)帶有OnClick腳本,但這種方法不太好用,也不靈活。

????2.ButtonScript:在按鈕上添加BoxCollider,在添加ButtonScript腳本,把要調(diào)用的方法放到場景中一個(gè)物體上,一般放在攝像機(jī)上,因?yàn)閿z像機(jī)一直存在,然后把這個(gè)方法添加到ButtonScript腳本里寫好的委托里面,所以可以添加多個(gè)方法,一旦點(diǎn)擊就觸發(fā)事件。

2.請(qǐng)簡述NGUIPanelAnchor的作用?

答:Panel是一個(gè)容器,它將包含所有UI小部件,并負(fù)責(zé)將所包含的部件組合優(yōu)化,以減少繪制命令的調(diào)用。??

?AnchorNGUI屏幕分辨率的自適應(yīng)性,來適應(yīng)不同的分辨率的屏幕顯示。

3.為何大家都在移動(dòng)設(shè)備上尋求U3D原生GUI的替代方案

答:1.不美觀

2.OnGUI很耗費(fèi)時(shí)間

3.使用不方便?

4.?drawcall很高

4.使用原生GUI創(chuàng)建一個(gè)可以拖動(dòng)的窗口命令是什么??

答:GUI.DragWindow()

5.使用Unity3d實(shí)現(xiàn)2d游戲,有幾種方式?

答:1.使用本身的GUI

2.把攝像機(jī)的Projection(投影)值調(diào)為Orthographic(正交投影),不考慮z

3.使用2d插件,如:2DToolKit

碰撞

6.怎么判斷兩個(gè)平面是否相交?不能用碰撞體,說出計(jì)算方法

答:在兩個(gè)平面上分別取一個(gè)向量,然后看是否相交

7.MeshCollider和其他Collider的一個(gè)主要不同點(diǎn)?

答:MeshCollider是網(wǎng)格碰撞器,對(duì)于復(fù)雜網(wǎng)狀模型上的碰撞檢測,比其他的碰撞檢測精確的多,但是相對(duì)其他的碰撞檢測計(jì)算也增多了,所以一般使用網(wǎng)格碰撞也不會(huì)在面數(shù)比較高的模型上添加,而會(huì)做出兩個(gè)模型,一個(gè)超簡模能表示物體的形狀用于做碰撞檢測,一個(gè)用于顯示。

8.Unity3d中的碰撞器和觸發(fā)器的區(qū)別?

答:1.碰撞器物體不能互相進(jìn)入到對(duì)方內(nèi)部,觸發(fā)器可以

2.觸發(fā)器角色控制器可以使用,碰撞器中不能使用

3.觸發(fā)器沒有物理屬性了,碰撞器可以有力存在

4.碰撞器調(diào)用OnCollisionEnter/Stay/Exit函數(shù),觸發(fā)器調(diào)用OnTriggerEnter/Stay/Exit函數(shù)

9.物體發(fā)生碰撞的必要條件

答:兩個(gè)物體都必須帶有碰撞器(Collider),其中一個(gè)物體還必須帶有Rigidbody剛體。

?

CharacterController和Rigidbody的區(qū)別?

CharacterController自帶膠囊碰撞器,里面包含有剛體的屬性;

Rigidbody就是剛體,使物體帶有剛體的特征。

?

10.當(dāng)一個(gè)細(xì)小的高速物體撞向另一個(gè)較大的物體時(shí),會(huì)出現(xiàn)什么情況?如何避免?

答:穿透(碰撞檢測失敗)

避免的方法:把剛體的實(shí)時(shí)碰撞檢測打開Collision?Detection修改為Continuous?Dynamic

?

unity3d中物體發(fā)生碰撞的整個(gè)過程中,有幾個(gè)階段,分別列出對(duì)應(yīng)的階段函數(shù)

主要是三個(gè)階段:1.Collider.OnCollisionEnter?進(jìn)入碰撞,
OnCollisionEnter?is?called?when?this?collider/rigidbody?has?begun?touching?
another?rigidbody/collider.

當(dāng)collider/rigidbody開始觸動(dòng)另一個(gè)rigidbody/collider時(shí)OnCollisionEnter被調(diào)用。
2.Collider.OnCollisionStay?逗留碰撞,
OnCollisionStay?is?called?once?per?frame?for?every?collider/rigidbody?that?is?
touching?rigidbody/collider.

每個(gè)collider/rigidbody觸動(dòng)rigidbody/collider,將在每幀調(diào)用OnCollisionStay。通俗的說,

一個(gè)碰撞器或剛體觸動(dòng)另一個(gè)剛體或碰撞器,在每幀都會(huì)調(diào)用OnCollisionStay,直到它們之間離開不接觸。
3.Collider.OnCollisionExit?退出碰撞,
OnCollisionExit?is?called?when?this?collider/rigidbody?has?stopped?touching?
another?rigidbody/collider.

當(dāng)?collider/rigidbody停止觸動(dòng)另一個(gè)?rigidbody/collider時(shí),OnCollisionExit被調(diào)用。

?

?

動(dòng)畫

11.一個(gè)簡單的游戲,怪物會(huì)走動(dòng)\攻擊\死亡,游戲角色會(huì)走動(dòng),跳躍\攻擊\格擋\死亡,還會(huì)接受玩家從輸入端輸入的指令,NPC會(huì)走動(dòng),他們彼此之間可以互相通信.請(qǐng)畫出以上三種角色的UML圖示.

答:

?

12.請(qǐng)描述游戲動(dòng)畫有哪幾種,以及其原理??

答:主要有關(guān)節(jié)動(dòng)畫、單一網(wǎng)格模型動(dòng)畫(關(guān)鍵幀動(dòng)畫)、骨骼動(dòng)畫。?

1.關(guān)節(jié)動(dòng)畫:把角色分成若干獨(dú)立部分,一個(gè)部分對(duì)應(yīng)一個(gè)網(wǎng)格模型,部分的動(dòng)畫連接成一個(gè)整體的動(dòng)畫,角色比較靈活,Quake2中使用這種動(dòng)畫。?

2.單一網(wǎng)格模型動(dòng)畫由一個(gè)完整的網(wǎng)格模型構(gòu)成,在動(dòng)畫序列的關(guān)鍵幀里記錄各個(gè)頂點(diǎn)的原位置及其改變量,然后插值運(yùn)算實(shí)現(xiàn)動(dòng)畫效果,角色動(dòng)畫較真實(shí)。???

3.骨骼動(dòng)畫,廣泛應(yīng)用的動(dòng)畫方式,集成了以上兩個(gè)方式的優(yōu)點(diǎn),骨骼按角色特點(diǎn)組成一定的層次結(jié)構(gòu),有關(guān)節(jié)相連,可做相對(duì)運(yùn)動(dòng),皮膚作為單一網(wǎng)格蒙在骨骼之外,決定角色的外觀,皮膚網(wǎng)格每一個(gè)頂點(diǎn)都會(huì)受到骨骼的影響,從而實(shí)現(xiàn)完美的動(dòng)畫。

13.反向旋轉(zhuǎn)動(dòng)畫的方法是什么?

答:??反轉(zhuǎn)動(dòng)畫,將動(dòng)畫的速度調(diào)到-1

14.寫出Animation的五個(gè)方法??

答:AddClip?添加剪輯、Blend?混合、Play?播放、Stop?停止、Sample?采樣?CrossFade淡入淡出切換動(dòng)畫、IsPlaying是否正在播放某個(gè)動(dòng)畫?

15.動(dòng)畫層(AnimationState?Layers)的作用是什么??

答:動(dòng)畫層作為一個(gè)具有層級(jí)動(dòng)畫編輯概念的工具,可以用來制作和處理任何類型的動(dòng)畫

16.Itween插件的作用是什么,Itween作用于世界坐標(biāo)還是局部坐標(biāo),請(qǐng)列舉出3個(gè)其常用方法??

答:ITween是補(bǔ)間動(dòng)畫的一個(gè)插件,主要作用就是給出開始、結(jié)束的值、時(shí)間,此插件實(shí)現(xiàn)各種動(dòng)畫,晃動(dòng),旋轉(zhuǎn),移動(dòng),褪色,上色,音量控制等等。

?方法:1.MoveTo??物體移動(dòng)?

2.ColorTo:隨著時(shí)間改變對(duì)象的顏色組

?3.LookTo:隨時(shí)間旋轉(zhuǎn)物體讓其臉部朝向所提供的Vector3Transform位置??

17.法線貼圖?CG動(dòng)畫?

答:法線貼圖:是一種特殊的紋理,可以應(yīng)用在3D表面,讓低模呈現(xiàn)出更明顯的凹凸效果。一般應(yīng)用在CG動(dòng)畫、美術(shù)效果要求較高的單機(jī)游戲

CG動(dòng)畫:游戲中的CG動(dòng)畫其實(shí)是用3D模擬引擎制作的游戲短片,一般畫面效果比較真實(shí)。

線程和協(xié)程

18.Unity3D是否支持寫成多線程程序?如果支持的話需要注意什么?

答:Unity支持多線程,如果同時(shí)要處理很多事情或者與Unity的對(duì)象互動(dòng)小可以用thread,否則使用coroutine

注意:1.雖然支持多線程,但是僅能從主線程中訪問Unity3D的組件,對(duì)象和Unity3D系統(tǒng)調(diào)用,所以如果使用的話需要把組件中的數(shù)值傳到開啟的新線程中。
2.C#中有lock這個(gè)關(guān)鍵字,以確保只有一個(gè)線程可以在特定時(shí)間內(nèi)訪問特定的對(duì)象

19.Unity3D的協(xié)程和C#線程之間的區(qū)別是什么?

答:多線程程序同時(shí)運(yùn)行多個(gè)線程,除主線程之外的線程無法訪問Unity3D的對(duì)象、組件、方法,而在任一指定時(shí)刻只有一個(gè)協(xié)程在運(yùn)行。

20.什么是協(xié)同程序?

答:在主線程運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來協(xié)助當(dāng)前程序的執(zhí)行。換句話說,開啟協(xié)程就是開啟一個(gè)線程。可以用來控制運(yùn)動(dòng)、序列以及對(duì)象的行為。

四元數(shù)

21.四元數(shù)是什么?主要作用什么?對(duì)歐拉角的優(yōu)點(diǎn)是什么??

答:所謂四元數(shù),就是把4個(gè)實(shí)數(shù)組合起來的東西。4個(gè)元素中,一個(gè)是實(shí)部,其余3個(gè)是虛部

作用:四元數(shù)用于表示旋轉(zhuǎn)
優(yōu)點(diǎn):
1)能進(jìn)行增量旋轉(zhuǎn)
2)避免萬向鎖
3)給定方位的表達(dá)方式有兩種,互為負(fù)(歐拉角有無數(shù)種表達(dá)方式)

四元數(shù)不會(huì)有歐拉角存在的?gimbal?lock?問題[萬向節(jié)死鎖]?

四元數(shù)由4個(gè)數(shù)組成,旋轉(zhuǎn)矩陣需要9個(gè)數(shù)

兩個(gè)四元數(shù)之間更容易插值?

四元數(shù)、矩陣在多次運(yùn)算后會(huì)積攢誤差,需要分別對(duì)其做規(guī)范化(normalize)和正交化?(orthogonalize),對(duì)四元數(shù)規(guī)范化更容易?

與旋轉(zhuǎn)矩陣類似,兩個(gè)四元組相乘可表示兩次旋轉(zhuǎn)

攝像機(jī)

22.在場景中放置多個(gè)Camera并同時(shí)處于活動(dòng)狀態(tài)會(huì)發(fā)生什么?

答:游戲界面可以看到很多攝像機(jī)的混合

23.Unity攝像機(jī)有幾種工作方式,分別是什么???

答:正交和透視

正交無法看到一個(gè)物體距離自己有多遠(yuǎn),或者遠(yuǎn)近的變化,物體也不會(huì)隨著距離而收縮,所以一般做2D游戲或者是UI時(shí)會(huì)使用正交攝像機(jī)。

透視一般看物體會(huì)隨著距離有大小的變化,一般3D游戲里經(jīng)常使用這種攝像機(jī)。

預(yù)制物

24.Prefab的作用?如何在移動(dòng)環(huán)境的設(shè)備下恰當(dāng)?shù)厥褂盟?#xff1f;

答:Prefab是預(yù)制物,一般當(dāng)游戲中需要頻繁創(chuàng)建一個(gè)物體時(shí),使用預(yù)制物可以節(jié)省內(nèi)存,方便創(chuàng)建,方便對(duì)游戲物體進(jìn)行操作,方便對(duì)屬性進(jìn)行修改。

?

unity?當(dāng)需要頻繁創(chuàng)建一個(gè)物體對(duì)象時(shí),怎樣減少內(nèi)存

:動(dòng)態(tài)加載再實(shí)例化,如果自己不主動(dòng)清理內(nèi)存的話,再次加載不會(huì)增加內(nèi)存的,會(huì)自動(dòng)去取之前已經(jīng)加載好的assets,如果這一個(gè)assets你都嫌多的話,那你只能減資源了,比如,模型面數(shù),紋理尺寸等

Shader

25.出光照計(jì)算中的diffuse的計(jì)算公式?

答:實(shí)際光照強(qiáng)度l=環(huán)境光(lambient+漫反射光(Idiffuse+鏡面高光(lspecular

????環(huán)境光:lambient=環(huán)境光強(qiáng)度(Aintensity*環(huán)境光顏色(Acolor

????漫反射光:ldiffuse=鏡面光照強(qiáng)度(Dintensity*鏡面光顏色(Scolor*(光的反射向量(R.觀察者向量(V))^鏡面光指數(shù)(n

26.MeshRendermaterialshader的區(qū)別?

答:MeshRender是模型渲染的組件,有此組件物體才能顯示出來

Material是材質(zhì)球,實(shí)際就是shader的實(shí)例,并進(jìn)行賦值,貼圖、紋理、顏色等。

Shader是著色器,實(shí)際上是一段程序,還可以用來實(shí)現(xiàn)一些僅靠貼圖不容易實(shí)現(xiàn)的效果,如玻璃。

Shader大致分為:1.表面著色器

2.頂點(diǎn)和片元著色器

3.固定功能著色器

27.alpha?blend工作原理?

答:Alpha?Blend?實(shí)現(xiàn)透明效果,Color?=?原顏色*alpha/255+目標(biāo)色*255-alpha/255

28.光照貼圖?的優(yōu)勢是什么?

答:1.使用光照貼圖比使用實(shí)時(shí)光源渲染要快

2.可以降低游戲內(nèi)存消耗?

3.多個(gè)物體可以使用同一張光照貼圖??

29.Vertex?Shader是什么,怎么計(jì)算??

答:頂點(diǎn)著色器:頂點(diǎn)著色器是一段執(zhí)行在GPU上的程序,用來取代fixed?pipeline中的

transformationlightingVertex?Shader主要操作頂點(diǎn)。?

Vertex?Shader對(duì)輸入頂點(diǎn)完成了從local?spacehomogeneous?space(齊次空間)的變換過程,homogeneous?spaceprojection?space的下一個(gè)space。在這其間共有world?transformation,?view?transformationprojection?transformationlighting幾個(gè)過程。??

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

?答:4種,Directionl?light?,Point?Light?,Spot?Light,Area?Light

?

Unity系統(tǒng)API

?

物理更新一般在哪個(gè)系統(tǒng)函數(shù)里?

?答:FixedUpdate每固定幀繪制時(shí)執(zhí)行一次,和update不同的是FixedUpdate是渲染幀執(zhí)行,如果你的渲染效率低下的時(shí)候FixedUpdate調(diào)用次數(shù)就會(huì)跟著下降。FixedUpdate比較適用于物理引擎的計(jì)算,因?yàn)槭歉繋秩居嘘P(guān)。Update就比較適合做控制。

?

?

30.OnEnableAwakeStart運(yùn)行時(shí)的發(fā)生順序?哪些可能在同一個(gè)對(duì)象周期中反復(fù)的發(fā)生?

答:Awake?–>OnEnable->Start
????OnEnable在同一周期中可以反復(fù)地發(fā)生

31.Unity3d腳本從喚醒到銷毀有著一套比較完整的生命周期,請(qǐng)列出系統(tǒng)自帶的幾個(gè)重要的方法。

答:Awake——>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>Reset——>OnDisable——>OnDestroy

32.物理更新一般放在哪個(gè)系統(tǒng)函數(shù)里?

答:FixedUpdate因?yàn)椴皇艿接?jì)算機(jī)幀頻的影響,所以比較適合于做物理方面的更新。

33.移動(dòng)攝像機(jī)的動(dòng)作放在哪個(gè)系統(tǒng)函數(shù)中,為什么放在這個(gè)函數(shù)中?

答:LateUpdate,在每幀執(zhí)行完畢調(diào)用,它是在所有Update結(jié)束后才調(diào),比較適合用于命令腳本的執(zhí)行。官網(wǎng)上例子是攝像機(jī)的跟隨,都是在所有Update操作完才跟進(jìn)攝像機(jī),不然就有可能出現(xiàn)攝像機(jī)已經(jīng)推進(jìn)了,但是視角里還未有角色的空幀出現(xiàn)。

34.請(qǐng)簡述OnBecameVisibleOnBecameInvisible的發(fā)生時(shí)機(jī),以及這一對(duì)回調(diào)函數(shù)的意義?

答:當(dāng)物體是否可見切換之時(shí)。可以用于只需要在物體可見時(shí)才進(jìn)行的計(jì)算。

?????當(dāng)renderer(渲染器)在任何相機(jī)上都不可見時(shí)調(diào)用:OnBecameInvisible?當(dāng)renderer(渲染器)在任何相機(jī)上可見時(shí)調(diào)用:OnBecameVisible??

35.Unity3d提供了一個(gè)用于保存和讀取數(shù)據(jù)的類(PlayerPrefs),請(qǐng)列出保存和讀取整形數(shù)據(jù)的函數(shù)

答:PlayerPrefs.SetInt()

PlayerPrefs.GetInt()

36.動(dòng)態(tài)加載資源的方式?區(qū)別是什么?

答:1.Resources.Load();

2.AssetBundle

區(qū)別:

Resources是動(dòng)態(tài)內(nèi)部調(diào)用,Resources在編輯環(huán)境下是project窗口的一個(gè)文件夾,調(diào)用里面的資源,可以用Resources類,比如Resources.Load,打包后這個(gè)文件夾是不存在的,會(huì)統(tǒng)一生成assets資源,AssetBundle?是外部調(diào)用,要用AssetBundle?首先要先把資源打包為.assetbundle文件,再動(dòng)態(tài)的去加載這個(gè)文件,本地或者網(wǎng)絡(luò)服務(wù)器都可以。
簡單說,Resources資源的加載是動(dòng)態(tài)加載內(nèi)部的,AssetBundle?是動(dòng)態(tài)加載外部的

37.以下哪個(gè)函數(shù)在游戲進(jìn)入新場景后會(huì)被馬上調(diào)用??

答:MonoBehaviour.OnLevelWasLoaded??

38.如何銷毀一個(gè)UnityEngine.Object及其子類對(duì)象

答:Destory

39.獲取、增加、刪除組件的命令分別是什么??

答:獲取:GetComponent?

增加:AddComponent?

沒有刪除組件只有讓組件不生效:enable

40.Application.loadLevel命令是什么?

答:加載關(guān)卡?

41.調(diào)試記錄到控制臺(tái)的命令是什么?

答:?Debug.Log();??

42.LayerMask.NameToLayer()這個(gè)方法有什么作用??

答:層索引

43.localPositionPosition的使用區(qū)別??

答:localPosition:自身位置,相對(duì)于父級(jí)的變換的位置,局部坐標(biāo)其實(shí)就是自身的坐標(biāo),會(huì)隨著物體的旋轉(zhuǎn)而變化的。?

?Position:在世界坐標(biāo)transform的位置,世界坐標(biāo)是不會(huì)變的,一直以世界坐標(biāo)軸的XYZ為標(biāo)準(zhǔn)。

44.物體自身旋轉(zhuǎn)使用的函數(shù)?

答:Transform.Rotate()

45.物體圍繞某點(diǎn)旋轉(zhuǎn)使用的函數(shù)?

答:Transform.RotateAround()

46.U3D中用于記錄節(jié)點(diǎn)空間幾何信息的組件名稱,及其父類名稱

答:Transform?父類是?Component

47.寫一個(gè)計(jì)時(shí)器工具,從整點(diǎn)開始計(jì)時(shí),格式為:00:00:00??

答:

int?scend

int?minte

int?hour

void?Start()

{

scend=0

minte=0

hour=0

}

void?Update()

{

Ifscend<60

{

Scend+=time.deltime;

}

Else

{

Scend-=60;

Minte+=1;

}

If(minte>=60)

{

??Minte-=60;

??Hour+=1;

}

}

物理引擎

48.<憤怒的小鳥>給予初速度以后,怎么讓小鳥受到重力和空氣阻力的影響而繪制拋物線軌跡,說出具體的計(jì)算方法.

答:添加剛體使小鳥模擬受到重力影響。

49.實(shí)現(xiàn)吊機(jī)吊物體的功能??

1. 答:using UnityEngine; 2. using System.Collections; 3. public class QizhongjiCS : MonoBehaviour { 4. private float dianX = 0; 5. public GameObject hook; 6. private float yuandianX; 7. private Vector3 hookV; 8. private int flag=0; 9. private delegate void HookMove(); 10. private HookMove _hookMove=null; 11. private int speed=3; 12. public HookZhongWu hzw; 13. private int zwFlag=0; 14. private GameObject zhongwu; //抓住的重物; 15. public GameObject shengzi; 16. public GameObject heng; 17. // Use this for initialization 18. void Start () { 19. hookV = hook.transform.localPosition; 20. yuandianX = hookV.x; 21. } 22. // Update is called once per frame 23. void Update () { 24. if (flag == 0) { 25. if (Input.GetMouseButtonDown(0)) 26. { 27. dianX = Input.mousePosition.x; 28. } 29. else if (Input.GetMouseButton(0)) 30. { 31. float dx = Input.mousePosition.x - dianX; 32. if (Mathf.Abs(dx) > 0.1f) 33. { 34. 35. hookV.x = yuandianX + dx / 32; 36. if (hookV.x > -6 && hookV.x < 6) 37. { 38. hook.transform.localPosition = hookV; 39. } 40. 41. } 42. } 43. else if (Input.GetMouseButtonUp(0)) 44. { 45. //yuandianX = hookV.x; 46. flag = 1; 47. _hookMove = hookDown; 48. StartCoroutine(downZhua()); 49. } 50. } 51. } 52. IEnumerator downZhua() { 53. yield return new WaitForSeconds(0.01f); 54. //1、向下移動(dòng), +speed 55. //2、判斷移動(dòng)的位置 如果大于某個(gè)位置 ,返回 speed為負(fù) 56. if (_hookMove != null) 57. { 58. _hookMove(); 59. yield return StartCoroutine(downZhua()); 60. } 61. else { 62. yield return null; 63. } 64. //3、判斷移動(dòng)回到原點(diǎn) 整個(gè)鉤子向原始位置水平運(yùn)動(dòng) 65. //4、判斷鉤子回到原點(diǎn) 停止協(xié)程 flag=0 66. yield return StartCoroutine(downZhua()); 67. } 68. void hookDown() { 69. hook.transform.Translate(Vector3.down * Time.deltaTime * speed); changeShengZi(); 70. if (hook.transform.localPosition.y < -2) { 71. if (zwFlag == 1) { 72. zhongwu.transform.parent = null; 73. zhongwu = null; 74. zwFlag = 0; 75. } 76. _hookMove = hookUp; 77. } 78. } 79. void hookUp() 80. { 81. hook.transform.Translate(Vector3.up * Time.deltaTime * speed); 82. changeShengZi(); 83. if (hook.transform.localPosition.y >3.2) 84. { 85. _hookMove = HMove; 86. } 87. } 88. void HMove() 89. { 90. hook.transform.Translate(Vector3.left * Time.deltaTime * speed); 91. if (hook.transform.localPosition.x <=-4.5) 92. { 93. if (zwFlag == 0) 94. { 95. flag = 0; 96. _hookMove = null; 97. } 98. else { 99. _hookMove = hookDown; 100. } 101. } 102. } 103. public void zhuaZhongWu(GameObject zhongwu) { 104. _hookMove = hookUp; 105. zwFlag = 1; 106. this.zhongwu = zhongwu; 107. } 108. void changeShengZi() { 109. Vector3 hookPosition = hook.transform.position; 110. Vector3 hengliangP = heng.transform.position; 111. float dy = hookPosition.y - hengliangP.y; 112. Vector3 shengziP = shengzi.transform.position; 113. shengziP.y = hengliangP.y + dy / 2; 114. shengzi.transform.position = shengziP; 115. //改變 繩子長度 116. Vector3 shengziSclae = shengzi.transform.localScale; 117. shengziSclae.y = dy/2; 118. shengzi.transform.localScale = shengziSclae; 119. } 120. }

HookZhongWu.cs用來判斷?鉤子是否和重物碰撞

碰上的時(shí)候?將重物設(shè)置成鉤子的子對(duì)象??就可以實(shí)現(xiàn)帶著往上升的效果了

1. public class HookZhongWu : MonoBehaviour { 2. public QizhongjiCS qzj; 3. void OnTriggerEnter(Collider collision) 4. {//當(dāng)碰撞時(shí) 5. print("OnTriggertEnter+" + collision.gameObject.name); 6. if (collision.gameObject.name == "zhongwu") { 7. collision.gameObject.transform.parent = this.gameObject.transform; 8. Vector3 v = collision.gameObject.transform.localPosition; 9. v.y = -1.2f; 10. collision.gameObject.transform.localPosition = v; 11. qzj.zhuaZhongWu(collision.gameObject); 12. } 13. } 14. }

?

50.上機(jī)題:用鼠標(biāo)實(shí)現(xiàn)在場景中拖動(dòng)物體,用鼠標(biāo)滾輪實(shí)現(xiàn)縮放(用一個(gè)Cube即可)??

答:在場景中添加一個(gè)PlanCameraDirectional?LightCube。添加兩個(gè)腳本scrollerScirpt(掛在Camera),CubeDragScript(掛在Cube上)。

1.鼠標(biāo)滾輪實(shí)現(xiàn)縮放:將攝像機(jī)的鏡頭拉近或者拉遠(yuǎn),調(diào)整攝像機(jī)的視角就可以實(shí)現(xiàn),主要實(shí)現(xiàn)代碼如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

void Update () {//鼠標(biāo)滾輪的效果//Camera.main.fieldOfView 攝像機(jī)的視野//Camera.main.orthographicSize 攝像機(jī)的正交投影//Zoom outif (Input.GetAxis("Mouse ScrollWheel") < 0){if (Camera.main.fieldOfView <= 100) Camera.main.fieldOfView += 2;if (Camera.main.orthographicSize <= 20)Camera.main.orthographicSize += 0.5F; }//Zoom inif (Input.GetAxis("Mouse ScrollWheel") > 0){if (Camera.main.fieldOfView > 2)Camera.main.fieldOfView -= 2;if (Camera.main.orthographicSize >= 1)Camera.main.orthographicSize -= 0.5F;}}

  2.鼠標(biāo)實(shí)現(xiàn)在場景中拖動(dòng)物體:

  解決思路就是將世界坐標(biāo)轉(zhuǎn)換成屏幕坐標(biāo),然后計(jì)算物體與鼠標(biāo)之間移動(dòng)量,循環(huán)鼠標(biāo)被按下操作,得到鼠標(biāo)的當(dāng)前位置,加上計(jì)算好的移動(dòng)量,將新的坐標(biāo)賦值給物理就行了。主要是開啟一個(gè)協(xié)同程序(Corountine)來處理

 ??主要代碼如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

//?Use?this?for?initialization

????void?Start?()

????{

????????StartCoroutine(OnMouseDown());

????}

?

????IEnumerator?OnMouseDown()

????{

????????//將物體由世界坐標(biāo)系轉(zhuǎn)換為屏幕坐標(biāo)系

????????Vector3?screenSpace?=?Camera.main.WorldToScreenPoint(transform.position);//三維物體坐標(biāo)轉(zhuǎn)屏幕坐標(biāo)

????????//完成兩個(gè)步驟?1.由于鼠標(biāo)的坐標(biāo)系是2維,需要轉(zhuǎn)換成3維的世界坐標(biāo)系??

????????//????//?????????????2.只有3維坐標(biāo)情況下才能來計(jì)算鼠標(biāo)位置與物理的距離,offset即是距離

????????//將鼠標(biāo)屏幕坐標(biāo)轉(zhuǎn)為三維坐標(biāo),再算出物體位置與鼠標(biāo)之間的距離

????????Vector3?offset?=?transform.position?-?Camera.main.ScreenToWorldPoint(new?Vector3(Input.mousePosition.x,?Input.mousePosition.y,?screenSpace.z));

????????while?(Input.GetMouseButton(0))

????????{

????????????//得到現(xiàn)在鼠標(biāo)的2維坐標(biāo)系位置

????????????Vector3?curScreenSpace?=?new?Vector3(Input.mousePosition.x,?Input.mousePosition.y,?screenSpace.z);

????????????//將當(dāng)前鼠標(biāo)的2維位置轉(zhuǎn)換成3維位置,再加上鼠標(biāo)的移動(dòng)量

????????????Vector3?curPosition?=?Camera.main.ScreenToWorldPoint(curScreenSpace)?+?offset;

????????????//curPosition就是物體應(yīng)該的移動(dòng)向量賦給transform的position屬性

????????????transform.position?=?curPosition;

????????????yield?return?new?WaitForFixedUpdate();?//這個(gè)很重要,循環(huán)執(zhí)行

????????}

????}

?

51.MaterialPhysic?Material區(qū)別?

答:PhysicMaterial?物理材質(zhì):主要是控制物體的摩擦,彈力等物理屬性。?

Material材質(zhì):主要是控制一個(gè)物體的顏色,質(zhì)感等顯示。

52.CharacterControllerRigidbody的區(qū)別?

答:CharacterController自帶膠囊碰撞器,里面包含有剛體的屬性;

Rigidbody就是剛體,使物體帶有剛體的特征。

53.Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來

答:rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函數(shù)中。

54.什么叫做鏈條關(guān)節(jié)?

答:Hinge?Joint,可以模擬兩個(gè)物體間用一根鏈條連接在一起的情況,能保持兩個(gè)物體在一個(gè)固定距離內(nèi)部相互移動(dòng)而不產(chǎn)生作用力,但是達(dá)到固定距離后就會(huì)產(chǎn)生拉力。

55.什么是導(dǎo)航網(wǎng)格(?NavMesh)???

答:?Unity內(nèi)一種用于實(shí)現(xiàn)自動(dòng)尋路的網(wǎng)格??

56.Unity3d提供了幾種光源類型,分別是哪幾種?

答:四種。

平行光:Directional?Light

點(diǎn)光源:Point?Light

聚光燈:Spot?Light

區(qū)域光源:Area?Light

Unity引擎問題

57.簡述Unity3D支持的作為腳本的語言的名稱

答:Unity的腳本語言基于Mono.Net平臺(tái)上運(yùn)行,可以使用.NET庫,這也為XML、數(shù)據(jù)庫、正則表達(dá)式等問題提供了很好的解決方案。
Unity里的腳本都會(huì)經(jīng)過編譯,他們的運(yùn)行速度也很快。這三種語言實(shí)際上的功能和運(yùn)行速度是一樣的,區(qū)別主要體現(xiàn)在語言特性上。
JavaScript

C#
Boo?

58.向量的點(diǎn)乘、叉乘以及歸一化的意義?

答:1)點(diǎn)乘計(jì)算兩個(gè)向量之間的夾角,還可表示某一方向的投影
2)叉乘得到的是法向量
3)標(biāo)準(zhǔn)化向量:用在只關(guān)系方向,不關(guān)心大小的時(shí)候

59.矩陣相乘的意義及注意點(diǎn)

答:用于表示線性變換:旋轉(zhuǎn)、縮放、投影、平移、仿射
注意:矩陣的蠕變:誤差的積累

60.為什么dynamic?fontunicode環(huán)境下優(yōu)于static?font

答:Unicode是國際組織制定的可以容納世界上所有文字和符號(hào)的字符編碼方案。
使用動(dòng)態(tài)字體時(shí),Unity將不會(huì)預(yù)先生成一個(gè)與所有字體的字符紋理。當(dāng)需要支持亞洲語言或者較大的字體的時(shí)候,若使用正常紋理,則字體的紋理將非常大。

61.Render的作用?描述MeshRenderSkinnedMeshRender的關(guān)系與不同

答:render是渲染器,渲染器可以使物體顯示在屏幕上。

MeshRender是網(wǎng)格渲染,SkinnedMeshRender是蒙皮網(wǎng)格渲染器

62.簡述SkinnedMesh的實(shí)現(xiàn)原理

答:骨骼蒙皮動(dòng)畫,模型本身是靜態(tài)的,是因?yàn)橥ㄟ^蒙皮,使模型每個(gè)點(diǎn)都有Skin數(shù)據(jù),Skin數(shù)據(jù)包括頂點(diǎn)受到哪些骨骼影響以及這些骨骼影響頂點(diǎn)的權(quán)重值,還有動(dòng)畫數(shù)據(jù),有了Skin數(shù)據(jù)的模型就可以根據(jù)動(dòng)畫數(shù)據(jù)進(jìn)行顯示動(dòng)畫了。?

63.為什么Unity3D中會(huì)發(fā)生在組件上出現(xiàn)數(shù)據(jù)丟失的情況?

答:組件上綁定的對(duì)象被刪除了

64.如何安全的在不同工程間安全地遷移asset數(shù)據(jù)?三種方法

答:1Assets目錄和Library目錄一起遷移

2導(dǎo)出包

3unity自帶的assets?Server功能

65.Lod是什么,優(yōu)缺點(diǎn)是什么??

答:LODLevel?of?detail簡稱,意為多層次細(xì)節(jié),是最常用的游戲優(yōu)化技術(shù),LOD技術(shù)指根據(jù)物體模型的幾點(diǎn)在顯示環(huán)境中所處的位置和重要性,決定物體渲染的資源分配,降低非重要物體的面數(shù)和細(xì)節(jié)度,從而獲得高效率的渲染運(yùn)算。

???優(yōu)點(diǎn):可根據(jù)距離動(dòng)態(tài)的選擇渲染不同細(xì)節(jié)的模型

缺點(diǎn):增加美工工作量,增大了游戲的容量。

66.兩種陰影判斷的方法、工作原理。?

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

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

投射陰影:因不透明物體遮擋光線使得場景中位于該物體后面的物體或區(qū)域收不到光照照射而形成的陰影。

工作原理:從光源處向物體的所有可見面投射光線,將這些面投影到場景中得到投影面,再將這些投影面與場景中的其他平面求交得出陰影多邊形,保存這些陰影多邊形信息,然后在按視點(diǎn)位置對(duì)場景進(jìn)行相應(yīng)處理得到所要求的師徒(利用空間換時(shí)間,每次只需依據(jù)視點(diǎn)位置進(jìn)行一次陰影計(jì)算即可,省去了一次消隱過程)若是動(dòng)態(tài)光源此方法就無效了。

67.MipMap是什么,作用??

答:MipMapping:在三維計(jì)算機(jī)圖形的貼圖渲染中有常用的技術(shù),為加快渲染進(jìn)度和減少圖像鋸齒,貼圖被處理成由一系列被預(yù)先計(jì)算和優(yōu)化過的圖片組成的文件,這樣的貼圖被稱為MipMap??

68.用代碼實(shí)現(xiàn)第三角色控制器?

答:??

69.Mecanim系統(tǒng)中,Body?Mask的作用是?

答:指定身體的某一部分是否參與渲染??

70.Unity連接數(shù)據(jù)庫?

答:需要得到Mono.Data.Sqlite.dll?文件與System.Data.dll文件??

71.如何優(yōu)化內(nèi)存?

答:1.壓縮自帶類庫

2.將暫時(shí)不用的以后還需要使用的物體隱藏起來而不是直接Destroy

3.釋放AssetBundle占用的資源

4.降低模型的片面數(shù),降低模型的骨骼數(shù)量,降低貼圖的大小

5.使用光照貼圖

6.使用多層次細(xì)節(jié)(LOD)

7.使用著色器(Shader)

8.使用預(yù)設(shè)(Prefab)

72.你用過哪些插件?

答:NGUI/DF/ITeen

m

?

在哪個(gè)模塊下可以修改Render?Path?

a.?Camera

b.?Light

c.?Render?settings

d.?ProjectSetting=Player=OtherSettings

?

?

圖形圖像

1.什么是渲染管道?

答:是指在顯示器上為了顯示出圖像而經(jīng)過的一系列必要操作。

渲染管道中的很多步驟,都要將幾何物體從一個(gè)坐標(biāo)系中變換到另一個(gè)坐標(biāo)系中去。

主要有三步:應(yīng)用程序階段,幾何階段?光柵階段

本地坐標(biāo)->視圖坐標(biāo)->背面裁剪->光照->裁剪->投影->視圖變換->光柵化。

2.什么是矢量圖?

答:計(jì)算機(jī)中顯示的圖形一般可以分為兩大類——矢量圖和位圖。矢量圖使用直線和曲線來描述圖形,這些圖形的元素是一些點(diǎn)、線、矩形、多邊形、圓和弧線等等,它們都是通過數(shù)學(xué)公式計(jì)算獲得的。例如一幅花的矢量圖形實(shí)際上是由線段形成外框輪廓,由外框的顏色以及外框所封閉的顏色決定花顯示出的顏色。由于矢量圖形可通過公式計(jì)算獲得,所以矢量圖形文件體積一般較小。矢量圖形最大的優(yōu)點(diǎn)是無論放大、縮小或旋轉(zhuǎn)等不會(huì)失真;最大的缺點(diǎn)是難以表現(xiàn)色彩層次豐富的逼真圖像效果。

3.什么是矩陣?矩陣運(yùn)算?

答:矩陣:橫軸排列的二維數(shù)據(jù)表格

矩陣運(yùn)算:

加減?限制條件:行和列必須相同,對(duì)應(yīng)相加相減得到結(jié)果

乘法?限制條件:要求左矩陣的行和右矩陣的列必須同,行數(shù)和左矩陣相等,列數(shù)和右矩陣相等,結(jié)果的第i行第j列,是左矩陣的第i行和右矩陣的第j列逐個(gè)相乘并把結(jié)果相加,得到結(jié)果是結(jié)果?的?第i行第j

4.角度和弧度的轉(zhuǎn)換

答:角度和弧度

度和弧度之間的換算??1弧度?=?180度?/pi(約57.3

???????????????????????1=pi/180弧度(約0.017

5.矢量標(biāo)量

答:矢量有方向如力速度?標(biāo)量只有大小沒有方向如溫度

矢量取模就是只要大小不要方向

^單位向量?有方向??大小為1的向量

?

矢量的加法:是矢量的幾何和,服從平行四邊形規(guī)則

矢量滿足交換律,滿足結(jié)合律

?

在直角坐標(biāo)系中,矢量等于騎在坐標(biāo)軸上投影的矢量之和(二維矢量可以看做三維矢量的特例也就是說??三維成立,二維也成立)

?

矢量減法:

大小相等?方向相反?稱為逆矢量

?

任意多個(gè)矢量首尾相連接組成閉合多邊形,其結(jié)果必為0

矢量的乘法:點(diǎn)積(內(nèi)積、標(biāo)量積)、叉積(外積)結(jié)果是矢量

點(diǎn)積方法?dot

?

?

?

?

Unity面試題1.B??2.?A??3.?B??4.?B??5.?D??6.?D?7.D??8.A??9.B?

?

?

?

?

?

?

?

1.D??2.C??3.C??4.A??5.D??6.B.D??7.B??8.c??9.D??10.a

?

?

?

?

?

;A

?

???這三題都有了!?

?

?

?

?

?

?


總結(jié)

以上是生活随笔為你收集整理的Unity3D常见面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。