游戲開(kāi)發(fā)常見(jiàn)面試題與知識(shí)點(diǎn)整理總結(jié)
面試第一次知識(shí)總結(jié):
一、Unity基本操作
1、unity提供哪幾種光源?
點(diǎn)光源、平行光、聚光燈、區(qū)域光。
2、物體發(fā)生碰撞的必要條件什么?
兩個(gè)物體必須有碰撞體Collider組件,一個(gè)物體上必須有剛體組件Rigidbody。
3、碰撞體和觸發(fā)器區(qū)別與聯(lián)系
觸發(fā)器是碰撞體上的一個(gè)屬性,如果不勾選觸發(fā)器,兩個(gè)物體是不可以別擊穿;有了觸發(fā)器后是可以被擊穿的。
檢測(cè)碰撞體方法:OnCollisionEnter/Stay/Exit() 檢測(cè)觸發(fā)器方法:OnTriggerEnter/Stay/Exit()
4、預(yù)設(shè)(prefab)的好處
預(yù)設(shè)更多的像一個(gè)模板,比如將一個(gè)人物模型設(shè)置成預(yù)設(shè),我們可以在不同的場(chǎng)景使用,方便使用。
5、如何利用unity開(kāi)發(fā)2D游戲
1)使用本身的GUI
2)攝像機(jī)的投影(projection)方式改為正交投影,不考慮一個(gè)坐標(biāo)軸
3)使用插件2DToolKit
6、事件函數(shù)的執(zhí)行順序
初始化:函數(shù)Awake(激活游戲?qū)ο?----OnEnable(實(shí)例化游戲?qū)ο?-----Start(初始化)
更新順序:FixedUpdate(物理計(jì)算,處理剛體)----Update()----LateUpdate(相機(jī)跟隨)
渲染部分:OnBecameVisible/Invisible(相機(jī)中可見(jiàn)或不可見(jiàn))----OnGUI(執(zhí)行鍵盤(pán)和鼠標(biāo)事件)
對(duì)象銷(xiāo)毀和退出場(chǎng)景:OnDisable(不激活對(duì)象)----OnDestroy(銷(xiāo)毀游戲?qū)ο?-----OnApplicationQuit(游戲場(chǎng)景退出)
7、協(xié)程
協(xié)程功能類(lèi)似與多線程,StartCoroutine()-----yield WaitForSecond/WWW-----StopCoroutine()
協(xié)程背后通過(guò)迭代器實(shí)現(xiàn),主要實(shí)現(xiàn)了兩個(gè)接口,IEnumerator和IEnumerable,接口的方法重要有三個(gè)方法,MoveNext()---Current--Dispose()
8、對(duì)象池
對(duì)象池用于存放反復(fù)被調(diào)用的資源,比如射擊類(lèi)游戲中的子彈。
9、物體旋轉(zhuǎn)和添加力
Transform.Rotate()、Rigidbody.AddForce()
10、Unity、Mono和.Net的關(guān)系
Unity是在.Net平臺(tái)上運(yùn)行,只能在window下運(yùn)行,而mono是實(shí)現(xiàn)跨平臺(tái)的工具。
11、uinty支持的腳本語(yǔ)言
c#、javascripts、Boo。
12、Mipmap
Mipmap是一種貼圖,目的是為加快渲染速度和減少圖形鋸齒。
13、鏈條關(guān)節(jié)
Hinge Joint用一個(gè)鏈條模擬連接兩個(gè)物體,在一定距離后會(huì)產(chǎn)生拉力。
14、射線檢測(cè)碰撞體
Ray類(lèi),從一個(gè)點(diǎn)發(fā)射一條無(wú)邊的線,遇到碰撞體后停止發(fā)射。
15、動(dòng)畫(huà)類(lèi)型
關(guān)節(jié)動(dòng)畫(huà):模型分成多個(gè)獨(dú)立的部分;骨骼動(dòng)畫(huà):各個(gè)部分用關(guān)節(jié)相連;單一網(wǎng)格模型動(dòng)畫(huà):插值運(yùn)算實(shí)現(xiàn)動(dòng)畫(huà)效果。
16、Unity資源處理種類(lèi)
Resources:只讀,不能動(dòng)態(tài)修改,不要放動(dòng)態(tài)更新的資源,資源讀取Resources.Load();
StreamingAssets:完全打包,主要存放二進(jìn)制文件,用WWW類(lèi)讀??;
AssetBundle:Prefab封裝成AssetBundle,加載資源的方式有Resources類(lèi)和WWW類(lèi)。
17、Unity Socket網(wǎng)絡(luò)編程
一般采用可靠傳輸協(xié)議TCP,服務(wù)器創(chuàng)建兩個(gè)Socket,一個(gè)用于監(jiān)聽(tīng),另一個(gè)用于接受和發(fā)送消息;客戶端連接,接受和發(fā)送消息。
18、著色器是什么,有哪幾種?
著色器模擬物體表面發(fā)生的事情,著色器包括頂點(diǎn)著色器、片元著色器、無(wú)光照著色器、表面著色器。
19、著色器和材質(zhì)的聯(lián)系
shader是材質(zhì)當(dāng)中的一個(gè)重要的屬性,可以通過(guò)自己定義的shader來(lái)更好的渲染物體表面。
20、渲染管線
數(shù)據(jù)收集(紋理,材質(zhì))----頂點(diǎn)著色器獲取圖形的2D坐標(biāo)---頂點(diǎn)后處理進(jìn)行坐標(biāo)變換,圖形基元裁剪---圖形基元收集
---柵格化接受三角形及其數(shù)據(jù),形成潛在的像素和片源----片源著色器----輸入數(shù)據(jù)。
21、無(wú)光照著色器結(jié)構(gòu)
頂點(diǎn)數(shù)據(jù)收集結(jié)構(gòu)體---頂點(diǎn)函數(shù)(著色器)---頂點(diǎn)數(shù)據(jù)通過(guò)柵格化處理后的數(shù)據(jù)---片源函數(shù)---最終的顏色
22、光照著色器中漫反射和鏡面反射的計(jì)算過(guò)程
漫反射計(jì)算過(guò)程:1)通過(guò)法線向量和光線入射方向求點(diǎn)積,得到光照強(qiáng)度;2)將光線顏色*光線強(qiáng)度*物體的表面顏色,就是我們最后看到的顏色;
鏡面反射計(jì)算過(guò)程:1)光線的入射方向和法線求出反射方向;2)將反射方向和眼睛的入射方向求點(diǎn)積;3)以點(diǎn)積為底,指數(shù)是光照強(qiáng)度求出看到的顏色。
23、后處理堆
Post-process volume游戲?qū)ο蠛蚿rofile屬性結(jié)合,對(duì)相機(jī)渲染進(jìn)行后處理,包括顆粒、暗角、景深
24、CPU優(yōu)化
1)DrawCalls,它是CUP調(diào)用底層圖形接口,每一次渲染都需要調(diào)用一次接口,可以將兩個(gè)紋理不同的材質(zhì)打包成圖集,進(jìn)行同時(shí)渲染實(shí)現(xiàn)批處理;
2)物理組件,選擇合適的Fixed Timestep,盡量不使用網(wǎng)格碰撞器(mesh collider);
3)盡量減少GC的觸發(fā),盡量不要使用foreach(),產(chǎn)生的垃圾多,最好不用LINQ命令和字符串連接,他們都是GC收集的目標(biāo);
4)代碼優(yōu)化,不頻繁使用GetComponent,善于使用OnBecameVisible和內(nèi)建數(shù)組,以及ref關(guān)鍵字。
25、GPU優(yōu)化
1)減少繪制(頂點(diǎn))的數(shù)目,使用較少的材質(zhì)數(shù)目和使用紋理圖集,使用共享材質(zhì)Renderer.sharedMaterial代替Renderer.material,
使用光照紋理(lightmap)而非實(shí)時(shí)燈光;
2)優(yōu)化顯存帶寬,OpenGL壓縮圖片,使用MipMap增加了等比例的小圖,即增加了內(nèi)存空間,但是渲染質(zhì)量比壓縮好很多。
26、四元組的作用
Quaternion對(duì)旋轉(zhuǎn)的角度進(jìn)行計(jì)算。
27、Unity制作動(dòng)畫(huà)效果
windows---Animation---錄制---AddKeys
28、Unity狀態(tài)機(jī)
Animator在動(dòng)畫(huà)制作完之后產(chǎn)生的文件,也就是生成的狀態(tài)機(jī),可以增加其狀態(tài)和變遷。
29、Unity導(dǎo)航尋路
windows--Navigation,選擇navigation static,進(jìn)行bake烘焙,為目標(biāo)選擇一個(gè)導(dǎo)航代理Nav Mesh Agent,對(duì)其進(jìn)行掛載腳本。
30、貼圖和精靈的區(qū)別
Sprite作為UI精靈使用,Texture作為模型貼圖使用。
二、C#面向?qū)ο笳Z(yǔ)言
1、多線程
一個(gè)進(jìn)程中經(jīng)常有多個(gè)線程,主線程和Thread構(gòu)造出線程為前臺(tái)線程,用IsBackgound()設(shè)置為后臺(tái)線程
通過(guò)委托構(gòu)造出的線程為后天線程,BeginInvoke(),前臺(tái)線程關(guān)閉后后臺(tái)線程隨著關(guān)閉,Lock用于解決線程之間的爭(zhēng)奪資源,Console.ReadLine()用于后臺(tái)線程讀取完畢。
2、值類(lèi)型和引用類(lèi)型
值類(lèi)型:結(jié)構(gòu)(Int、Float、Bool)和枚舉,一般存儲(chǔ)在線程棧上,棧的存取速度優(yōu)于堆,并且可以共享,隨著方法的結(jié)束,存儲(chǔ)就也被釋放了。
引用類(lèi)型: 類(lèi)、接口、委托、字符串,一般存儲(chǔ)在托管堆上,對(duì)象存儲(chǔ)棧上,只要某個(gè)對(duì)象被引用了,這個(gè)對(duì)象的內(nèi)存就不會(huì)被釋放。
3、裝箱和拆箱
裝箱:值類(lèi)型轉(zhuǎn)化為引用類(lèi)型
拆箱:引用類(lèi)型轉(zhuǎn)化為值類(lèi)型
4、unity中的值類(lèi)型和引用類(lèi)型
值類(lèi)型:Vector、Color、Ray、Touch
引用類(lèi)型:Object、Component、MonoBehaviour
5、ArrayList和List的區(qū)別
1、ArrayList不安全,將所有的類(lèi)型都當(dāng)做Object類(lèi)型處理,很有可能出現(xiàn)類(lèi)型不匹配的問(wèn)題;
2、ArrayList在數(shù)據(jù)插入和獲取的會(huì)有裝箱和拆箱操作,而導(dǎo)致額外的開(kāi)銷(xiāo)。
6、public、protected、private、internal區(qū)別
public:所有的類(lèi)都可以訪問(wèn);protected:該類(lèi)及其子類(lèi)可以訪問(wèn);private:僅僅該類(lèi)可以訪問(wèn);internal:該類(lèi)的程序集中訪問(wèn)。
7、接口和抽象類(lèi)的區(qū)別
1、一個(gè)類(lèi)可以繼承多個(gè)接口,但只能繼承一個(gè)抽象類(lèi);
2、接口中的方法都是抽象方法,而且必須全部實(shí)現(xiàn);抽象類(lèi)可以實(shí)現(xiàn)部分方法,不一定全部是抽象方法。
8、ref和out
ref和out都是傳遞參數(shù)的關(guān)鍵字,ref傳遞的參數(shù)必須初始化,out傳遞的參數(shù)必須在函數(shù)內(nèi)賦值;
ref傳遞的是引用,一個(gè)函數(shù)需要有多個(gè)返回值時(shí)用out比較方便。
9、委托
委托最主要的是傳遞的不是變量而是一個(gè)方法,和c++中的方法指針比較相似
自定義委托步驟:1)定義委托;2)委托實(shí)例化;3)注冊(cè)委托;4)委托調(diào)用
系統(tǒng)委托有Action(注冊(cè)的方法無(wú)返回值),F(xiàn)unc(注冊(cè)的方法有返回值),Predicate(返回值為bool類(lèi)型)
10、匿名和lamda表達(dá)式
匿名將委托的實(shí)例化和委托方法合并;lamda表達(dá)式是對(duì)委托方法的進(jìn)一步簡(jiǎn)化。
11、委托和事件
委托可以作為方法的參數(shù),事件不可以;委托可以聲明一個(gè)局部變量,事件不可以;事件其實(shí)是委托的一個(gè)特殊化的實(shí)例。
12、StringBuilder類(lèi)和String的區(qū)別
String類(lèi)字符串是不可變的,StringBuilder是拼接字符串。
13、反射原理
反射可以讀取程序集中代碼的內(nèi)容(dll和exe文件),反射中常用Type類(lèi)和Assembly類(lèi)獲取命名空間、類(lèi)名以及類(lèi)的方法、屬性、字段。
GetMethod(),GetProperties(),GetFiled(),據(jù)說(shuō)反射還可以得到private方法。
14、sealed關(guān)鍵字
如果是在類(lèi)前聲明,這個(gè)類(lèi)是不可以被繼承;如果是在方法前聲明,這個(gè)方法是不可以被重寫(xiě)的。
15、序列化和反序列化
序列化:對(duì)象轉(zhuǎn)化為字節(jié)流的過(guò)程,首先一個(gè)對(duì)象應(yīng)該被確定為可以被序列化(Serializable)---定義文件流(FileStream)--使用格式化器BinaryFormatter進(jìn)行序列化和反序列化;
反序列化:字節(jié)流轉(zhuǎn)化為對(duì)象的過(guò)程。
16、Unity3D中序列化注意事項(xiàng)
最好為public或者使用了[SerializeField]定制特性、自定義引用類(lèi)型和值類(lèi)型且必須使用[Serializable]定制特性、基元類(lèi)型。
17、特性
系統(tǒng)特性:Obsolete特性檢查方法是否過(guò)時(shí),Conditional特性實(shí)現(xiàn)條件編譯,比如測(cè)試方法但是需要宏定義;
Unity中的特性:DllImport特性應(yīng)用于方法,Serializable特性應(yīng)用于類(lèi)型,自定義特性和拓展編輯器。
18、拓展方法
對(duì)于定義好的類(lèi)進(jìn)行拓展,比如String和Int類(lèi),但是拓展類(lèi)和方法都應(yīng)該是靜態(tài)的。
19、正則表達(dá)式
正則表達(dá)式判斷字符串更加簡(jiǎn)潔,但是需要懂一些語(yǔ)法,最主要的類(lèi)是Regex
string strPattarn = @"^\d*KaTeX parse error: Expected 'EOF', got '\d' at position 15: ";可以理解為^最開(kāi)始為數(shù)字\̲d̲直到*最后仍然為數(shù)字。
string strPattern = @"^\w*$"; \w判斷用戶輸入有字母,數(shù)字,下劃線,漢字,其他都是非法的
20、構(gòu)造函數(shù)和析構(gòu)函數(shù)
構(gòu)造函數(shù):創(chuàng)建對(duì)象時(shí)初始化對(duì)象;
析構(gòu)函數(shù):用于釋放一個(gè)對(duì)象,有垃圾回收器控制,清理資源。
21、單例模式
單例模式要求某個(gè)類(lèi)只要一個(gè)實(shí)例,比如一臺(tái)打印機(jī)連接了多個(gè)計(jì)算機(jī),可以將其設(shè)計(jì)為單例模式,防止兩臺(tái)計(jì)算機(jī)同時(shí)打印;
構(gòu)造函數(shù)設(shè)置為private,實(shí)例化對(duì)象instance;通過(guò)public的getInstance方法為外部獲取實(shí)例提供接口。
22、觀察者模式
一個(gè)事件發(fā)生變化,其他相關(guān)是事件都發(fā)生變化,一般用委托進(jìn)行注冊(cè)方法。
當(dāng)然還有一些其他設(shè)計(jì)模式,包括簡(jiǎn)單工廠模式、代理模式、適配器模式、裝飾器模式、迭代器模式等。
23、Hashtable類(lèi)和HashMap
Hashtable和HashMap都是存儲(chǔ)鍵值對(duì),Hashtable多線程安全,HashMap多線程不安全;HashMap null可以作為鍵,而Hashtable不可以。
24、HashMap和TreeMap
HashMap和TreeMap同樣是存儲(chǔ)鍵值對(duì),HashMap是無(wú)序的,而TreeMap是有序的存儲(chǔ)。
相關(guān)文章
- 這篇文章主要介紹了網(wǎng)易游戲面試題與參考答案,整理分析了網(wǎng)易游戲招聘面試中遇到的專(zhuān)業(yè)題、邏輯題與游戲題,以及相應(yīng)的參考答案,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2020-01-10
- 這篇文章主要介紹了網(wǎng)易游戲面試經(jīng)歷,總結(jié)記錄了網(wǎng)易游戲招聘面試所經(jīng)歷的流程及各個(gè)面試環(huán)節(jié)所遇到的問(wèn)題,需要的朋友可以參考下2019-09-30
騰訊游戲客戶端開(kāi)發(fā)面試經(jīng)歷記錄
這篇文章主要介紹了騰訊游戲客戶端開(kāi)發(fā)面試經(jīng)歷,整理記錄了騰訊游戲開(kāi)發(fā)面試中遇到的各種問(wèn)題與心得體會(huì),需要的朋友可以參考下2019-09-24- 這篇文章主要介紹了網(wǎng)易游戲的面試題與參考答案,總結(jié)了網(wǎng)易游戲入職面試中的常見(jiàn)問(wèn)題及對(duì)應(yīng)參考答案,涉及線程、數(shù)據(jù)庫(kù)、爬蟲(chóng)、以及各種算法的Python實(shí)現(xiàn)技巧,需要的朋友可2019-09-23
騰訊游戲客戶端開(kāi)發(fā)面試經(jīng)歷分享
這篇文章主要介紹了騰訊游戲客戶端開(kāi)發(fā)面試經(jīng)歷,總結(jié)分享了騰訊游戲客戶端開(kāi)發(fā)面試所涉及到的考點(diǎn)與注意事項(xiàng),需要的朋友可以參考下2019-09-20最全阿里面試題合集118道+答案(阿里技術(shù)專(zhuān)家分享)
這篇文章主要介紹了最全阿里面試題合集118道+答案(阿里技術(shù)專(zhuān)家分享),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2020-01-10- 這篇文章主要介紹了新浪java面試題與參考答案,總結(jié)分析了新浪java面試網(wǎng)絡(luò)編程題目與參考答案,涉及java socket通信客戶端與服務(wù)器端功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-01-09
網(wǎng)易社招面試流程與經(jīng)驗(yàn)總結(jié)【純干貨分享】
這篇文章主要介紹了網(wǎng)易社招面試流程與經(jīng)驗(yàn),總結(jié)分析了網(wǎng)易社招面試主要流程,以及遇到的各種問(wèn)題,并給出了相應(yīng)的參考意見(jiàn),需要的朋友可以參考下2020-01-08- 這篇文章主要介紹了最全的BAT大廠面試題整理(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2020-01-07
工作一年后騰訊社招面試經(jīng)歷與經(jīng)驗(yàn)分享
這篇文章主要介紹了工作一年后騰訊社招面試經(jīng)歷與經(jīng)驗(yàn),總結(jié)分析了筆者參與騰訊社招面試過(guò)程中所遇到的問(wèn)題與相關(guān)經(jīng)驗(yàn)總結(jié),需要的朋友可以參考下2020-01-06

