Unity面考試試題匯總_第1頁(yè)
Unity面考試試題匯總_第2頁(yè)
Unity面考試試題匯總_第3頁(yè)
Unity面考試試題匯總_第4頁(yè)
Unity面考試試題匯總_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

一、C#語(yǔ)言

1.重載和重寫(xiě)的區(qū)別

1)所處位置不同重載在同類(lèi)中重寫(xiě)在父子類(lèi)中

2)定義方式不同重載方法名相同參數(shù)列表不同重寫(xiě)方法名和參數(shù)列表都相同

3)調(diào)用方式不同重載使用相同對(duì)象以不同參數(shù)調(diào)用重寫(xiě)用不同對(duì)象以相同參數(shù)調(diào)用

4)多態(tài)時(shí)機(jī)不同重載時(shí)編譯時(shí)多態(tài)重寫(xiě)是運(yùn)行時(shí)多態(tài)

2.面向?qū)ο蟮娜筇攸c(diǎn)

封裝、繼承、多態(tài)

1、封裝:封裝是將數(shù)據(jù)和行為相結(jié)合,通過(guò)行為約束代碼修改數(shù)據(jù)的程度,增強(qiáng)數(shù)據(jù)的安全性,屬性是

c#封裝實(shí)現(xiàn)的最好體現(xiàn)。

2、繼承:提高代碼重用度,增強(qiáng)軟件可維護(hù)性的重要手段,符合開(kāi)閉原則。

3、多態(tài)性:多態(tài)性是指同名的方法在不同環(huán)境下,自適應(yīng)的反應(yīng)出不同得表現(xiàn),是方法動(dòng)態(tài)展示的重要

手段。

3.簡(jiǎn)述值類(lèi)型和引用類(lèi)型有什么區(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,

4.請(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)

protectedinternal:protected+internal

5.C#中所有引用類(lèi)型的基類(lèi)是什么

引用類(lèi)型的基類(lèi)是System.Object值類(lèi)型的基類(lèi)是System.ValueType

同時(shí),值類(lèi)型也隱式繼承自System.Object

6.請(qǐng)簡(jiǎn)述ArrayList和Listvlnt>的主要區(qū)別

ArrayList不帶泛型數(shù)據(jù)類(lèi)型丟失

List<T>帶泛型數(shù)據(jù)類(lèi)型不丟失

ArrayList需要裝箱拆箱List<T>不需要

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

GC為了避免內(nèi)存溢出而產(chǎn)生的回收機(jī)制

避免:1)減少new產(chǎn)生對(duì)象的次數(shù)

2)使用公用的對(duì)象(靜態(tài)成員)

3)將String換為StringBuilder

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

1.接口不是類(lèi)不能實(shí)例化抽象類(lèi)可以間接實(shí)例化

2.接口是完全抽象抽象類(lèi)為部分抽象

3.接口可以多繼承抽象類(lèi)是單繼承

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

stringa=newstringfwabc")

a=(a.ToUpperO+w123").Substring(0,2);

其實(shí)在C#中第一行是會(huì)出錯(cuò)的(Java中倒是可行)。應(yīng)該這樣初始化:

stringb=newstring(newchar[]{'a'/b7c'});

忽略錯(cuò)誤的話(huà):

l."abc"

2.a.Tollpper()

3."123H

4.a.ToUpper()+"123"

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

1.List<ioi>N=newList<iflt>(newifltt;{2,3,%5});

2.for曾ch(intitemin心)。

3?{'

4.〈onso]e.Writ?Line(item,iteo);^

5-戟富菲

o.),

會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤,因?yàn)閒oreach是只讀的。不能一邊遍歷一邊修改。

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

類(lèi)聲明時(shí)可防止其他類(lèi)繼承此類(lèi),在方法中聲明則可防止派生類(lèi)重寫(xiě)此方法。

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

可以在加載程序運(yùn)行時(shí),動(dòng)態(tài)獲取和加載程序集,并且可以獲取到程序集的信息

反射即在運(yùn)行期動(dòng)態(tài)獲取類(lèi)、對(duì)象、方法、對(duì)象數(shù)據(jù)等的一種重要手段

主要使用的類(lèi)庫(kù):System.Reflection

核心類(lèi):

l.Assembly描述了程序集

2.Type描述了類(lèi)這種類(lèi)型

3.Constructorinfo描述了構(gòu)造函數(shù)

4.Methodlnfo描述了所有的方法

5.Fieldlnfo描述了類(lèi)的字段

6.Propertylnfo描述類(lèi)的屬性

通過(guò)以上核心類(lèi)可在運(yùn)行時(shí)動(dòng)態(tài)獲取程序集中的類(lèi),并執(zhí)行類(lèi)構(gòu)造產(chǎn)生類(lèi)對(duì)象,動(dòng)態(tài)獲取對(duì)象的字段或

屬性值,更可以動(dòng)態(tài)執(zhí)行類(lèi)方法和實(shí)例方法等。

13..Net與Mono的關(guān)系?

,Net是一個(gè)語(yǔ)言平臺(tái),Mono為.Net提供集成開(kāi)發(fā)環(huán)境,集成并實(shí)現(xiàn)了.NET的編譯器、CLR和基礎(chǔ)類(lèi)庫(kù),

使得.Net既可以運(yùn)行在windows也可以運(yùn)行于linux,Unix,MacOS等。

14.在類(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ù)。

15.C#String類(lèi)型比stringBuilder類(lèi)型的優(yōu)勢(shì)是什么?

1、在處理字符串時(shí):String是創(chuàng)建一個(gè)string對(duì)象,在創(chuàng)建對(duì)象時(shí)需要分配內(nèi)存空間。StringBuilder是

在原來(lái)的內(nèi)存中修改,不需要分配內(nèi)存空間。

2、從內(nèi)存優(yōu)化方面來(lái)說(shuō),頻繁對(duì)字符串的操作使用StringBuilder更好。

3、從功能上來(lái)說(shuō)String仍然比StringBuilder更強(qiáng)。

4、String主要用于公共API,通用性好,讀取性能高,占用內(nèi)存小。

5、StringBuilder主要用于拼接String,修改性能好。

6、String是不可變的,所以天然線程同步。

7、StringBuilder可變,非線程同步。

如果是處理字符串的話(huà),用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可變,非線程同步。

16.C#函數(shù)Func(stringa,stringbjfflLambda表達(dá)式怎么寫(xiě)?

(a,b)=>{};

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

publicintCountNumber(intnum){

if(num==111num==2){

return1;

}else{

returnCountNumber(num-1)+CountNumber(num-2);

18.冒泡排序(手寫(xiě)代碼)

publicstaticvoidBubblingSort(int[]array){

for(inti=0;i<array.Length;i++){

for(intj=array.Length-1;j>0;j-){

if(array[j]<array[i]){

inttemp=array[j];

array[j]=array[j-l];

array[j-1]=temp;

)

)

}

19.C#中有哪些常用的容器類(lèi),各有什么特點(diǎn)。

List,HashTable,Dictionary,Stack,Queue

List:索引泛型容器訪問(wèn)速度快修改速度慢

HashTable/Dictionary:散列表格式查詢(xún)效率高空間占用較大

Stack:后進(jìn)先出

Queue:先進(jìn)先出

20.C#中常規(guī)容器和泛型容器有什么區(qū)別,哪種效率高?

不帶泛型的容器需要裝箱和拆箱操作速度慢所以泛型容器效率更高數(shù)據(jù)類(lèi)型更安全

21.有哪些常見(jiàn)的數(shù)值類(lèi)?

簡(jiǎn)單值類(lèi)型-包括整數(shù)類(lèi)型、實(shí)數(shù)類(lèi)型、字符類(lèi)型、布爾類(lèi)型

復(fù)合值類(lèi)型-包括結(jié)構(gòu)類(lèi)型、枚舉類(lèi)型

22.C#中委托和接口有什么區(qū)別?各用在什么場(chǎng)合?

接口(interface)是約束類(lèi)應(yīng)該具備的功能集合,約束了類(lèi)應(yīng)該具備的功能,使類(lèi)從千變?nèi)f化的具體邏

輯中解脫出來(lái),便于類(lèi)的管理和擴(kuò)展,同時(shí)又合理解決了類(lèi)的單繼承問(wèn)題。

C#中的委托是約束方法集合的一個(gè)類(lèi),可以便捷的使用委托對(duì)這個(gè)方法集合進(jìn)行操作。

在以下情況中使用接口:

1.無(wú)法使用繼承的場(chǎng)合

2.完全抽象的場(chǎng)合

3.多人協(xié)作的場(chǎng)合

以上等等

在以下情況中使用委托:多用于事件處理中

23.C#中unsafe關(guān)鍵字是用來(lái)做什么的?什么場(chǎng)合下使用?

非托管代碼才需要這個(gè)關(guān)鍵字一般用在帶指針操作的場(chǎng)合

24.C#中ref和out關(guān)鍵字有什么區(qū)別?

ref修飾參數(shù),表示進(jìn)行引用傳遞,out修飾參數(shù)也表示進(jìn)行引用傳遞,但傳遞的引用只為帶回返回值ref

又進(jìn)又出out不進(jìn)只出

25.For,foreach,Enumerator.MoveNext的使用,與內(nèi)存消耗情況

for循環(huán)可以通過(guò)索引依次進(jìn)行遍歷,foreach和Enumerator.MoveNext通過(guò)迭代的方式進(jìn)行遍歷。內(nèi)存

消耗上本質(zhì)上并沒(méi)有太大的區(qū)別。但是在Unity中的Update中,一般不推薦使用foreach因?yàn)闀?huì)遺留內(nèi)

存垃圾。

26.函數(shù)中多次使用string的+=處理,會(huì)產(chǎn)生大量?jī)?nèi)存垃圾(垃圾碎片),有什

么好的方法可以解決。

通過(guò)StringBuilder那進(jìn)行append,這樣可以減少內(nèi)存垃圾

27.當(dāng)需要頻繁創(chuàng)建使用某個(gè)對(duì)象時(shí),有什么好的程序設(shè)計(jì)方案來(lái)節(jié)省內(nèi)存?

設(shè)計(jì)單例模式進(jìn)行創(chuàng)建對(duì)象或者使用對(duì)象池

28.JIT和AOT區(qū)另U

Just-In-Time-實(shí)時(shí)編譯

執(zhí)行慢安裝快占空間小一點(diǎn)

Ahead-Of-Time-預(yù)先編譯

執(zhí)行快安裝慢占內(nèi)存占外存大

29.給定一個(gè)存放參數(shù)的數(shù)組,重新排列數(shù)組

voidSortArray(Arrayarr){Array.Sort(arr);}

30.Foreach循環(huán)迭代時(shí),若把其中的某個(gè)元素刪除,程序報(bào)錯(cuò),怎么找到那個(gè)

元素?以及具體怎么處理這種情況?(注:Tiy....Catch捕捉異常,發(fā)送信息

不可行)

foreach不能進(jìn)行元素的刪除,因?yàn)榈鲿?huì)鎖定迭代的集合,解決方法:記錄找到索引或者key值,

迭代結(jié)束后再進(jìn)行刪除。

31.GameObjecta=newGameObject()GameObjectb=a實(shí)例化出來(lái)了A,

將A賦給B,現(xiàn)在將B刪除,問(wèn)A還存在嗎?

存在,b刪除只是將它在棧中的內(nèi)存刪除,而A對(duì)象本身是在堆中,所以A還存在

32.你擁有A塊錢(qián),一瓶水B塊錢(qián),每瓶水可以得到一個(gè)瓶蓋,每C個(gè)瓶蓋可

以換一瓶水請(qǐng)寫(xiě)出函數(shù)求解上面題目,上面題目ABC為參數(shù)

publicstaticintBuy(intajntbjntc){

returna/b+ForCap(c,a/b);

)

publicstaticintForCapfintcjntd){

if(d<c){

return0;

}else{

returnd/c+ForCap(c,d/c+d%c);

)

)

33.有一排開(kāi)關(guān),第一個(gè)人把所有的開(kāi)關(guān)打開(kāi),第二個(gè)人按2的倍數(shù)的開(kāi)關(guān),

第三個(gè)人按3的倍數(shù)的開(kāi)關(guān),以此類(lèi)推,現(xiàn)在又n個(gè)開(kāi)關(guān),k個(gè)人,寫(xiě)函

數(shù)求最后等兩者的開(kāi)關(guān),輸入?yún)?shù)n和k

staticvoidMain(string[]args){

intn=int.Parse(Console.ReadLine());

intk=int.Parse(Console.ReadLine());

Function(100,100);

)

staticvoidFunction(intn,intk){

inti,j=0;

bool[]a=newbool[1000];〃初始false:關(guān)燈,true:開(kāi)燈

for(i=1;i<=k;i++)//k個(gè)人

for(j=1;j<=n;j++)//n個(gè)燈

if(j%i==0)

a[j]=〃取反,false變true,原來(lái)開(kāi)變關(guān),關(guān)變開(kāi)

for(i=1;i<=n;i++)〃最后輸出a[i]的值就可以了

if⑶i])〃燈亮著

Console.WriteLine(i);

34.數(shù)制轉(zhuǎn)換,將任意整數(shù)轉(zhuǎn)換成8進(jìn)制形式

staticvoidMain(string[]args){

intn;

n=int.Parse(Console.ReadLine());

Console.WriteLine("輸入的10進(jìn)制為:{0}",n);

Console.Write("轉(zhuǎn)換為8進(jìn)制數(shù)為:");

d2o(n);

)

staticvoidd2o(intn){

if(n>7){

d2o(n/8);

)

Console.Write(n%8);

35.找出200以?xún)?nèi)的素?cái)?shù)。

staticvoidMain(string[]args){

intcount=0;

for(inti=1;i<200;i++){〃外層循環(huán):要判斷的數(shù)

for(intj=2;j<=i;j++){

if(i%j==0&&i!=j){

break;

)

if(j==i){〃結(jié)束的條件:最后一個(gè)數(shù)還沒(méi)有被整除

count++;

Console.WriteLine(i);

)

)

Console.WriteLine(count);

36.打印楊輝三角形

publicstaticvoidYHSJ(){

int[][]a=newint⑺口;

a[0]=newint[l];//a[0][0]=l;

a[l]=newint[2];

for(inti=0;i<7;i++){

a[i]=newint[i+l];

a[i][0]=l;

a[i][i]=l;

if(i>l){〃求出中間的數(shù)據(jù)

for(intj=l;j<i;j++){

a[i][j]=a[i-l][j-l]+a[i-l][j];

)

)

)

for(inti=0;i<a.Length;i++){

for(intk=0;k<a.Length-l-i;k++){

Console.Write("");

)

for(intj=O;j<a[i].Length;j++){

Console.Write(a[i][j]+

)

Console.WriteLine();

)

)

37.中國(guó)有句俗話(huà)“三天打魚(yú)兩天曬網(wǎng)”,某人從2000年1月1日起開(kāi)始“三

天打魚(yú)兩天曬網(wǎng)”,問(wèn)這個(gè)人在今后的某天中“打魚(yú)”還是“曬網(wǎng)”

publicstaticvoidCompute(){

Console.WriteLine((DateTime.Now-DateTime.Parse("2000-01-01")).Days%5<3?"JTfe":"?R");

38.假設(shè)當(dāng)前市場(chǎng)價(jià)一只雞10元,一只鴨12元5角。請(qǐng)寫(xiě)一個(gè)函數(shù)ShowPrice,

輸入?yún)?shù)分別為雞和鴨的個(gè)數(shù)(非負(fù)整型),功能為顯示出總價(jià)錢(qián),精確到

分。例如調(diào)用ShowPrice(5,10)后輸出175.00。請(qǐng)注意程序的可讀性和

易于維護(hù)性。

staticvoidShowPrice(intnum_chicken,intnum_duck){

floattotalPrice=O.OOf;

floatprice__chicken=lOf;

floatprice_duck=12.5f;

totalPrice=num_chicken*price_chicken+num_duck*price_duck;

Console.WriteLine("總價(jià)錢(qián)為:{0:0.00}",totalPrice);

)

39.請(qǐng)寫(xiě)一個(gè)函數(shù),用于返回n!(階乘)結(jié)果末尾連續(xù)0的個(gè)數(shù),如GetZeroCount

(5)返回1,因?yàn)?!=120,末尾連續(xù)1個(gè)0

staticvoidMain(string[]args){

intfac=Factorial(S);

Console.WriteLine(CountZero(fac));

)

publicstaticintFactorial(intn){

if(n==1){

return1;

}else{

returnn*jiecheng(n-1);

)

)

〃求連續(xù)的0的個(gè)數(shù)

publicstaticintCountZero(intnum){

intresult=0;//最后的結(jié)果

StringnumStr=num.ToString();

for(inti=numStr.Length-1;i>=0;i-){

if(numStrfi]=='0'){

result++;

}else{

break;

)

)

returnresult;

二、Unity編輯器基礎(chǔ)

40.請(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à))

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

物體A必須帶有(coHider+rigidbody)或者Charactercontroller,另一個(gè)物體也必須至少帶有collider

42.GUI與UGUI的優(yōu)點(diǎn)和缺點(diǎn)

GUI不方便控制,UGUI所見(jiàn)即所得,方便控制。GUI使用在生命周期函數(shù)OnGUI中使用,腳本來(lái)書(shū)寫(xiě)

控制。UGUI使用Canvas畫(huà)布和事件系統(tǒng)。UGUI適應(yīng)屏幕上比GUI簡(jiǎn)單。

43.一個(gè)場(chǎng)景放置多個(gè)carmera并同時(shí)處于活動(dòng)狀態(tài),會(huì)發(fā)生什么

實(shí)際看到的畫(huà)面由多個(gè)camera的畫(huà)面組成,由depth、ClearFlag>CullingMask都會(huì)影響最終合成效

果。

44.使用過(guò)哪些第三方插件?

一、界面制作推薦:NGUI

二、2D游戲制作推薦:2DToolkit//[tu:lkit]工具包,工具箱

三、可視化編程推薦:PlayMaker

四、插值插件推薦:iTween出OTween

五、路徑搜尋推薦:SimplePath

六、美術(shù)及動(dòng)畫(huà)制作推薦:RageSpline,SmoothMoves

七、畫(huà)面增強(qiáng)推薦:BitmapZMateriaLStrumpyShaderEditor

八、攝像機(jī)管理推薦:SecurityCamera

九、資源包推薦:NaturePack

十、造路插件EasyRoads3D

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

Transform父類(lèi)是Component

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

不美觀,OnGUI很耗費(fèi)時(shí)間,使用不方便,DrawCall

47.請(qǐng)簡(jiǎn)述如何在不同分辨率下保持UI的一致性

NGUI很好的解決了這一點(diǎn),屏幕分辨率的自適應(yīng)性,原理就是計(jì)算出屏幕的寬高比跟原來(lái)的預(yù)設(shè)的屏

幕分辨率求出一個(gè)對(duì)比值,然后修改攝像機(jī)的size。

48.為什么dynamicfont在unicode環(huán)境下優(yōu)于staticfont

Unicode是國(guó)際組織制定的可以容納世界上所有文字和符號(hào)的字符編碼方案。使用動(dòng)態(tài)字體時(shí),Unity

將不會(huì)預(yù)先生成一個(gè)與所有字體的字符紋理。當(dāng)需要支持亞洲語(yǔ)言或者較大的字體的時(shí)候,若使用正常

紋理,則字體的紋理將非常大。

49.Render的作用?描述MeshRender和SkinnedMeshRender的關(guān)系與

不同

Mesh就是指模型的網(wǎng)格(同名組件是用于調(diào)整網(wǎng)格屬性的),MeshFilter一般是用于獲得模型網(wǎng)格的

組件,而MeshRender是用于把網(wǎng)格渲染出來(lái)的組件

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

SkinnedMesh中文一般稱(chēng)作骨骼蒙皮動(dòng)畫(huà).這種動(dòng)畫(huà)中包含骨骼(Bone)和蒙皮(SkinnedMesh)兩個(gè)

部分,Bone的層次結(jié)構(gòu)和關(guān)節(jié)動(dòng)畫(huà)類(lèi)似,Mesh則和關(guān)節(jié)動(dòng)畫(huà)不同:關(guān)節(jié)動(dòng)畫(huà)中是使用多個(gè)分散的

Mesh,而SkinnedMesh中Mesh是一個(gè)整體,也就是說(shuō)只有一個(gè)Mesh,實(shí)際上如果沒(méi)有骨骼讓

Mesh運(yùn)動(dòng)變形,Mesh就和靜態(tài)模型一樣了。SkinnedMesh技術(shù)的精華在于蒙皮,所謂的皮并不是

模型的貼圖。而是Mesh本身,蒙皮是指將Mesh中的頂點(diǎn)附著(綁定)在骨骼之上,而且每個(gè)頂點(diǎn)

可以被多個(gè)骨骼所控制,這樣在關(guān)節(jié)處的頂點(diǎn)由于同時(shí)受到父子骨骼的拉扯而改變位置就消除了裂縫。

可以理解為具有蒙皮信息的Mesh或可當(dāng)做皮膚用的Mesh,這個(gè)皮膚就是Mesh。而為了有皮膚功

能,Mesh還需要蒙皮信息,即Skin數(shù)據(jù),沒(méi)有Skin數(shù)據(jù)就是一個(gè)普通的靜態(tài)Mesh了。Skin數(shù)

據(jù)決定頂點(diǎn)如何綁定到骨骼上。頂點(diǎn)的Skin數(shù)據(jù)包括頂點(diǎn)受哪些骨骼影響以及這些骨骼影響該頂點(diǎn)時(shí)

的權(quán)重(weight),另外對(duì)于每塊骨骼還需要骨骼偏移矩陣(BoneOffsetMatrix)用來(lái)將頂點(diǎn)從Mesh空

間變換到骨骼空間。

51.Prefab的作用?如何在移動(dòng)環(huán)境的設(shè)備下恰當(dāng)?shù)厥褂盟?/p>

在游戲運(yùn)行時(shí)實(shí)例化,prefab相當(dāng)于一個(gè)模版,對(duì)你已有的素材,、腳本、參數(shù)做一個(gè)默認(rèn)配置,以便

于以后修改,同時(shí)prefab打包的內(nèi)容簡(jiǎn)化了導(dǎo)出的操作,便于團(tuán)隊(duì)的交流。

52.如何銷(xiāo)毀一個(gè)UnityEngine.Object及其子類(lèi)

Destory

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

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

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

Meshcollider是基于頂點(diǎn)的。建議還是用boxcollider,boxcollider本身是基于算法,沒(méi)有面的概念。

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

免?

穿透(碰撞檢測(cè)失?。ㄅ鲎搀w變大,F(xiàn)ixedUpdate,代碼限制)

56.MeshRender中material和sharedmaterial的區(qū)別?

修改sharedMaterial將改變所有物體使用這個(gè)材質(zhì)的外觀,并且也改變儲(chǔ)存在工程里的材質(zhì)設(shè)置。

不推薦修改由sharedMaterial返回的材質(zhì)。如果你想修改渲染器的材質(zhì),使用material替代。

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

1.利用引擎自帶的GUI和2D系統(tǒng)

2.把攝像機(jī)設(shè)為Orthographic,用面片作為2d元素

3.利用第三方插件:NGUK2dToolkit

58.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ù)

59.Charactercontroller和Rigidbody的區(qū)另U

Rigidbody具有完全真實(shí)物理的特性,而Charactercontroller可以說(shuō)是受限的Rigidbody,具有一定的

物理效果但不是完全真實(shí)的。

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

HingeJoint,他可以模擬兩個(gè)物體間用一根鏈條連接在一起的情況,能保持兩個(gè)物體在一個(gè)固定距離內(nèi)

部相互移動(dòng)而不產(chǎn)生作用力,但是達(dá)到固定距離后就會(huì)產(chǎn)生拉力。(簡(jiǎn)單說(shuō)就是彈簧)

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

平行光:DirectionalLight

聚光燈:SpotLight

點(diǎn)光源:PointLight

區(qū)域光源:AreaLight(只用于烘培)

62.u3d下如何安全的在不同工程遷移asset數(shù)據(jù)

方法1,可以把a(bǔ)ssets目錄和Library目錄一起遷移,

方法2,導(dǎo)出包

方法3,用unity帶的assetsserver功能

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

觸發(fā)器只是碰撞器身上的一個(gè)屬性,碰撞器是觸發(fā)器的載體。

碰撞器有碰撞的效果,lsTrigger=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ū)域

64.動(dòng)畫(huà)層(AnimationLayers)的作用是什么?

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

65.Material和PhysicMaterial區(qū)別?

PhysicMaterial物理材質(zhì):物理材質(zhì)描述,如何處理物體碰撞(摩擦,彈性)。Material材質(zhì)(材質(zhì)類(lèi))

為了獲得一個(gè)對(duì)象使用的材質(zhì),可以使用Renderer.materia屬性

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

一種用于實(shí)現(xiàn)自動(dòng)尋路的網(wǎng)格

67.請(qǐng)簡(jiǎn)述NGUI中Panel和Anchor的作用

Anchor包含UlAnchor腳本。UlAnchor的功能是把對(duì)象錨定在屏幕的邊緣(左上,左中,左下,

上,中,下,右上,右中,右下),或縮放物體使其匹配屏幕的尺寸

Panel對(duì)象有UlPanel腳本,UlPanel是一個(gè)容器,它將包含所有UI小部件,并負(fù)責(zé)將所包含的部件

組合優(yōu)化,以減少繪制命令的調(diào)用。

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

perspective透視攝像機(jī)和orthographic正交攝像機(jī)

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

LayerMask的使用是按位操作的,LayerMask.NameToLayer("Players〃)返回該Layer的編號(hào)。

70.NGUI與UGUI的優(yōu)點(diǎn)和缺點(diǎn)

1)NGUI還保留著圖集,需要進(jìn)行圖集的維護(hù)。而UGUI沒(méi)有圖集的概念,可以充分利用資源,避免重

復(fù)資源。

2)UGUI出現(xiàn)了錨點(diǎn)的概念,更方便屏幕自適應(yīng)。

3)NGUI支持圖文混排,UGUI暫未發(fā)現(xiàn)支持此功能。

4)UGUI沒(méi)有UlWrap來(lái)循環(huán)scrollview內(nèi)容。

5)UGUI暫時(shí)沒(méi)有集成Tween組件。

71.是否熟悉UGUI

熟悉,之前在一些項(xiàng)目用UGUI做過(guò)界面,和NGUI很相似。

72.會(huì)寫(xiě)插件么?

了解過(guò),但在公司這塊用的比較少,沒(méi)怎么寫(xiě)過(guò),不過(guò)我能很快學(xué)會(huì)。

73.UGUI和NGUI的區(qū)別?為什么不使用NGUI?

1、uGUI的Canvas有世界坐標(biāo)和屏幕坐標(biāo),NGUI有2D和3D區(qū)別。

2、uGUI的Image可以使用materialo

3、UGUI通過(guò)Mask來(lái)裁剪,而NGUI通過(guò)Panel的Clip

4、NGUI的渲染前后順序是通過(guò)Widget的Depth,而UGUI渲染順序根據(jù)Hierarchy的順序,越下面渲

染在頂層。

1)、UGUI不需要綁定Colliders,UI可以自動(dòng)攔截事件。

2)、UGUI的Anchor是相對(duì)父對(duì)象,沒(méi)有提供高級(jí)選項(xiàng),個(gè)人感覺(jué)uGUI的Anchor操作起來(lái)比

NGUI更方便

7、UGUI沒(méi)有Atlas一說(shuō),使用SpritePacker。

8、UGUI的Navgation在Scene中能可視化。

9、UGUI的事件需要實(shí)現(xiàn)事件系統(tǒng)的接口,但寫(xiě)起來(lái)也算簡(jiǎn)單。

10、NGUI功能更豐富一些

之所以不用NGUI是因?yàn)閁GUI是Unity官方推出的,慢慢會(huì)成為制作UI的主要工具,配套的插件也越

來(lái)越多,但是具體使用NGUI還是UGUI還要看公司這邊,因?yàn)檫@兩個(gè)我都用過(guò)一段時(shí)間。

74.UI用的是NGUI還是UGUI?

兩個(gè)都用過(guò)。之前用的NGUI后來(lái)用了UGUI。

75.Unity3d中staticbatching和dynamicbatching各有什么用?

DynamicBatching不需要任何操作,只要共享材質(zhì)(即使是不同的Mesh模型也可以),就會(huì)自動(dòng)被合并。

可以自由移動(dòng)旋轉(zhuǎn)。但有以下使用要求:

(1)模型文件共計(jì)點(diǎn)數(shù)不超過(guò)900。(重復(fù)使用同一個(gè)Mesh不計(jì))

(2)單個(gè)物體可以不超過(guò)300點(diǎn),Shader可以有法線UV。但如果Shader使用了UV0UV1兩套UV,或

者Tangent切線的話(huà),單個(gè)物體只能不超過(guò)180點(diǎn)

(3)游戲?qū)ο笫褂孟嗤P秃筒馁|(zhì)時(shí),只有相同縮放(即xyz等比縮放,浮點(diǎn)尾數(shù)可以有細(xì)微差)的會(huì)被合并。

(1,1,1)與(1,1,1)

(2,2,2)與(2,2,2)

(0.5,0.5,0.5)與(0.5,0.5,0.5)

(2,2,2)與(2,2,2.0001)

⑷場(chǎng)景烘焙:烘焙后同材質(zhì)將不會(huì)被烘焙。lightmap有隱藏的材質(zhì)參數(shù):offset/scale,所以使用lightmap

的物體不會(huì)被合并

(5)Shader不能使用多Pass:多Pass的Shader會(huì)破壞DynamicBatching

StaticBatching

原理:運(yùn)行游戲后將一組游戲?qū)ο蟮亩鄠€(gè)模型會(huì)被動(dòng)態(tài)合并為1個(gè)。這組游戲?qū)ο笏惺褂猛徊馁|(zhì)的

在一個(gè)DrawCall來(lái)完成。這些游戲?qū)ο筮\(yùn)行后無(wú)法移動(dòng)縮放旋轉(zhuǎn)。但是Drawcall一定是最大化合并的,

并且不受動(dòng)態(tài)合并的諸多限制(見(jiàn)下文詳述)。

注意:即使物體都使用了同樣的模型,在batch后每一個(gè)物體都會(huì)創(chuàng)建一份模型對(duì)應(yīng)的geometry,在新

的CombinedMesh里。所以過(guò)多的batch會(huì)增加內(nèi)存占用。例如場(chǎng)景里的樹(shù)群就不適合StaticBatch,而

適合動(dòng)態(tài)合并。

實(shí)現(xiàn)方法:

(l)MeshRenderer勾選BatchingStatic:勾了艮P可

⑵代碼中使用UnityEngine.StaticBatchingUtility實(shí)現(xiàn)(可以在任何平臺(tái)調(diào)用):

1)將所有要合并的靜態(tài)物體(不須勾BatchingStatic)放入統(tǒng)一一個(gè)root

2)StaticBatchingUtility.Combine(root);之后就合并好了!

區(qū)別:勾選BatchingStatic:完全自動(dòng)合并,在MeshFilter里顯示的是CombinedMesh(root:scene)o合并

后不能移動(dòng)

StaticBatchingUtility:合并到一個(gè)游戲?qū)ο笙?。合并后可以移?dòng)父節(jié)點(diǎn)游戲?qū)ο蟆?/p>

76.Unity3d中Awake和Start誰(shuí)先執(zhí)行,update和fixedUpdate有什么區(qū)

別?

Awake先執(zhí)行。Update是在每次渲染新的一幀的時(shí)候才會(huì)調(diào)用,F(xiàn)ixedUpdate,是在固定的時(shí)間間隔執(zhí)

行,不受游戲幀率(fps)的影響,FixedUpdate的時(shí)間間隔可以在項(xiàng)目設(shè)置中更改,Edit->Project

Setting->time找到Fixedtimestep。就可以修改了

77.Unity引擎中以下對(duì)MeshRenderer組件描述正確的是哪一項(xiàng)?C

A.MeshRenderer組件決定了場(chǎng)景中游戲?qū)ο蟮奈恢?,旋轉(zhuǎn)和縮放

B.為場(chǎng)景中的某一游戲?qū)ο笤鎏砦锢淼奶匦?,需要為該游戲?qū)ο筇砑覯eshRenderer組件

C.MeshRenderer組件從MeshFilter組件中獲得網(wǎng)格信息,病根據(jù)物體的Transform組件所定義的位置

進(jìn)行渲染

D.MeshRenderer是從網(wǎng)格資源中獲取網(wǎng)格信息的組件

78.哪種實(shí)時(shí)光源是Unity中沒(méi)有的?D

A:點(diǎn)光源

B:方向光

C:聚光燈

D:日光燈

79.如何在Unity中創(chuàng)建地形系統(tǒng)?A

A:Terrain->CreateTerrain

B:Component->CreateTerrain

C:Asset->CreateTerrain

D:Windows->CreateTerrain

80.以下哪種操作步驟可以在場(chǎng)景中添加“WindZone"?B

A:Terrain->WindZone

B:GameObject->CreateOther->WindZone

C:Component->Physics->WindZone

D:Assets->Create->WindZone

81.在Unity編輯器中創(chuàng)建一個(gè)DirectionalLight,以下步驟正確的是?B

A:Edit->RenderingSetting->DirectionalLight

B:GameObject->CreateOther->DirectionalLight

C:Component->Rendering->DirectionalLight

D:Assets->DirectionalLight

82.下列哪一項(xiàng)不屬于Camera中的“ClearFlags”?D

A:Skybox

B:SolidColor

C:DepthOnly

D:Background

83.以下哪種腳本語(yǔ)言是Unity編輯器所不支持的?

A:JavaScript

B:C#

C:Boo

D:Perl

84.對(duì)于Prefab,以下說(shuō)法錯(cuò)誤的是?D

A:Prefab資源可以在項(xiàng)目中多次重復(fù)使用

B:由Prefab實(shí)例出的GameObject,其在Hierarchy視圖中表現(xiàn)為藍(lán)色

C:Prefab上的組件信息一經(jīng)改變,其實(shí)例出的GameObject也會(huì)自動(dòng)改變

D:實(shí)例出的GameObject上的組件信息一經(jīng)改變,其對(duì)應(yīng)的Prefab也會(huì)自動(dòng)改變

85.下面哪種做法可以打開(kāi)Unity的AssetStore?A

A:Windows->AssetStore

B:Edit->AssetStore

C:File->AssetStore

D:Assets->AssetStore

86.在哪個(gè)面板中可以修改物體的空間屬性,如位置、朝向、大小等?B

A:Project

B:Inspector

C:Hierarchy

D:Toolbar

87.如何為一個(gè)Asset資源設(shè)定一個(gè)Label,從而能夠方便準(zhǔn)確的搜索到?D

A:在Project窗口中選中一個(gè)Asset,右鍵。Create?>Label

B:在Project窗口中選中一個(gè)Asset,右鍵->AddLabel

C:在Project窗口中選中一個(gè)Asset,在Inspector窗口中點(diǎn)擊添加Label的圖標(biāo)

D:在Project窗口中選中一個(gè)Asset,在Inspector窗口中點(diǎn)擊按鈕“AddLabel”

88.Mecanim系統(tǒng)中,BodyMask的作用是?D

A:指定身體的某一部分是否參與骨骼動(dòng)畫(huà)

B:指定身體的某一部分是否參與物理模擬

C:指定身體的某一部分是否可以輸出骨骼信息

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

89.以下哪種操作步驟可以打開(kāi)Unity編輯器的Lightmapping視圖?C

A:File->Lightmapping

B:Assets—>Lightmapping

C:Windows->Lightmapping

D:Component->Lightmapping

90.下列關(guān)于光照貼圖,說(shuō)法錯(cuò)誤的是?C

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

B:可以降低游戲內(nèi)存消耗

C:可以增加場(chǎng)景真實(shí)感

D:多個(gè)物體可以使用同一張光照貼圖

91.如何為物體添加光照貼圖所使用的UV?B

A:不用添加,任何時(shí)候都會(huì)自動(dòng)生成

B:更改物體導(dǎo)入設(shè)置,勾選“GenerateLightmapUVs”

C:更改物體導(dǎo)入設(shè)置,勾選“SwapUVs”

D:更改物體導(dǎo)入設(shè)置,在UVs選項(xiàng)中選擇“UseLightmaps”

92.在哪個(gè)模塊下可以修改RenderPath?A

A:Camera

B:Light

C:RenderSettings

D:ProjectSettings->Quality

93.以下哪項(xiàng)技術(shù)不是目前Unity所支持的OcclusionCulling技術(shù)?D

A:PVSonly

B:PVSanddynamicobjects

C:AutomaticPortalGeneration

D:DynamicOnly

94.關(guān)于Vector3的API,以下說(shuō)法正確的是?C

A:Vectors.normalize可以獲取一個(gè)三維向量的法線向量;

B:Vector3.magnitude可以獲取一個(gè)三維向量的長(zhǎng)度;

C:Vector3.forward與Vector3(0,0,1)是一樣的意思;

D:Vector3.Dot(向量A,向量B)是用來(lái)計(jì)算向量A與向量B的叉積

95.下列那些選項(xiàng)不是網(wǎng)格層屬性的固有選項(xiàng)?A

A:Default

B:Walkable

C:NotWalkable

D:Jump

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

A:一種用于描述相機(jī)軌跡的網(wǎng)格

B:一種被優(yōu)化過(guò)的物體網(wǎng)格

C:一種用于物理碰撞的網(wǎng)格

D:一種用于實(shí)現(xiàn)自動(dòng)尋路的網(wǎng)格

97.以下哪一個(gè)選項(xiàng)不屬于Unity引擎所支持的視頻格式文件D

A.后綴名為mov的文件

B.后綴名為mpg的文件

C.后綴名為avi的文件

D.后綴名為swf的文件

98.Unity引擎使用的是左手坐標(biāo)系還是右手坐標(biāo)系?A

A.左手坐標(biāo)系

B.右手坐標(biāo)系

C.可以通過(guò)ProjectSetting切換左右手坐標(biāo)系

D.可以通過(guò)Reference切換左右手坐標(biāo)系

99.以下哪組攝像機(jī)中NormalizedViewPortRect的數(shù)值設(shè)置可以使得攝像機(jī)

顯示的畫(huà)面位于1280*720分辨率的屏幕畫(huà)面的右上角D

A.x=640,Y=-360,W=360,H=360

B.x=640,Y=-360,W=360,H=360

C.x=0.5zY=0,W=0.5zH=0.5

C.x=0.5,Y=0.5,W=0.5,H=0.5

100,以下哪個(gè)組件是任何GameObject必備的組件B

A.MeshRenderer

B.Trtansform

C.GameObject

D.Maincamera

101.在Unity編輯器中,停止對(duì)Game視圖進(jìn)行預(yù)覽播放的快捷鍵操作是以

下哪一項(xiàng)A

A.CTRL/CMD+P

B.CTRL/CMD+Shift+P

C.CTRL/CMD+Alt+P

D.CTRL/CMD+S

102.在Unity引擎中,Depth屬性值最大的攝像機(jī)會(huì)比Depth屬性值小的攝

像機(jī)更晚繪制么?A

A.是

B.否

103.下列選項(xiàng)中有關(guān)Animator的說(shuō)法錯(cuò)誤的是D

A.Animasstor是Unity引擎內(nèi)置組件

B.任何一個(gè)具有動(dòng)畫(huà)狀態(tài)機(jī)功能的GameObject都需要一個(gè)Animator組件

C.它主要用于角色行為的設(shè)置,包括StateMachines,混合Blendtrees以及通過(guò)腳本控制的事件

□.Animator同Animation組件的用法是相同的

104.下列哪個(gè)視圖主要用于顯示和編輯所選游戲?qū)ο蠡蛸Y源的相關(guān)屬性C

A.Scene

B.Project

C.Inspector

D.Hierarchy

105.簡(jiǎn)述Prefab的使用?Editor下動(dòng)態(tài)創(chuàng)建Prefab的方式"u3d里動(dòng)態(tài)

創(chuàng)建對(duì)象,需要使用prefab而創(chuàng)建的時(shí)候MonoBehaviour.Instantiate

(GameObjectorignal)需要一個(gè)作為原型的對(duì)象。三種方式獲得prefab對(duì)

象。

方式一:使用腳本的public字段

直接在Project視圖里找到做好的prefab,將其拖拽到指定腳本的指定publicGameObject字段。

方式二:Resource類(lèi)

1>在Assets目錄下的任意位置創(chuàng)建一個(gè)名為resources的文件夾,將做好的prefab放到這個(gè)文件夾下,

path形式如下:Assets\....\resources\prefabName.prefab

2^在代碼里使用Resource.Load或LoadAII函數(shù),獲得原型對(duì)象。指定prefab時(shí)不需要指定擴(kuò)展名

(.prefab),形式如下:GameObjectprototype=Resource.Load(//prefabName,/)asGameObject;可以有任

意數(shù)量的resources文件夾,懷疑是Resource類(lèi)初始化的時(shí)候會(huì)搜集所有resources文件夾里的文件名。

方式三:加載到場(chǎng)景

一般我們制作Perfab的時(shí)候,都是在Hierarchy視圖里創(chuàng)建GameObject,然后再搭建Prefabo事后根據(jù)

需要?jiǎng)h除這個(gè)原始的GameObjecto因此我們可以保留這個(gè)GameObject,然后在場(chǎng)景加載后Find這個(gè)對(duì)

象(代碼方式),或者使用腳本public字段(編輯器方式)

106.NGUI的自適應(yīng)性是?如果此時(shí)屏幕比例變化,屏幕出現(xiàn)黑邊怎么辦?

(注:改變NGUI和UGUI的FixedsizewithScreen不可行)

NGUI根目錄的UlRoot組件自帶了根據(jù)高度自適應(yīng)分辨率的功能。

ScalingStyle屬性可選擇三種不同的縮放策略。

PixelPerfect完美像素:直接顯示設(shè)定好的像素。當(dāng)屏幕高度低于minimumHeight時(shí)按比例縮小,當(dāng)屏

幕高度大于maximumHeight時(shí)按比例擴(kuò)大。

FixedSize按比例縮放:在設(shè)定好的基礎(chǔ)上,直接按比例縮放。

FixedSizeOnMobiles合體版,android和ios為FixedSize方式,其它按照PixelPerfect方式。

三、Unity腳本基礎(chǔ)

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

(1)多線程程序同時(shí)運(yùn)行多個(gè)線程,而在任一指定時(shí)刻只有一個(gè)協(xié)程在運(yùn)行,并且這個(gè)正在運(yùn)行的協(xié)

同程序只在必要時(shí)才被掛起。

(2)除主線程之外的線程無(wú)法訪問(wèn)Unity3D的對(duì)象、組件、方法。

(3)Unity3d沒(méi)有多線程的概念,不過(guò)unity也給我們提供了Startcoroutine(協(xié)同程序)和

LoadLevelAsync(異步加載關(guān)卡)后臺(tái)加載場(chǎng)景的方法。

(4)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é)同處理加載的事宜

108.簡(jiǎn)述Unity3D支持的作為腳本的語(yǔ)言的名稱(chēng)

Unity的腳本語(yǔ)言基于Mono的.Net平臺(tái)上運(yùn)行,可以使用.NET庫(kù),這也為XML、數(shù)據(jù)庫(kù)、正則表達(dá)

式等問(wèn)題提供了很好的解決方案。

Un

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論