最先執(zhí)行的方法是:
1、(激活時(shí)的初始化代碼)Awake,2、Start、3、Update【FixUpdate、LateUpdate】、4、(渲染模塊)OnGUI、5、再向后,就是卸載模塊(TearDown),這里主要有兩個(gè)方法OnDisable與OnDestroy
高頻問(wèn)答的問(wèn)題:
1.什么是渲染管道?
是指在顯示器上為了顯示出圖像而經(jīng)過(guò)的一系列必要操作。
渲染管道中的很多步驟,都要將幾何物體從一個(gè)坐標(biāo)系中變換到另一個(gè)坐標(biāo)系中去。
主要步驟有:
本地坐標(biāo)->視圖坐標(biāo)->背面裁剪->光照->裁剪->投影->視圖變換->光柵化。
2.如何優(yōu)化內(nèi)存?
有很多種方式,例如
A、壓縮自帶類庫(kù);
B、將暫時(shí)不用的以后還需要使用的物體隱藏起來(lái)而不是直接Destroy掉;
C、釋放AssetBundle占用的資源;AssetBundle資源包
D、降低模型的片面數(shù),降低模型的骨骼數(shù)量,降低貼圖的大?。?/p>
E、使用光照貼圖,使用多層次細(xì)節(jié)(LOD),使用著色器(Shader),使用預(yù)設(shè)(Prefab)。
3.動(dòng)態(tài)加載資源的方式?(有時(shí)候也問(wèn)區(qū)別,具體請(qǐng)百度)
1.通過(guò)Resources模塊,調(diào)用它的load函數(shù):可以直接load并返回某個(gè)類型的Object,前提是要把這個(gè)資源放在Resource命名的文件夾下,Unity不關(guān)有沒(méi)有場(chǎng)景引用,都會(huì)將其全部打入到安裝包中。Resources.Load();
2.通過(guò)bundle的形式:即將資源打成 asset bundle 放在服務(wù)器或本地磁盤(pán),然后使用WWW模塊get 下來(lái),然后從這個(gè)bundle中l(wèi)oad某個(gè)object。AssetBundle
3.通過(guò)AssetDatabase.loadasset :這種方式只在editor范圍內(nèi)有效,游戲運(yùn)行時(shí)沒(méi)有這個(gè)函數(shù),它通常是在開(kāi)發(fā)中調(diào)試用的【AssetDatabase 資源數(shù)據(jù)庫(kù)】
區(qū)別:Resources的方式需要把所有資源全部打入安裝包,這對(duì)游戲的分包發(fā)布(微端)和版本升級(jí)(patch)是不利的,所以u(píng)nity推薦的方式是不用它,都用bundle的方式替代,把資源達(dá)成幾個(gè)小的bundle,用哪個(gè)就load哪個(gè),這樣還能分包發(fā)布和patch,但是在開(kāi)發(fā)過(guò)程中,不可能沒(méi)更新一個(gè)資源就打一次bundle,所以editor環(huán)境下可以使用AssetDatabase來(lái)模擬,這通常需要我們封裝一個(gè)dynamic resource的loader模塊,在不同的環(huán)境下做不同實(shí)現(xiàn)。
動(dòng)態(tài)資源的存放
有時(shí)我需要存放一些自己的文件在磁盤(pán)上,例如我想把幾個(gè)bundle放在初始的安裝里, unity有一個(gè)streaming asset的概念,用于提供存儲(chǔ)接口的訪問(wèn)。我們需要在編輯器建立一個(gè)StreamingAssets名字的文件夾,把需要我們放在客戶磁盤(pán)上的動(dòng)態(tài)文件放在這個(gè)文件夾下面,這樣安裝后,這些文件會(huì)放在用戶磁盤(pán)的指定位置,這個(gè)位置可以通過(guò)Application.streamingAssetsPath來(lái)得到。
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ò)哪些插件?
一 界面制作 推薦:NGUI
二 2D游戲制作 推薦:2D Toolkit //[?tu:lk?t] 工具包,工具箱
三 可視化編程 推薦:PlayMaker
四 插值插件 推薦:iTween,HOTween
五 路徑搜尋 推薦:Simple Path
六 美術(shù)及動(dòng)畫(huà)制作 推薦:RageSpline,Smooth Moves
七 畫(huà)面增強(qiáng) 推薦:Bitmap2Material,Strumpy Shader Editor
八 攝像機(jī)管理 推薦:Security Camera
九 資源包 推薦:Nature Pack
十、造路插件EasyRoads3D
6.使用unity3d實(shí)現(xiàn)2d游戲,有幾種方式?
1.使用本身的GUI;
2.把攝像機(jī)的Projection(投影)值調(diào)為Orthographic(正交投影),不考慮z軸;
3.使用2d插件,如:2DToolKit;
7.Unity3d中的碰撞器和觸發(fā)器的區(qū)別?
觸發(fā)器只是碰撞器身上的一個(gè)屬性,碰撞器是觸發(fā)器的載體。
碰撞器有碰撞的效果,IsTrigger=false,可以調(diào)用OnCollisionEnter/Stay/Exit函數(shù);
觸發(fā)器沒(méi)有碰撞效果,IsTrigger=true,可以調(diào)用OnTriggerEnter/Stay/Exit函數(shù)。
a.如果不想讓碰撞檢測(cè)影響物體移動(dòng)但是又想檢測(cè)到碰撞這時(shí)用到觸發(fā)器(Trigger)
b.觸發(fā)器用來(lái)檢測(cè)一個(gè)物件是否經(jīng)過(guò)空間中的某個(gè)區(qū)域
8.物體發(fā)生碰撞的必要條件
兩個(gè)物體都必須帶有碰撞器(Collider),其中一個(gè)物體還必須帶有Rigidbody剛體。
8.1 .CharacterController和Rigidbody的區(qū)別?
CharacterController自帶膠囊碰撞器,里面包含有剛體的屬性;
Rigidbody就是剛體,使物體帶有剛體的特征。
[CharacterController:角色控制器]
Rigidbody具有完全真實(shí)物理的特性,而CharacterController可以說(shuō)是受限的Rigidbody,具有一定的物理效果但不是完全真實(shí)的
9.在物體發(fā)生碰撞的整個(gè)過(guò)程中,有幾個(gè)階段,分別列出對(duì)應(yīng)的函數(shù)
三個(gè)階段
1.OnCollisionEnter(進(jìn)入碰撞) 2.OnCollisionStay (逗留碰撞) 3.OnCollisionExit(當(dāng)退出碰撞)
10.Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來(lái)
rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函數(shù)中。
11.什么叫做鏈條關(guān)節(jié)?
Hinge Joint,可以模擬兩個(gè)物體間用一根鏈條連接在一起的情況,能保持兩個(gè)物體在一個(gè)固定距離內(nèi)部相互移動(dòng)而不產(chǎn)生作用力,但是達(dá)到固定距離后就會(huì)產(chǎn)生拉力。
12.物體自身旋轉(zhuǎn)使用的函數(shù)?
Transform.Rotate()
13.物體圍繞某點(diǎn)旋轉(zhuǎn)使用的函數(shù)?
Transform.RotateAround()
14.Unity3d提供了一個(gè)用于保存和讀取數(shù)據(jù)的類(PlayerPrefs),請(qǐng)列出保存和讀取整形數(shù)據(jù)的函數(shù)
PlayerPrefs.SetInt() PlayerPrefs.GetInt()
15.Unity3d提供了幾種光源類型,分別是哪幾種?
四種。
平行光:Directional Light 點(diǎn)光源:Point Light
聚光燈:Spot Light 區(qū)域光源:Area Light
16.Unity3d腳本從喚醒到銷毀有著一套比較完整的生命周期,請(qǐng)列出系統(tǒng)自帶的幾個(gè)重要的方法。
Awake—>Start—>Update—>FixedUpdate—>LateUpdate—>OnGUI—>Reset—>OnDisable—>OnDestroy
17.物理更新一般放在哪個(gè)系統(tǒng)函數(shù)里?
FixedUpdate,每固定幀繪制時(shí)執(zhí)行一次,和Update不同的是FixedUpdate是渲染幀執(zhí)行,如果你的渲染效率低下的時(shí)候FixedUpdate調(diào)用次數(shù)就會(huì)跟著下降。FixedUpdate比較適用于物理引擎的計(jì)算,因?yàn)槭歉繋秩居嘘P(guān)。Update就比較適合做控制。
18.移動(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)。
19.當(dāng)游戲中需要頻繁創(chuàng)建一個(gè)物體時(shí),我們需要怎樣做能夠節(jié)省內(nèi)存?
使用預(yù)制物體對(duì)象Prefab,然后復(fù)制創(chuàng)建。
20.在場(chǎng)景中放置多個(gè)Camera并同時(shí)處于活動(dòng)狀態(tài)會(huì)發(fā)生什么?
游戲界面可以看到很多攝像機(jī)的混合。
21.請(qǐng)描述Prefab的作用,并描述如何在移動(dòng)設(shè)備的環(huán)境下恰當(dāng)?shù)氖褂盟?/strong>
Prefab在實(shí)例化的時(shí)候用到,主要用于經(jīng)常會(huì)用到的物體,屬性方便修改。
如何銷毀一個(gè)UnityEngine.Object及其子類?
使用Destroy()方法;
22.請(qǐng)簡(jiǎn)述Unity3d下如何安全的在不同工程間遷移asset數(shù)據(jù),請(qǐng)列舉出三種方法?
1.可以把a(bǔ)ssets目錄和Library目錄一起遷移
2.導(dǎo)出包
3.用Unity帶的assets Server功能
23.請(qǐng)描述游戲動(dòng)畫(huà)有哪幾種,以及其原理?
主要有關(guān)節(jié)動(dòng)畫(huà)、骨骼動(dòng)畫(huà)、單一網(wǎng)格模型動(dòng)畫(huà)(關(guān)鍵幀動(dòng)畫(huà))。
a.關(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à);
b.骨骼動(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)格蒙在骨骼之外,決定角色的外觀;
c.單一網(wǎng)格模型動(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í)。
24.請(qǐng)描述為什么Unity3d中會(huì)發(fā)生在組件上出現(xiàn)數(shù)據(jù)丟失的情況
一般是組件上綁定的物體對(duì)象被刪除了
25.alpha blend工作原理
Alpha Blend 實(shí)現(xiàn)透明效果,不過(guò)只能針對(duì)某塊區(qū)域進(jìn)行alpha操作,透明度可設(shè)。
26.寫(xiě)出光照計(jì)算中的diffuse的計(jì)算公式
計(jì)算公式為: Idiffuse = DintensityDcolorN.L ; (Dintensity表示漫反射強(qiáng)度, Dcolor 表示漫反射光顏色, N 為該點(diǎn)的法向量, L 為光源向量 其中N與L點(diǎn)乘,如果結(jié)果小于等于0,則漫反射為0。){[d?'fju:z] vi. 傳播;四散|intensity[?n'tens?t?] n. 強(qiáng)烈;(感情的)強(qiáng)烈程度;強(qiáng)度;烈度}
27.Lod是什么,優(yōu)缺點(diǎn)是什么?
LOD(Level of detail)多層次細(xì)節(jié),是最常用的游戲優(yōu)化技術(shù)。它按照模型的位置和重要程度決定物體渲染的資源分配,降低非重要物體的面數(shù)和細(xì)節(jié)度,從而獲得高效率的渲染運(yùn)算。
28.兩種陰影判斷的方法、工作原理。
A.陰影由兩部分組成:本影與半影
a.本影:景物表面上那些沒(méi)有被光源直接照射的區(qū)域(全黑的輪廓分明的區(qū)域)
b.半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的區(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
B.陰影分為兩種:自身陰影和投射陰影
自身陰影:因物體自身的遮擋而使光線照射不到它上面的某些可見(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ú)效了。
29.Vertex Shader是什么,怎么計(jì)算?
頂點(diǎn)著色器
頂點(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ò)程。
30.MipMap是什么,作用?
MipMapping:在三維計(jì)算機(jī)圖形的貼圖渲染中有常用的技術(shù),為加快渲染進(jìn)度和減少圖像鋸齒,貼圖被處理成由一系列被預(yù)先計(jì)算和優(yōu)化過(guò)的圖片組成的文件,這樣的貼圖被稱為MipMap。
31.機(jī)試:二選一
1.用代碼實(shí)現(xiàn)第三角色控制器
2.實(shí)現(xiàn)吊機(jī)吊物體的功能
【吊機(jī)吊物體需要節(jié)點(diǎn)掛接和坐標(biāo)系轉(zhuǎn)換】
32.反向旋轉(zhuǎn)動(dòng)畫(huà)的方法是什么?
【反轉(zhuǎn)動(dòng)畫(huà),講動(dòng)畫(huà)的速度調(diào)到-1,碰撞時(shí),被碰撞物體與碰撞物體有collider組件,碰撞物體有剛體組件,或角色碰撞得包含角色組件 OR 改變animation.speed】
33.碰撞檢測(cè)需要物體具備什么屬性?
能檢測(cè)碰撞發(fā)生的方式有兩種,一種是利用碰撞器,另一種則是利用觸發(fā)器
【Physics.OverlapSphere相交球檢測(cè)碰撞,碰撞檢測(cè)需要包圍盒】
34.獲取、增加、刪除組件的命令分別是什么?
獲取:GetComponent 增加:AddComponent 刪除:Destroy
35.Animation.CrossFade命令作用是:(C) {Fadevi. 褪去,失去光澤;}
A.動(dòng)畫(huà)放大 B.動(dòng)畫(huà)轉(zhuǎn)換 C.動(dòng)畫(huà)的淡入為其他動(dòng)畫(huà)
36.Application.loadLevel命令為:(A)
A加載關(guān)卡 B.異步加載關(guān)卡 C.加載動(dòng)作
37.調(diào)試記錄到控制臺(tái)的命令是什么?
Debug.Log();
39.編輯器類存放路徑是什么?
工程目錄下的Assets/Editor文件夾下。
40.使用原生GUI創(chuàng)建一個(gè)可以拖動(dòng)的窗口命令是什么?
GUI.DragWindow();
41.localPosition與Position的使用區(qū)別?
localPosition:自身位置,相對(duì)于父級(jí)的變換的位置。
Position:在世界坐標(biāo)transform的位置
意義連線
Mathf.Round 插值
Mathf.Clamp 四舍五入
Mathf.Lerp 限制
42.寫(xiě)一個(gè)計(jì)時(shí)器工具,從整點(diǎn)開(kāi)始計(jì)時(shí),格式為:00:00:00
43.寫(xiě)出Animation的五個(gè)方法
AddClip 添加剪輯、Blend 混合、Play 播放、Stop 停止、Sample 采樣
44.怎么拿到一個(gè)對(duì)象上腳本的方法
GameObject.GetComponent<>();
上機(jī)題:用鼠標(biāo)實(shí)現(xiàn)在場(chǎng)景中拖動(dòng)物體,用鼠標(biāo)滾輪實(shí)現(xiàn)縮放(用一個(gè)Cube即可)。
45.請(qǐng)簡(jiǎn)述向量的點(diǎn)乘,向量的叉乘以及向量歸一化的幾何意義?
點(diǎn)乘的幾何意義是:計(jì)算兩個(gè)向量之間的夾角,以及在某一方向上的投影;
叉乘的幾何意義是:創(chuàng)建垂直于平面,三角形,或者多邊形的向量;
46..Unity3D是否支持寫(xiě)成多線程?如果支持的話要注意什么?
支持:如果同時(shí)你要處理很多事情或者與Unity的對(duì)象互動(dòng)小可以用thread,否則使用coroutine.{ [k?ru:'ti:n] n. 協(xié)同程序}
注意:C#中有l(wèi)ock這個(gè)關(guān)鍵字,以確保只有一個(gè)線程可以在特定時(shí)間內(nèi)訪問(wèn)特定的對(duì)象
47.Unity3D中的協(xié)程(Coroutine)和C#線程之間的區(qū)別是什么?
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同步
48.請(qǐng)簡(jiǎn)述四元數(shù)的作用以及四元數(shù)相對(duì)于歐拉角的優(yōu)點(diǎn)
A.四元數(shù)一般定義如下:q=w+xi+yj+zk其中 w,x,y,z是實(shí)數(shù)。同時(shí),有: ii=-1 jj=-1 k*k=-1
B.四元數(shù)也可以表示為: q=[w,v]
有多種方式可表示旋轉(zhuǎn),如 axis/angle、歐拉角(Euler angles)、矩陣(matrix)、四元組等。 相對(duì)于其它方法,四元組有其本身的優(yōu)點(diǎn):
a.四元數(shù)不會(huì)有歐拉角存在的 gimbal lock 問(wèn)題[萬(wàn)向節(jié)死鎖]
b.四元數(shù)由4個(gè)數(shù)組成,旋轉(zhuǎn)矩陣需要9個(gè)數(shù)
c.兩個(gè)四元數(shù)之間更容易插值
d.四元數(shù)、矩陣在多次運(yùn)算后會(huì)積攢誤差,需要分別對(duì)其做規(guī)范化(normalize)和正交化 (orthogonalize),對(duì)四元數(shù)規(guī)范化更容易
e.與旋轉(zhuǎn)矩陣類似,兩個(gè)四元組相乘可表示兩次旋轉(zhuǎn)
49.請(qǐng)簡(jiǎn)述OnBecameVisible及OnBecameInvisible的發(fā)生時(shí)機(jī),以及他們執(zhí)行的意義?
當(dāng)renderer(渲染器)在任何相機(jī)上都不可見(jiàn)時(shí)調(diào)用:OnBecameInvisible
當(dāng)renderer(渲染器)在任何相機(jī)上可見(jiàn)時(shí)調(diào)用:OnBecameVisible
50.動(dòng)畫(huà)層(Animation Layers)的作用是什么?
動(dòng)畫(huà)層作為一個(gè)具有層級(jí)動(dòng)畫(huà)編輯概念的工具,可以用來(lái)制作和處理任何類型的動(dòng)畫(huà)
52.請(qǐng)說(shuō)出4種面向?qū)ο蟮脑O(shè)計(jì)原則,并分別簡(jiǎn)述它們的含義。
1) 單一職責(zé)原則 (The Single Responsiblity Principle,簡(jiǎn)稱SRP):一個(gè)類,最好只做一件事,只有一個(gè)引起它的變化.
2) 開(kāi)放-封閉原則 (The Open-Close Principle,簡(jiǎn)稱OCP):對(duì)于擴(kuò)展是開(kāi)放的,對(duì)于更改是封閉的
3) Liskov 替換原則(The Liskov Substitution Principle,簡(jiǎn)稱LSP):子類必須能夠替換其基類
4) 依賴倒置原則(The Dependency Inversion Pricinple,簡(jiǎn)稱DIP):依賴于抽象
5) 接口隔離原則 (The Interface Segregation Principle,簡(jiǎn)稱ISP):使用多個(gè)小的專門(mén)的接口,而不要使用一個(gè)大的總接口。
53.Material和Physic Material區(qū)別?
PhysicMaterial 物理材質(zhì):物理材質(zhì)描述,如何處理物體碰撞(摩擦,彈性)。
Material材質(zhì)(材質(zhì)類)為了獲得一個(gè)對(duì)象使用的材質(zhì),可以使用 Renderer.materia屬性:
54.法線貼圖 、CG動(dòng)畫(huà)
A.法線貼圖:是在原物體的凹凸表面的每個(gè)點(diǎn)上均作法線,通過(guò)RGB顏色通道來(lái)標(biāo)記法線的方向,你可以把它理解成與原凹凸表面平行的另一個(gè)不同的表面,但實(shí)際上它又只是一個(gè)光滑的平面。
B.CG動(dòng)畫(huà):原為Computer Graphics的英文縮寫(xiě)。隨著以計(jì)算機(jī)為主要工具進(jìn)行視覺(jué)設(shè)計(jì)和生產(chǎn)的一系列相關(guān)產(chǎn)業(yè)的形成,國(guó)際上習(xí)慣將利用計(jì)算機(jī)技術(shù)進(jìn)行視覺(jué)設(shè)計(jì)和生產(chǎn)的領(lǐng)域通稱為CG。它既包括技術(shù)也包括藝術(shù),幾乎囊括了當(dāng)今電腦時(shí)代中所有的視覺(jué)藝術(shù)創(chuàng)作活動(dòng),如平面印刷品的設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、三維動(dòng)畫(huà)、影視特效、多媒體技術(shù)、以計(jì)算機(jī)輔助設(shè)計(jì)為主的建筑設(shè)計(jì)及工業(yè)造型設(shè)計(jì)等。
NGUI(NUGUI1、NGUI2)
55、NGUI Button怎樣接受用戶點(diǎn)擊并調(diào)用函數(shù),具體方法名稱是什么
a、直接監(jiān)聽(tīng)事件
把下面腳本直接綁定在按鈕上,當(dāng)按鈕點(diǎn)擊時(shí)就可以監(jiān)聽(tīng)到,這種方法不太好很不靈活。
** 56、請(qǐng)描述游戲動(dòng)畫(huà)有哪幾種,以及其原理。**
主要有關(guān)節(jié)動(dòng)畫(huà)、單一網(wǎng)格模型動(dòng)畫(huà)(關(guān)鍵幀動(dòng)畫(huà))、骨骼動(dòng)畫(huà)。 a、關(guān)節(jié)動(dòng)畫(huà)把角色分成若干獨(dú)立部分,一個(gè)部分對(duì)應(yīng)一個(gè)網(wǎng)格模型,部分的動(dòng)畫(huà)連接成一個(gè)整體的動(dòng)畫(huà),角色比較靈活Quake2([kwe?k]vi.發(fā)抖,顫抖;)中使用了這種動(dòng)畫(huà);b、 單一網(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í)。 c、骨骼動(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à)
57、下面哪種做法可以打開(kāi)Unity的Asset Store
Windows -> Asset Store
58、Mecanim系統(tǒng)中,Body Mask的作用是?
指定身體的某一部分是否參與渲染
59、以下哪種操作步驟可以打開(kāi)Unity編輯器的Lightmapping視圖?
Windows --> Lightmapping
60、關(guān)于光照貼圖
A:使用光照貼圖比使用實(shí)時(shí)光源渲染要快 B:可以降低游戲內(nèi)存消耗 C、多個(gè)物體可以使用同一張光照貼圖
61、關(guān)于Vector3的API,以下說(shuō)法正確的是?
Vector3.forward與Vector3(0,0,1)是一樣的意思;
62、 以下哪個(gè)函數(shù)在游戲進(jìn)入新場(chǎng)景后會(huì)被馬上調(diào)用?
MonoBehaviour.OnLevelWasLoaded
63、 什么是導(dǎo)航網(wǎng)格( NavMesh)?
一種用于實(shí)現(xiàn)自動(dòng)尋路的網(wǎng)格
64、什么是局部坐標(biāo),什么是世界坐標(biāo)?
世界坐標(biāo)是不會(huì)變的,一直以世界坐標(biāo)軸的XYZ為標(biāo)準(zhǔn)。局部坐標(biāo)其實(shí)就是自身的坐標(biāo),會(huì)隨著物體的旋轉(zhuǎn)而變化的。
65、itween插件的作用是什么,itween作用于世界坐標(biāo)還是局部坐標(biāo),請(qǐng)列舉出3個(gè)其常用方法?
iTween是一個(gè)動(dòng)畫(huà)庫(kù),作者創(chuàng)建它的目的就是最小的投入實(shí)現(xiàn)最大的產(chǎn)出。讓你做開(kāi)發(fā)更輕松,用它可以輕松實(shí)現(xiàn)各種動(dòng)畫(huà),晃動(dòng),旋轉(zhuǎn),移動(dòng),褪色,上色,控制音頻等等“
方法:a、MoveTo 物體移動(dòng) ;b、ColorTo:隨著時(shí)間改變對(duì)象的顏色組; c、LookTo:隨時(shí)間旋轉(zhuǎn)物體讓其臉部朝向所提供的Vector3或Transform位置
66、請(qǐng)簡(jiǎn)述NGUI中Panel和Anchor的作用
Anchor包含UIAnchor腳本。UIAnchor的功能是把對(duì)象錨定在屏幕的邊緣(左上,左中,左下,上,中,下,右上,右中,右下),或縮放物體使其匹配屏幕的尺寸
Panel對(duì)象有UIPanel腳本,UIPanel是一個(gè)容器,它將包含所有UI小部件,并負(fù)責(zé)將所包含的部件組合優(yōu)化,以減少繪制命令的調(diào)用。
67、Unity攝像機(jī)有幾種工作方式,分別是什么?
68、LayerMask.NameToLayer()這個(gè)方法有什么作用?
LayerMask的使用是按位操作的,LayerMask.NameToLayer("Players") 返回該Layer的編號(hào)。
** 69、請(qǐng)描述MeshRender中material和shader的區(qū)別?**
Shader(著色器)實(shí)際上就是一小段程序,它負(fù)責(zé)將輸入的Mesh(網(wǎng)格)以指定的方式和輸入的貼圖或者顏色等組合作用,然后輸出。繪圖單元可以依據(jù)這個(gè)輸出來(lái)將圖像繪制到屏幕上。輸入的貼圖或者顏色等,加上對(duì)應(yīng)的Shader,以及對(duì)Shader的特定的參數(shù)設(shè)置,將這些內(nèi)容(Shader及輸入?yún)?shù))打包存儲(chǔ)在一起,得到的就是一個(gè)Material(材質(zhì))
Shader大體上可以分為兩類:表面著色器(Surface Shader) 、片段著色器(Fragment Shader)
70、什么是矢量圖
矢量圖:計(jì)算機(jī)中顯示的圖形一般可以分為兩大類——矢量圖和位圖。矢量圖使用直線和曲線來(lái)描述圖形,這些圖形的元素是一些點(diǎn)、線、矩形、多邊形、圓和弧線等等,它們都是通過(guò)數(shù)學(xué)公式計(jì)算獲得的。例如一幅花的矢量圖形實(shí)際上是由線段形成外框輪廓,由外框的顏色以及外框所封閉的顏色決定花顯示出的顏色。由于矢量圖形可通過(guò)公式計(jì)算獲得,所以矢量圖形文件體積一般較小。矢量圖形最大的優(yōu)點(diǎn)是無(wú)論放大、縮小或旋轉(zhuǎn)等不會(huì)失真;最大的缺點(diǎn)是難以表現(xiàn)色彩層次豐富的逼真圖像效果。
** 71、Unity 連接數(shù)據(jù)庫(kù)**
需要得到Mono.Data.Sqlite.dll 文件與System.Data.dll文件
72、四元組是什么?
所謂四元數(shù),就是把4個(gè)實(shí)數(shù)組合起來(lái)的東西。4個(gè)元素中,一個(gè)是實(shí)部,其余3個(gè)是虛部。
1、請(qǐng)簡(jiǎn)述值類型與引用類型的區(qū)別。
2、C#中所有引用類型的基類是什么?
3、請(qǐng)簡(jiǎn)述ArrayList和List之間的主要區(qū)別。
4、請(qǐng)簡(jiǎn)述GC(垃圾收集)產(chǎn)生的原因,并描述如何避免。
5、請(qǐng)描述interface和抽象類之間的不同。
6、下列代碼在運(yùn)行中,會(huì)產(chǎn)生幾個(gè)臨時(shí)對(duì)象?
[code]csharpcode:
1string a=new string(“abc”);
2a=(a.ToUpperCase()+“123”).SubString(0,2);
7、下列代碼在運(yùn)行中會(huì)發(fā)生什么問(wèn)題?如何避免?
[code]csharpcode:
1List Is=new List(new int[]{1,2,3,4,5});
2foreach(int n in Is)
3{
4Debug.Log(n*n);
5Is.Remove(n);
6}
8、請(qǐng)簡(jiǎn)述sealed關(guān)鍵字用在類聲明時(shí)與函數(shù)聲明時(shí)的作用。
9、請(qǐng)簡(jiǎn)述private,public,protected,internal的區(qū)別。
10、請(qǐng)簡(jiǎn)述反射的實(shí)現(xiàn)原理。
11、請(qǐng)簡(jiǎn)述.Net與Mono之間的關(guān)系。
12、請(qǐng)簡(jiǎn)述Unity3D支持的3種腳本語(yǔ)言的名稱。
13、Unity3D是否支持寫(xiě)成多線程程序?如果支持的話要注意什么?
14、Unity3D中的協(xié)程(coroutine)和C#線程之間的區(qū)別是什么?
15、請(qǐng)說(shuō)出Unity3D中勇于記錄節(jié)點(diǎn)空間幾何信息的組件名稱,及其父類名稱。
16、請(qǐng)簡(jiǎn)述四元數(shù)的作用以及四元數(shù)相對(duì)歐拉角的優(yōu)點(diǎn)。
17、請(qǐng)簡(jiǎn)述向量的點(diǎn)乘,向量的叉乘以及向量歸一化的意義。
18、請(qǐng)簡(jiǎn)述矩陣相乘的意義以及注意點(diǎn)。
19、請(qǐng)簡(jiǎn)述為何大家都在移動(dòng)設(shè)備上尋求Unity3D的原生GUI系統(tǒng)的替代方案。
20、請(qǐng)簡(jiǎn)述如何在不同分辨率下保持UI的一致性。
21、請(qǐng)簡(jiǎn)述為什么dynamic font在unicode環(huán)境下優(yōu)于static font。
22、請(qǐng)簡(jiǎn)述Renderer的作用,并描述MeshRenderer與SkinnedMeshRenderer之間的關(guān)系
與不同。
23、請(qǐng)簡(jiǎn)述SkinnedMesh的實(shí)現(xiàn)原理。
24、在場(chǎng)景中Prefab的作用,并描述如何在移動(dòng)設(shè)備環(huán)境下恰當(dāng)?shù)氖褂盟?/p>
26、如何銷毀一個(gè)UnityEngine.Object及其子類。
27、請(qǐng)簡(jiǎn)述為什么Unity3D中會(huì)發(fā)生在組建上出現(xiàn)數(shù)據(jù)丟失的情況(missing)。
28、請(qǐng)簡(jiǎn)述Unity3D下如何安全的在不同工程間遷移asset數(shù)據(jù),請(qǐng)舉出三種方法。
29、請(qǐng)簡(jiǎn)述MeshCollider和其他Collider的一個(gè)主要不同點(diǎn)。
30、當(dāng)一個(gè)細(xì)小的高速運(yùn)動(dòng)的物體(如子彈)撞向另一個(gè)較大的物體時(shí),可能出現(xiàn)什么
情況?如何避免?
31、請(qǐng)簡(jiǎn)述OnEnable,Aawake和Start在運(yùn)行時(shí)的發(fā)生順序。哪些可能在同一個(gè)對(duì)象的生
命期中發(fā)生。
32、請(qǐng)簡(jiǎn)述OnBecameVisible及OnBecameInvisible的發(fā)生時(shí)機(jī),以及這一對(duì)回調(diào)方法的
意義。
33、請(qǐng)簡(jiǎn)述Unity3D如何獲知場(chǎng)景中需要加載的數(shù)據(jù)。
34、請(qǐng)簡(jiǎn)述MeshRenderer中material和sharedmaterial的區(qū)別