第一部分
1.請(qǐng)簡(jiǎn)述值類(lèi)型與引用類(lèi)型的區(qū)別
2.C#中所有引用類(lèi)型的基類(lèi)是什么
3.請(qǐng)簡(jiǎn)述ArrayList和List<Int>的主要區(qū)別
4.請(qǐng)簡(jiǎn)述GC(垃圾回收)產(chǎn)生的原因,并描述如何避免?
5.請(qǐng)描述Interface與抽象類(lèi)之間的不同
6.下列代碼在運(yùn)行中會(huì)產(chǎn)生幾個(gè)臨時(shí)對(duì)象?
7.下列代碼在運(yùn)行中會(huì)發(fā)生什么問(wèn)題?如何避免?
8.請(qǐng)簡(jiǎn)述關(guān)鍵字Sealed用在類(lèi)聲明和函數(shù)聲明時(shí)的作用
9.請(qǐng)簡(jiǎn)述PRivate,public,protected,internal的區(qū)別
10.反射的實(shí)現(xiàn)原理?
11. .Net與Mono的關(guān)系?
12.簡(jiǎn)述unity3d支持的作為腳本的語(yǔ)言的名稱(chēng)
13.Unity3D是否支持寫(xiě)成多線程程序?如果支持的話需要注意什么?
14.Unity3D的協(xié)程和C#線程之間的區(qū)別是什么?
15.U3D中用于記錄節(jié)點(diǎn)空間幾何信息的組件名稱(chēng),及其父類(lèi)名稱(chēng)
16.簡(jiǎn)述四元數(shù)的作用,四元數(shù)對(duì)歐拉角的優(yōu)點(diǎn)?
17.向量的點(diǎn)乘、叉乘以及歸一化的意義?
18.矩陣相乘的意義及注意點(diǎn)
19.為何大家都在移動(dòng)設(shè)備上尋求U3D原生GUI的替代方案
20.請(qǐng)簡(jiǎn)述如何在不同分辨率下保持UI的一致性
21.為什么dynamic font在unicode環(huán)境下優(yōu)于static font
22.Render的作用?描述MeshRender和SkinnedMeshRender的關(guān)系與不同
23.簡(jiǎn)述SkinnedMesh的實(shí)現(xiàn)原理
24.在場(chǎng)景中放置多個(gè)Camera并同時(shí)處于活動(dòng)狀態(tài)會(huì)發(fā)生什么?
25.Prefab的作用?如何在移動(dòng)環(huán)境的設(shè)備下恰當(dāng)?shù)厥褂盟?/p>
26.如何銷(xiāo)毀一個(gè)UnityEngine.Object及其子類(lèi)
27.為什么Unity3D中會(huì)發(fā)生在組件上出現(xiàn)數(shù)據(jù)丟失的情況?
28.如何安全的在不同工程間安全地遷移asset數(shù)據(jù)?三種方法
29.MeshCollider和其他Collider的一個(gè)主要不同點(diǎn)?
30.當(dāng)一個(gè)細(xì)小的高速物體撞向另一個(gè)較大的物體時(shí),會(huì)出現(xiàn)什么情況?如何避免?
31.OnEnable、Awake、Start運(yùn)行時(shí)的發(fā)生順序?哪些可能在同一個(gè)對(duì)象周期中反復(fù)的發(fā)生?
32.請(qǐng)簡(jiǎn)述OnBecameVisible及OnBecameInvisible的發(fā)生時(shí)機(jī),以及這一對(duì)回調(diào)函數(shù)的意義?
33.Unity3D如何獲知場(chǎng)景中需要加載的數(shù)據(jù)?
34.MeshRender中material和sharedmaterial的區(qū)別?
第二部分
1.請(qǐng)描述游戲動(dòng)畫(huà)有哪幾種,以及其原理。
2.alpha blend 工作原理
3.寫(xiě)光照計(jì)算中的diffuse的計(jì)算公式
4.lod是什么,優(yōu)缺點(diǎn)是什么
5.兩種陰影判斷的方法工作原理
6.MipMap是什么?作用?
7.用u3d實(shí)現(xiàn)2d游戲,有幾種方式?
8.u3d中碰撞器和觸發(fā)器的區(qū)別?
9.物體發(fā)生碰撞的必要條件
10.CharacterController和Rigidbody的區(qū)別
11.物體發(fā)生碰撞時(shí),有幾個(gè)階段,分別對(duì)應(yīng)的函數(shù)
12.u3d中,幾種施加力的方式,描述出來(lái)。
13.什么叫做鏈條關(guān)節(jié)
14.物體自旋轉(zhuǎn)使用的函數(shù)叫什么
15.物體繞某點(diǎn)旋轉(zhuǎn)使用函數(shù)叫什么
16.u3d提供了一個(gè)用于保存讀取數(shù)據(jù)的類(lèi),(playerPrefs),請(qǐng)列出保存讀取整形數(shù)據(jù)的函數(shù)
17.unity3d提供了幾種光源,分別是什么
18.unity3d從喚醒到銷(xiāo)毀有一段生命周期,請(qǐng)列出系統(tǒng)自己調(diào)用的幾個(gè)重要方法。
19.物理更新一般在哪個(gè)系統(tǒng)函數(shù)里?
20.移動(dòng)相機(jī)動(dòng)作在哪個(gè)函數(shù)里,為什么在這個(gè)函數(shù)里。
21.當(dāng)游戲中需要頻繁創(chuàng)建一個(gè)物體對(duì)象時(shí),我們需要怎么做來(lái)節(jié)省內(nèi)存。
22.一個(gè)場(chǎng)景放置多個(gè)camera并同時(shí)處于活動(dòng)狀態(tài),會(huì)發(fā)生什么
23.簡(jiǎn)述prefab的用處和環(huán)境
24.如何銷(xiāo)毀一個(gè)UnityEngine.Object以及其子類(lèi)
25.為什么u3d會(huì)出現(xiàn)組件上數(shù)據(jù)丟失的情況
26.u3d下如何安全的在不同工程遷移asset數(shù)據(jù)
第三部分
1.什么是渲染管道?
2.如何優(yōu)化內(nèi)存?
3、動(dòng)態(tài)加載資源的方式?
4、什么是協(xié)同程序?
5、你用過(guò)哪些插件?
第四部分
1.反向旋轉(zhuǎn)動(dòng)畫(huà)的方法是什么?
2.碰撞檢測(cè)需要物體具備什么屬性?
3.用代碼實(shí)現(xiàn)第三角色控制器
4.實(shí)現(xiàn)吊機(jī)吊物體的功能
5.獲取、增加、刪除組件的命令分別是什么?
6.Animation.CrossFade命令作用是
7.application.loadLevel命令為
8.調(diào)試記錄到控制臺(tái)的命令是什么?
9.編輯器類(lèi)存放路徑是什么?
10.使用原生GUI創(chuàng)建一個(gè)可以拖動(dòng)的窗口命令是什么?
11.localPosition與Position的使用區(qū)別?
12.意義連線
13.寫(xiě)一個(gè)計(jì)時(shí)器工具,從整點(diǎn)開(kāi)始計(jì)時(shí),格式為:00:00:00
14.寫(xiě)出Animation的五個(gè)方法
15.怎么拿到一個(gè)對(duì)象上腳本的方法
16.上機(jī)題
17.請(qǐng)簡(jiǎn)述向量的點(diǎn)乘,向量的叉乘以及向量歸一化的幾何意義?
第五部分
1,在類(lèi)的構(gòu)造函數(shù)前加上static會(huì)報(bào)什么錯(cuò)?為什么?2,C# String類(lèi)型比stringBuilder類(lèi)型的優(yōu)勢(shì)是什么?3,C# 函數(shù)Func(string a, string b)用Lambda表達(dá)式怎么寫(xiě)?4,數(shù)列1,1,2,3,5,8,13…第n位數(shù)是多少?用C#遞歸算法實(shí)現(xiàn)5,UML圖示.
答案區(qū):
第一部分
1. 請(qǐng)簡(jiǎn)述值類(lèi)型與引用類(lèi)型的區(qū)別答:區(qū)別:1.值類(lèi)型存儲(chǔ)在內(nèi)存棧中,引用類(lèi)型數(shù)據(jù)存儲(chǔ)在內(nèi)存堆中,而內(nèi)存單元中存放的是堆中存放的地址。2.值類(lèi)型存取快,引用類(lèi)型存取慢。3.值類(lèi)型表示實(shí)際數(shù)據(jù),引用類(lèi)型表示指向存儲(chǔ)在內(nèi)存堆中的數(shù)據(jù)的指針和引用。4.棧的內(nèi)存是自動(dòng)釋放的,堆內(nèi)存是.NET中會(huì)由GC來(lái)自動(dòng)釋放。5.值類(lèi)型繼承自System.ValueType,引用類(lèi)型繼承自System.Object。可參考http://www.cnblogs.com/JimmyZhang/archive/2008/01/31/1059383.html2.C#中所有引用類(lèi)型的基類(lèi)是什么答:引用類(lèi)型的基類(lèi)是System.Object 值類(lèi)型的基類(lèi)是System.ValueType同時(shí),值類(lèi)型也隱式繼承自System.Object3.請(qǐng)簡(jiǎn)述ArrayList和List<Int>的主要區(qū)別答:ArrayList存在不安全類(lèi)型‘(ArrayList會(huì)把所有插入其中的數(shù)據(jù)都當(dāng)做Object來(lái)處理)裝箱拆箱的操作(費(fèi)時(shí))List是接口,ArrayList是一個(gè)實(shí)現(xiàn)了該接口的類(lèi),可以被實(shí)例化。4.請(qǐng)簡(jiǎn)述GC(垃圾回收)產(chǎn)生的原因,并描述如何避免?答:GC回收堆上的內(nèi)存避免:1)減少new產(chǎn)生對(duì)象的次數(shù)2)使用公用的對(duì)象(靜態(tài)成員)3)將String換為StringBuilder5.請(qǐng)描述Interface與抽象類(lèi)之間的不同答:抽象類(lèi)表示該類(lèi)中可能已經(jīng)有一些方法的具體定義,但接口就是公公只能定義各個(gè)方法的界面 ,不能具體的實(shí)現(xiàn)代碼在成員方法中。類(lèi)是子類(lèi)用來(lái)繼承的,當(dāng)父類(lèi)已經(jīng)有實(shí)際功能的方法時(shí)該方法在子類(lèi)中可以不必實(shí)現(xiàn),直接引用父類(lèi)的方法,子類(lèi)也可以重寫(xiě)該父類(lèi)的方法。實(shí)現(xiàn)接口的時(shí)候必須要實(shí)現(xiàn)接口中所有的方法,不能遺漏任何一個(gè)。
參考http://www.cnblogs.com/seapub/archive/2012/08/08/2628433.html6.下列代碼在運(yùn)行中會(huì)產(chǎn)生幾個(gè)臨時(shí)對(duì)象?

答:其實(shí)在C#中第一行是會(huì)出錯(cuò)的(java中倒是可行)。應(yīng)該這樣初始化:
string b = new string(new char[]{'a','b','c'});7.下列代碼在運(yùn)行中會(huì)發(fā)生什么問(wèn)題?如何避免?

答:會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤,因?yàn)閒oreach是只讀的。不能一邊遍歷一邊修改。8.請(qǐng)簡(jiǎn)述關(guān)鍵字Sealed用在類(lèi)聲明和函數(shù)聲明時(shí)的作用答:類(lèi)聲明時(shí)可防止其他類(lèi)繼承此類(lèi),在方法中聲明則可防止派生類(lèi)重寫(xiě)此方法。9.請(qǐng)簡(jiǎn)述private,public,protected,internal的區(qū)別答:public:對(duì)任何類(lèi)和成員都公開(kāi),無(wú)限制訪問(wèn)private:僅對(duì)該類(lèi)公開(kāi)protected:對(duì)該類(lèi)和其派生類(lèi)公開(kāi)internal:只能在包含該類(lèi)的程序集中訪問(wèn)該類(lèi)protected internal:protected + internal10.反射的實(shí)現(xiàn)原理?答:審查元數(shù)據(jù)并收集關(guān)于它的類(lèi)型信息的能力。參考http://blog.163.com/xuanmingzhiyou@yeah/blog/static/1424776762011612115124188/反射個(gè)人認(rèn)為,就是得到程序集中的屬性和方法。實(shí)現(xiàn)步驟:1,導(dǎo)入using System.Reflection;2,Assembly.Load("程序集")加載程序集,返回類(lèi)型是一個(gè)Assembly3, foreach (Type type in assembly.GetTypes()) { string t = type.Name; } 得到程序集中所有類(lèi)的名稱(chēng)4,Type type = assembly.GetType("程序集.類(lèi)名");獲取當(dāng)前類(lèi)的類(lèi)型5,Activator.CreateInstance(type); 創(chuàng)建此類(lèi)型實(shí)例6,MethodInfo mInfo = type.GetMethod("方法名");獲取當(dāng)前方法7,mInfo.Invoke(null,方法參數(shù));11. .Net與Mono的關(guān)系?答:Mono官網(wǎng)主頁(yè)Mono is a software platform designed to allow developers to easily create cross platform applications. Sponsored by Xamarin, Mono is an open source implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime.mono是.net的一個(gè)開(kāi)源跨平臺(tái)工具,就類(lèi)似java虛擬機(jī),java本身不是跨平臺(tái)語(yǔ)言,但運(yùn)行在虛擬機(jī)上就能夠?qū)崿F(xiàn)了跨平臺(tái)。.net只能在windows下運(yùn)行,mono可以實(shí)現(xiàn)跨平臺(tái)跑,可以運(yùn)行于linux,Unix,Mac OS等。12.簡(jiǎn)述Unity3D支持的作為腳本的語(yǔ)言的名稱(chēng)答:Unity的腳本語(yǔ)言基于Mono的.Net平臺(tái)上運(yùn)行,可以使用.NET庫(kù),這也為xml、數(shù)據(jù)庫(kù)、正則表達(dá)式等問(wèn)題提供了很好的解決方案。Unity里的腳本都會(huì)經(jīng)過(guò)編譯,他們的運(yùn)行速度也很快。這三種語(yǔ)言實(shí)際上的功能和運(yùn)行速度是一樣的,區(qū)別主要體現(xiàn)在語(yǔ)言特性上。Javascript:和網(wǎng)頁(yè)中常用的JavaScript不一樣,它編譯后的運(yùn)行速度很快,語(yǔ)法方面也會(huì)有不少區(qū)別。C#Boo:可以看做是Python語(yǔ)言的變種,又糅合了Ruby和C#的特性,它是靜態(tài)類(lèi)型語(yǔ)言13.Unity3D是否支持寫(xiě)成多線程程序?如果支持的話需要注意什么?答:參考http://www.unitymanual.com/3821.html僅能從主線程中訪問(wèn)Unity3D的組件,對(duì)象和Unity3D系統(tǒng)調(diào)用支持:如果同時(shí)你要處理很多事情或者與Unity的對(duì)象互動(dòng)小可以用thread,否則使用coroutine。注意:C#中有l(wèi)ock這個(gè)關(guān)鍵字,以確保只有一個(gè)線程可以在特定時(shí)間內(nèi)訪問(wèn)特定的對(duì)象14.Unity3D的協(xié)程和C#線程之間的區(qū)別是什么?答:http://blog.csdn.NET/kongbu0622/article/details/8775037多線程程序同時(shí)運(yùn)行多個(gè)線程 ,而在任一指定時(shí)刻只有一個(gè)協(xié)程在運(yùn)行,并且這個(gè)正在運(yùn)行的協(xié)同程序只在必要時(shí)才被掛起。除主線程之外的線程無(wú)法訪問(wèn)Unity3D的對(duì)象、組件、方法。Unity3d沒(méi)有多線程的概念,不過(guò)unity也給我們提供了StartCoroutine(協(xié)同程序)和LoadLevelAsync(異步加載關(guān)卡)后臺(tái)加載場(chǎng)景的方法。 StartCoroutine為什么叫協(xié)同程序呢,所謂協(xié)同,就是當(dāng)你在StartCoroutine的函數(shù)體里處理一段代碼時(shí),利用yield語(yǔ)句等待執(zhí)行結(jié)果,這期間不影響主程序的繼續(xù)執(zhí)行,可以協(xié)同工作。而LoadLevelAsync則允許你在后臺(tái)加載新資源和場(chǎng)景,所以再利用協(xié)同,你就可以前臺(tái)用loading條或動(dòng)畫(huà)提示玩家游戲未卡死,同時(shí)后臺(tái)協(xié)同處理加載的事宜asynchronous[e ?? s ?? kr ? n ? s] .synchronous同步。 15.U3D中用于記錄節(jié)點(diǎn)空間幾何信息的組件名稱(chēng),及其父類(lèi)名稱(chēng)答:Transform 父類(lèi)是 Component16.簡(jiǎn)述四元數(shù)的作用,四元數(shù)對(duì)歐拉角的優(yōu)點(diǎn)?答:四元數(shù)用于表示旋轉(zhuǎn)相對(duì)歐拉角的優(yōu)點(diǎn):1)能進(jìn)行增量旋轉(zhuǎn)2)避免萬(wàn)向鎖3)給定方位的表達(dá)方式有兩種,互為負(fù)(歐拉角有無(wú)數(shù)種表達(dá)方式)17.向量的點(diǎn)乘、叉乘以及歸一化的意義?1)點(diǎn)乘描述了兩個(gè)向量的相似程度,結(jié)果越大兩向量越相似,還可表示投影2)叉乘得到的向量垂直于原來(lái)的兩個(gè)向量3)標(biāo)準(zhǔn)化向量:用在只關(guān)系方向,不關(guān)心大小的時(shí)候18.矩陣相乘的意義及注意點(diǎn)用于表示線性變換:旋轉(zhuǎn)、縮放、投影、平移、仿射注意矩陣的蠕變:誤差的積累19.為何大家都在移動(dòng)設(shè)備上尋求U3D原生GUI的替代方案不美觀,OnGUI很耗費(fèi)時(shí)間,使用不方便 ,DrawCall20.請(qǐng)簡(jiǎn)述如何在不同分辨率下保持UI的一致性NGUI很好的解決了這一點(diǎn),屏幕分辨率的自適應(yīng)性,原理就是計(jì)算出屏幕的寬高比跟原來(lái)的預(yù)設(shè)的屏幕分辨率求出一個(gè)對(duì)比值,然后修改攝像機(jī)的size。原生GUI http://unity3d.9ria.com/?p=2587NGUI http://blog.csdn.Net/mfc11/article/details/1768142921.為什么dynamic font在unicode環(huán)境下優(yōu)于static fontUnicode是國(guó)際組織制定的可以容納世界上所有文字和符號(hào)的字符編碼方案。使用動(dòng)態(tài)字體時(shí),Unity將不會(huì)預(yù)先生成一個(gè)與所有字體的字符紋理。當(dāng)需要支持亞洲語(yǔ)言或者較大的字體的時(shí)候,若使用正常紋理,則字體的紋理將非常大。22.Render的作用?描述MeshRender和SkinnedMeshRender的關(guān)系與不同A renderer is what makes an object appear on the screen。
Mesh就是指模型的網(wǎng)格(同名組件是用于調(diào)整網(wǎng)格屬性的),MeshFilter一般是用于獲得模型網(wǎng)格的組件,而MeshRender是用于把網(wǎng)格渲染出來(lái)的組件,23.簡(jiǎn)述SkinnedMesh的實(shí)現(xiàn)原理http://blog.csdn.net/n5/article/details/310587224.在場(chǎng)景中放置多個(gè)Camera并同時(shí)處于活動(dòng)狀態(tài)會(huì)發(fā)生什么?答:游戲界面可以看到很多攝像機(jī)的混合25.Prefab的作用?如何在移動(dòng)環(huán)境的設(shè)備下恰當(dāng)?shù)厥褂盟看穑篜refab在實(shí)例化的時(shí)候用到,主要用于經(jīng)常會(huì)用到的物體,屬性方便修改http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html26.如何銷(xiāo)毀一個(gè)UnityEngine.Object及其子類(lèi)答:Destory27.為什么Unity3D中會(huì)發(fā)生在組件上出現(xiàn)數(shù)據(jù)丟失的情況?答:組件上綁定的對(duì)象被刪除了28.如何安全的在不同工程間安全地遷移asset數(shù)據(jù)?三種方法答:
將Assets目錄和Library目錄一起遷移
導(dǎo)出包
用unity自帶的assets Server功能29.MeshCollider和其他Collider的一個(gè)主要不同點(diǎn)?答:Meshcollider再快也是基于V3頂點(diǎn)~~ 建議還是用boxcollider,boxcollider本身是基于算法,沒(méi)有面的概念。30.當(dāng)一個(gè)細(xì)小的高速物體撞向另一個(gè)較大的物體時(shí),會(huì)出現(xiàn)什么情況?如何避免?穿透(碰撞檢測(cè)失敗)http://forum.unity3d.com/threads/3353-collision-detection-at-high-speed(碰撞體變大,F(xiàn)ixedUpdate, 代碼限制)31.OnEnable、Awake、Start運(yùn)行時(shí)的發(fā)生順序?哪些可能在同一個(gè)對(duì)象周期中反復(fù)的發(fā)生?答:Awake -》OnEnable-》StartOnEnable在同一周期中可以反復(fù)地發(fā)生http://answers.unity3d.com/questions/217941/onenable-awake-start-order.html32.請(qǐng)簡(jiǎn)述OnBecameVisible及OnBecameInvisible的發(fā)生時(shí)機(jī),以及這一對(duì)回調(diào)函數(shù)的意義?答:當(dāng)物體是否可見(jiàn)切換之時(shí)。可以用于只需要在物體可見(jiàn)時(shí)才進(jìn)行的計(jì)算。33.Unity3D如何獲知場(chǎng)景中需要加載的數(shù)據(jù)?答:題目是獲取的意思?Resource.LoadAssetBundle34.MeshRender中material和sharedmaterial的區(qū)別?修改sharedMaterial將改變所有物體使用這個(gè)材質(zhì)的外觀,并且也改變儲(chǔ)存在工程里的材質(zhì)設(shè)置。不推薦修改由sharedMaterial返回的材質(zhì)。如果你想修改渲染器的材質(zhì),使用material替代。
第二部分
1.請(qǐng)描述游戲動(dòng)畫(huà)有哪幾種,以及其原理。
主要有關(guān)節(jié)動(dòng)畫(huà)、單一網(wǎng)格模型動(dòng)畫(huà)(關(guān)鍵幀動(dòng)畫(huà))、骨骼動(dòng)畫(huà)。
關(guān)節(jié)動(dòng)畫(huà)把角色分成若干獨(dú)立部分,一個(gè)部分對(duì)應(yīng)一個(gè)網(wǎng)格模型,部分的動(dòng)畫(huà)連接成一個(gè)整體的動(dòng)畫(huà),角色比較靈活Quake2中使用了這種動(dòng)畫(huà)。
單一網(wǎng)絡(luò)模型動(dòng)畫(huà)由一個(gè)完整的網(wǎng)格模型構(gòu)成,在動(dòng)畫(huà)序列的關(guān)鍵幀里記錄各個(gè)頂點(diǎn)的原位置及其改變量,然后插值運(yùn)算實(shí)現(xiàn)動(dòng)畫(huà)效果,角色動(dòng)畫(huà)較真實(shí)。
骨骼動(dòng)畫(huà),廣泛應(yīng)用的動(dòng)畫(huà)方式,集成了以上兩個(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)畫(huà)。(骨骼動(dòng)畫(huà)是由關(guān)節(jié)動(dòng)畫(huà)發(fā)展而來(lái)的,如今基本都使用骨骼動(dòng)畫(huà)來(lái)實(shí)現(xiàn)角色動(dòng)畫(huà))
2.alpha blend 工作原理
實(shí)際顯示顏色 = 前景顏色*Alpha/255 + 背景顏色*(255-Alpha)/255
3.寫(xiě)光照計(jì)算中的diffuse的計(jì)算公式
實(shí)際光照強(qiáng)度 I= 環(huán)境光(Iambient) + 漫反射光(Idiffuse) + 鏡面高光(Ispecular);
環(huán)境光:Iambient= Aintensity* Acolor; (Aintensity表示環(huán)境光強(qiáng)度,Acolor表示環(huán)境光顏色)
漫反射光:Idiffuse = Dintensity*Dcolor*N.L;
(Dintensity表示漫反射強(qiáng)度,Dcolor表示漫反射光顏色,N為該點(diǎn)的法向量,L為光源向量)
鏡面反射光:Ispecular = Sintensity*Scolor*(R.V)^n;
(Sintensity表示鏡面光照強(qiáng)度,Scolor表示鏡面光顏色,R為光的反射向量,V為觀察者向量,n稱(chēng)為鏡面光指數(shù))
4.lod是什么,優(yōu)缺點(diǎn)是什么
LOD技術(shù)即Levels of Detail的簡(jiǎn)稱(chēng),意為多細(xì)節(jié)層次。LOD技術(shù)指根據(jù)物體模型的節(jié)點(diǎn)在顯示環(huán)境中所處的位置和重要度,決定物體渲染的資源分配,降低非重要物體的面數(shù)和細(xì)節(jié)度,從而獲得高效率的渲染運(yùn)算。
優(yōu)點(diǎn):可根據(jù)距離動(dòng)態(tài)地選擇渲染不同細(xì)節(jié)的模型
缺點(diǎn):加重美工的負(fù)擔(dān),要準(zhǔn)備不同細(xì)節(jié)的同一模型,同樣的會(huì)稍微增加游戲的容量。
5.兩種陰影判斷的方法工作原理
陰影由兩部分組成:本影與半影
本影:景物表面上那些沒(méi)有被光源直接照射的區(qū)域(全黑的輪廓分明的區(qū)域)
半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的區(qū)域(半明半暗區(qū)域)
求陰影區(qū)域的方法:做兩次消隱過(guò)程
一次對(duì)每個(gè)光源進(jìn)行消隱,求出對(duì)于光源而言不可見(jiàn)的區(qū)域L;
一次對(duì)視點(diǎn)的位置進(jìn)行消隱,求出對(duì)于視點(diǎn)而言可見(jiàn)的面S;
shadow area= L ∩ S
陰影分為兩種:自身陰影和投射陰影
自身陰影:因物體自身的遮擋而使光線照射不到它上面的某些可見(jiàn)面
工作原理:利用背面剔除的方法求出,即假設(shè)視點(diǎn)在點(diǎn)光源的位置。
投射陰影:因不透明物體遮擋光線使得場(chǎng)景中位于該物體后面的物體或區(qū)域受不到光照照射而形成的陰影
工作原理:從光源處向物體的所有可見(jiàn)面投射光線,將這些面投影到場(chǎng)景中得到投影面,再將這些投影面與場(chǎng)景中的其他平面求交得出陰影多邊形,保存這些陰影多邊形信息,然后再按視點(diǎn)位置對(duì)場(chǎng)景進(jìn)行相應(yīng)處理得到所要求的視圖(利用空間換時(shí)間,每次只需依據(jù)視點(diǎn)位置進(jìn)行一次陰影計(jì)算即可,省去了一次消隱過(guò)程)
若是動(dòng)態(tài)光源此方法就無(wú)效了。
5.Vertex Shader是什么?怎么計(jì)算?
頂點(diǎn)著色器是一段執(zhí)行在GPU上的程序,用來(lái)取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作頂點(diǎn)。
Vertex Shader對(duì)輸入頂點(diǎn)完成了從local space到homogeneous space(齊次空間)的變換過(guò)程,homogeneous space即projection space的下一個(gè)space。在這其間共有world transformation, view transformation和projection transformation及l(fā)ighting幾個(gè)過(guò)程。
6.MipMap是什么?作用?
在三維計(jì)算機(jī)圖形的貼圖渲染中有一個(gè)常用的技術(shù)被稱(chēng)為Mipmapping。為了加快渲染速度和減少圖像鋸齒,貼圖被處理成由一系列被預(yù)先計(jì)算和優(yōu)化過(guò)的圖片組成的文件,這樣的貼圖被稱(chēng)為 MIP map 或者 mipmap。
7.用u3d實(shí)現(xiàn)2d游戲,有幾種方式?
1.利用引擎自帶的GUI
2.把攝像機(jī)設(shè)為Orthographic,用面片作為2d元素
3.利用第三方插件:NGUI、2dToolkit
8.u3d中碰撞器和觸發(fā)器的區(qū)別?
collider碰撞器會(huì)有碰撞的效果,IsTrigger = false,可以調(diào)用OnCollisionEnter/Stay/Exit函數(shù)
trigger觸發(fā)器沒(méi)有碰撞效果,isTrigger = true,可以調(diào)用OnTriggerEnter/stay/exit函數(shù)
9.物體發(fā)生碰撞的必要條件
物體A必須帶有(collider+rigidbody)或者CharacterController,另一個(gè)物體也必須至少帶有collider
10.CharacterController和Rigidbody的區(qū)別
Rigidbody具有完全真實(shí)物理的特性,而CharacterController可以說(shuō)是受限的Rigidbody,具有一定的物理效果但不是完全真實(shí)的。
11.物體發(fā)生碰撞時(shí),有幾個(gè)階段,分別對(duì)應(yīng)的函數(shù)
三個(gè)階段,OnCollisionEnter/Stay/Exit函數(shù)
12.u3d中,幾種施加力的方式,描述出來(lái)
rigidbody.AddForce/AddForceAtPosition,都是rigidbody的成員函數(shù)
13.什么叫做鏈條關(guān)節(jié)
Hinge Joint ,他可以模擬兩個(gè)物體間用一根鏈條連接在一起的情況,能保持兩個(gè)物體在一個(gè)固定距離內(nèi)部相互移動(dòng)而不產(chǎn)生作用力,但是達(dá)到固定距離后就會(huì)產(chǎn)生拉力。(簡(jiǎn)單說(shuō)就是彈簧)
14.物體自旋轉(zhuǎn)使用的函數(shù)叫什么
transform.Rotate
15.物體繞某點(diǎn)旋轉(zhuǎn)使用函數(shù)叫什么
transform.RotateAround
16.u3d提供了一個(gè)用于保存讀取數(shù)據(jù)的類(lèi),(playerPrefs),請(qǐng)列出保存讀取整形數(shù)據(jù)的函數(shù)
PlayerPrefs.SetInt 與 PlayerPrefs.GetInt
17.unity3d提供了幾種光源,分別是什么
平行光:Directional Light
聚光燈:Spot Light
點(diǎn)光源:Point Light
區(qū)域光源:Area Light(只用于烘培)
18.unity3d從喚醒到銷(xiāo)毀有一段生命周期,請(qǐng)列出系統(tǒng)自己調(diào)用的幾個(gè)重要方法。
Awake –>OnEnable –> Start –> Update –> FixedUpdate –> LateUpdate –> OnGUI –> Reset –> OnDisable –> OnDestroy
19.物理更新一般在哪個(gè)系統(tǒng)函數(shù)里?
FixedUpdate,每固定幀繪制時(shí)執(zhí)行一次,和update不同的是FixedUpdate是渲染幀執(zhí)行,如果你的渲染效率低下的時(shí)候FixedUpdate調(diào)用次數(shù)就會(huì)跟著下降。FixedUpdate比較適用于物理引擎的計(jì)算,因?yàn)槭歉繋秩居嘘P(guān)。Update就比較適合做控制。
20.移動(dòng)相機(jī)動(dòng)作在哪個(gè)函數(shù)里,為什么在這個(gè)函數(shù)里。
LateUpdate,,是在所有update結(jié)束后才調(diào),比較適合用于命令腳本的執(zhí)行。官網(wǎng)上例子是攝像機(jī)的跟隨,都是在所有update操作完才跟進(jìn)攝像機(jī),不然就有可能出現(xiàn)攝像機(jī)已經(jīng)推進(jìn)了,但是視角里還未有角色的空幀出現(xiàn)。
21.當(dāng)游戲中需要頻繁創(chuàng)建一個(gè)物體對(duì)象時(shí),我們需要怎么做來(lái)節(jié)省內(nèi)存。
做一個(gè)pool,游戲開(kāi)始時(shí)預(yù)先實(shí)例化足夠的數(shù)量,然后用的時(shí)候取不用的時(shí)候收回
22.一個(gè)場(chǎng)景放置多個(gè)camera并同時(shí)處于活動(dòng)狀態(tài),會(huì)發(fā)生什么
實(shí)際看到的畫(huà)面由多個(gè)camera的畫(huà)面組成,由depth、Clear Flag、Culling Mask都會(huì)影響最終合成效果。
23.簡(jiǎn)述prefab的用處和環(huán)境
在游戲運(yùn)行時(shí)實(shí)例化,prefab相當(dāng)于一個(gè)模版,對(duì)你已有的素材、腳本、參數(shù)做一個(gè)默認(rèn)配置,以便于以后修改,同時(shí)prefab打包的內(nèi)容簡(jiǎn)化了導(dǎo)出的操作,便于團(tuán)隊(duì)的交流。
24.如何銷(xiāo)毀一個(gè)UnityEngine.Object以及其子類(lèi)
Destroy
25.為什么u3d會(huì)出現(xiàn)組件上數(shù)據(jù)丟失的情況
一般是組件上綁定的物體對(duì)象被刪除了
26.u3d下如何安全的在不同工程遷移asset數(shù)據(jù)
方法1,可以把a(bǔ)ssets目錄和Library目錄一起遷移,
方法2,導(dǎo)出包
方法3,用unity帶的assets server功能
第三部分
1.什么是渲染管道?
是指在顯示器上為了顯示出圖像而經(jīng)過(guò)的一系列必要操作。 渲染管道中的很多步驟,都要將幾何物體從一個(gè)坐標(biāo)系中變換到另一個(gè)坐標(biāo)系中去。
主要步驟有:
本地坐標(biāo)->視圖坐標(biāo)->背面裁剪->光照->裁剪->投影->視圖變換->光柵化。
2.如何優(yōu)化內(nèi)存?
有很多種方式,例如
1.壓縮自帶類(lèi)庫(kù);
2.將暫時(shí)不用的以后還需要使用的物體隱藏起來(lái)而不是直接Destroy掉;
3.釋放AssetBundle占用的資源;
4.降低模型的片面數(shù),降低模型的骨骼數(shù)量,降低貼圖的大小;
5.使用光照貼圖,使用多層次細(xì)節(jié)(LOD),使用著色器(Shader),使用預(yù)設(shè)(Prefab)。
3、動(dòng)態(tài)加載資源的方式?(有時(shí)候也問(wèn)區(qū)別,具體請(qǐng)百度)
1.Resources.Load();
2.AssetBundle
4、什么是協(xié)同程序?
在主線程運(yùn)行時(shí)同時(shí)開(kāi)啟另一段邏輯處理,來(lái)協(xié)助當(dāng)前程序的執(zhí)行。換句話說(shuō),開(kāi)啟協(xié)程就是開(kāi)啟一個(gè)線程。可以用來(lái)控制運(yùn)動(dòng)、序列以及對(duì)象的行為。
5、你用過(guò)哪些插件?
(最好多熟悉幾個(gè)插件,問(wèn)的時(shí)候好回答)
第四部分
1.反向旋轉(zhuǎn)動(dòng)畫(huà)的方法是什么?
2.碰撞檢測(cè)需要物體具備什么屬性?
3.用代碼實(shí)現(xiàn)第三角色控制器
4.實(shí)現(xiàn)吊機(jī)吊物體的功能
5.獲取、增加、刪除組件的命令分別是什么?
獲取:GetComponent
增加:AddComponent
刪除:Destroy
6.Animation.CrossFade命令作用是:(C)
A.動(dòng)畫(huà)放大 B.動(dòng)畫(huà)轉(zhuǎn)換 C.動(dòng)畫(huà)的淡入為其他動(dòng)畫(huà)
7.Application.loadLevel命令為:(A)
A.加載關(guān)卡 B.異步加載關(guān)卡 C.加載動(dòng)作
8.調(diào)試記錄到控制臺(tái)的命令是什么?
Debug.Log();
9.編輯器類(lèi)存放路徑是什么?
工程目錄下的Assets/Editor文件夾下。
10.使用原生GUI創(chuàng)建一個(gè)可以拖動(dòng)的窗口命令是什么?
GUI.DragWindow();
11.localPosition與Position的使用區(qū)別?
localPosition:自身位置,相對(duì)于父級(jí)的變換的位置。 Position:在世界坐標(biāo)transform的位置
12.意義連線
Mathf.Round 四舍五入
Mathf.Clamp 限制
Mathf.Lerp 插值
13.寫(xiě)一個(gè)計(jì)時(shí)器工具,從整點(diǎn)開(kāi)始計(jì)時(shí),格式為:00:00:00
14.寫(xiě)出Animation的五個(gè)方法
15.怎么拿到一個(gè)對(duì)象上腳本的方法
GameObject.GetComponent<>();
16.上機(jī)題:用鼠標(biāo)實(shí)現(xiàn)在場(chǎng)景中拖動(dòng)物體,用鼠標(biāo)滾輪實(shí)現(xiàn)縮放(用一個(gè)Cube即可)。
17.請(qǐng)簡(jiǎn)述向量的點(diǎn)乘,向量的叉乘以及向量歸一化的幾何意義?
點(diǎn)乘的幾何意義是:計(jì)算兩個(gè)向量之間的夾角,以及在某一方向上的投影;
叉乘的幾何意義是:創(chuàng)建垂直于平面,三角形,或者多邊形的向量;參考:http://blog.sina.com.cn/s/blog_9283b6f601017hfw.html
第五部分
1,在類(lèi)的構(gòu)造函數(shù)前加上static會(huì)報(bào)什么錯(cuò)?為什么?
構(gòu)造函數(shù)格式為 public+類(lèi)名如果加上static會(huì)報(bào)錯(cuò)(靜態(tài)構(gòu)造函數(shù)不能有訪問(wèn)修飾符)原因:靜態(tài)構(gòu)造函數(shù)不允許訪問(wèn)修飾符,也不接受任何參數(shù); 無(wú)論創(chuàng)建多少類(lèi)型的對(duì)象,靜態(tài)構(gòu)造函數(shù)只執(zhí)行一次; 運(yùn)行庫(kù)創(chuàng)建類(lèi)實(shí)例或者首次訪問(wèn)靜態(tài)成員之前,運(yùn)行庫(kù)調(diào)用靜態(tài)構(gòu)造函數(shù); 靜態(tài)構(gòu)造函數(shù)執(zhí)行先于任何實(shí)例級(jí)別的構(gòu)造函數(shù); 顯然也就無(wú)法使用this和base來(lái)調(diào)用構(gòu)造函數(shù)。2,C# String類(lèi)型比stringBuilder類(lèi)型的優(yōu)勢(shì)是什么?
如果是處理字符串的話,用string中的方法每次都需要?jiǎng)?chuàng)建一個(gè)新的字符串對(duì)象并且分配新的內(nèi)存地址,而stringBuilder是在原來(lái)的內(nèi)存里對(duì)字符串進(jìn)行修改,所以在字符串處理方面還是建議用stringBuilder這樣比較節(jié)約內(nèi)存。但是string 類(lèi)的方法和功能仍然還是比stringBuilder類(lèi)要強(qiáng)。
string類(lèi)由于具有不可變性(即對(duì)一個(gè)string對(duì)象進(jìn)行任何更改時(shí),其實(shí)都是創(chuàng)建另外一個(gè)string類(lèi)的對(duì)象),所以當(dāng)需要頻繁的對(duì)一個(gè)string類(lèi)對(duì)象進(jìn)行更改的時(shí)候,建議使用StringBuilder類(lèi),StringBuilder類(lèi)的原理是首先在內(nèi)存中開(kāi)辟一定大小的內(nèi)存空間,當(dāng)對(duì)此StringBuilder類(lèi)對(duì)象進(jìn)行更改時(shí),如果內(nèi)存空間大小不夠,會(huì)對(duì)此內(nèi)存空間進(jìn)行擴(kuò)充,而不是重新創(chuàng)建一個(gè)對(duì)象,這樣如果對(duì)一個(gè)字符串對(duì)象進(jìn)行頻繁操作的時(shí)候,不會(huì)造成過(guò)多的內(nèi)存浪費(fèi),其實(shí)本質(zhì)上并沒(méi)有很大區(qū)別,都是用來(lái)存儲(chǔ)和操作字符串的,唯一的區(qū)別就在于性能上。
String主要用于公共API,通用性好、用途廣泛、讀取性能高、占用內(nèi)存小。
StringBuilder主要用于拼接String,修改性能好。
不過(guò)現(xiàn)在的編譯器已經(jīng)把 String 的 + 操作優(yōu)化成 StringBuilder 了,所以一般用String就可以了
String是不可變的,所以天然線程同步。
StringBuilder可變,非線程同步。
http://zhidao.baidu.com/question/240364840.html?qbl=relate_question_0&Word=String%C0%E0%D0%CD%B1%C8stringBuilder%C0%E0%D0%CD%B5%C4%D3%C5%CA%C63,C# 函數(shù)Func(string a, string b)用Lambda表達(dá)式怎么寫(xiě)?
答:https://msdn.microsoft.com/zh-cn/library/bb397687.aspx4,數(shù)列1,1,2,3,5,8,13…第n位數(shù)是多少?用C#遞歸算法實(shí)現(xiàn)
通項(xiàng)公式應(yīng)該是an = a(n-1) + a(n-2)
a3=2=1+1a4=3=1+1+1a5=1+1+1+2a6=1+1+1+2+3………an=1+1+1+2+3+…+(n-2)+(n-3)=2+(n-2)(n-3)/2 (n>=3) 這是通項(xiàng)公式,至于遞歸?…
5,一個(gè)簡(jiǎn)單的游戲,怪物會(huì)走動(dòng)/攻擊/死亡,游戲角色會(huì)走動(dòng),跳躍/攻擊/格擋/死亡,還會(huì)接受玩家從輸入端輸入的指令,NPC會(huì)走動(dòng),他們彼此之間可以互相通信.請(qǐng)畫(huà)出以上三種角色的UML圖示.
答:6,NGUI Button怎樣接受用戶點(diǎn)擊并調(diào)用函數(shù),具體方法名稱(chēng)是什么
OnClick()
主要是在UICamera腳本中用射線判斷點(diǎn)擊的物體并通過(guò)SendMessage調(diào)用OnClick() OnPress()等函數(shù),可以說(shuō)NGUI的按鈕是通過(guò)發(fā)消息這個(gè)方式調(diào)用的。7,怎么判斷兩個(gè)平面是否相交?不能用碰撞體,說(shuō)出計(jì)算方法
答:
https://www.baidu.com/s?wd=怎么判斷兩個(gè)平面是否相交&rsv_spt=1&issp=1&f=3&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_pq=abcac720000083b6&rsv_t=ecdctoXQNURcfX%2FVm8MQdPtiBLttYO4HqJrZ1yNsNcxUqDe6DM4ovlQT4HdHZJMh6guT&inputT=2590&oq=C%23%20lamb&rsv_n=2&bs=c%23%20lambda
8, <憤怒的小鳥(niǎo)>給予初速度以后,怎么讓小鳥(niǎo)受到重力和空氣阻力的影響而繪制拋物線軌跡,說(shuō)出具體的計(jì)算方法.
Vector3 v代表初速度v'代表現(xiàn)在的速度,假設(shè)小鳥(niǎo)是沿的z軸也就是transform.forward方向運(yùn)動(dòng)的質(zhì)量為1,那么v‘=v-new Vector3(0,g*t,f*t),transform.Translate(v')做的就是拋物線運(yùn)動(dòng)(g為重力加速度不要用現(xiàn)實(shí)中的需要自己調(diào)試,f為阻力也要自己調(diào)試設(shè)置,t為時(shí)間)
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注