小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【新提醒】【unity常見面試題】

 姜家平的黃金屋 2015-07-28
 本帖最后由 小布丁~ 于 2015-6-30 08:24 編輯

1. 游戲?qū)ο?/div>
問題:游戲?qū)ο笙N方法的區(qū)別?(enabled/Destroy/active)
gameObject.renderer.enabled=fasle
是控制一個(gè)物體是否在屏幕上渲染或顯示  而物體實(shí)際還是存在的 只是想當(dāng)于隱身 而物體本身的碰撞體還依然存在的
GameObject.Destroy()
表示移除物體或物體上的組件 代表銷毀該物體  實(shí)際上該物體的內(nèi)存并沒有立即釋放 而是在你下下個(gè)場(chǎng)景中槽釋放內(nèi)存資源,就是你a場(chǎng)景中Destroy了 一般是在c場(chǎng)景中才真正釋放該物體的內(nèi)存資源(這是我的體會(huì) 不知道理解錯(cuò)誤沒)
gameObject.active=false
是否在場(chǎng)景中停用該物體   在你gameObject.active =false中 則你在場(chǎng)景中用find找不到該物體  
如果該物體有子物體 你要用SetActiveRecursively(false) 來(lái)控制是否在場(chǎng)景中停用該物體(遞歸的)
副作用:通過GameObject.Find方法查找不到

2. 協(xié)同程序(Coroutine)
協(xié)同程序,即在主程序運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來(lái)協(xié)同當(dāng)前程序的執(zhí)行。換句話說(shuō),開啟協(xié)同程序就是開啟一個(gè)線程。
原理:協(xié)同程序被開啟后作為一個(gè)線程在運(yùn)行,而MonoBehaviour也是一個(gè)線程,他們成為互不干擾的模塊,除非代碼中用調(diào)用,他們共同作用于同一個(gè)對(duì)象,只有當(dāng)對(duì)象不可見才能同時(shí)終止這兩個(gè)線程。
使用MonoBehaviour.StartCoroutine方法即可開啟一個(gè)協(xié)同程序。
使用StopCoroutine(string methodName)來(lái)終止一個(gè)協(xié)同程序,使用StopAllCoroutines()來(lái)終止所有可以終止的協(xié)同程序,但這兩個(gè)方法都只能終止該MonoBehaviour中的協(xié)同程序。
還有一種方法可以終止協(xié)同程序,即將協(xié)同程序所在GameObject的Active屬性設(shè)置為false,當(dāng)再次設(shè)置active為ture時(shí),協(xié)同程序并不會(huì)再開啟。
協(xié)同程序和多線程的區(qū)別?

3. 動(dòng)態(tài)加載資源的方式?(有時(shí)候也問區(qū)別,具體請(qǐng)百度)
Resources.Load();Resources.LoadAll()
AssetBundle

Resources.Load 資源必須放在Resources文件夾,只能加載本地文件。
AssetBundle和WWW一起使用,可以實(shí)現(xiàn)從服務(wù)器上下載資源,并動(dòng)態(tài)加載。

4. 使用unity3d實(shí)現(xiàn)2D游戲,有幾種方式?
1.使用本身的GUI;
2.把攝像機(jī)的Projection(投影)值調(diào)為Orthographic(正交投影),不考慮z軸;
3.使用2d插件,如:2DToolKit、Uni2D;
4.Unity 4.3版本新增的Native 2D(原生)

5. AssetBundle
AssetBundle的管理總共分為三部分:1、AssetBundle文件2、AssetBundle內(nèi)存鏡像3、AssetBundle 內(nèi)存對(duì)象實(shí)例
一張圖讀懂AssetBundle內(nèi)存管理機(jī)制
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3046.tmp.png

常見問題:
舉一個(gè)例子說(shuō)明AssetBundle如何進(jìn)行內(nèi)存釋放?
一個(gè)常見的錯(cuò)誤:你從某個(gè)AssetBundle里L(fēng)oad了一個(gè)prefab并克隆之:obj=Instantiate(AssetBundle1.Load('MyPrefab”);
這個(gè)prefab比如是個(gè)npc。
然后你不需要他的時(shí)候你用了:Destroy(obj);你以為就釋放干凈了。其實(shí)這時(shí)候只是釋放了Clone對(duì)象,通過Load加載的所有引用、非引用Assets對(duì)象全都靜靜靜的躺在內(nèi)存里。
這種情況應(yīng)該在Destroy以后用:AssetBundle1.Unload(true),徹底釋放干凈。
如果這個(gè)AssetBundle1是要反復(fù)讀取的 不方便Unload,那可以在Destroy以后用:Resources.UnloadUnusedAssets()把所有和這個(gè)npc有關(guān)的Asset都銷毀。
當(dāng)然如果這個(gè)NPC也是要頻繁創(chuàng)建銷毀的那就應(yīng)該讓那些Assets呆在內(nèi)存里以加速游戲體驗(yàn)。
由此可以解釋另一個(gè)之前有人提過的話題:為什么第一次Instantiate一個(gè)Prefab的時(shí)候都會(huì)卡一下,因?yàn)樵谀愕谝淮蜪nstantiate之前,相應(yīng)的Asset對(duì)象還沒有被創(chuàng)建,要加載系統(tǒng)內(nèi)置的AssetBundle并創(chuàng)建Assets,第一次以后你雖然Destroy了,但Prefab的Assets對(duì)象都還在內(nèi)存里,所以就很快了。

問題:unity3d中如何實(shí)現(xiàn)動(dòng)態(tài)資源加載?
使用AssetBundle技術(shù),通過WWW類從服務(wù)器下載AssetBundle資源包,將需要的資源加載到項(xiàng)目中。AssetBundle資源包帶有版本號(hào),用來(lái)判斷是否需要更新。

問題:AssetBunlde的優(yōu)點(diǎn)?
可以動(dòng)態(tài)加載資源
可以將資源放在服務(wù)器上,方便版本更新。
AssetBundle資源的加載和是否可以手動(dòng)控制,方便資源管理。

6. 組件(組件思想)
是什么?
Unity3D面向?qū)ο缶幊套畲蟮捏w現(xiàn)就是組件化,任何一個(gè)游戲?qū)ο蠖际峭ㄟ^附加不同的組件實(shí)現(xiàn)。每一個(gè)游戲?qū)ο蠖季哂幸粋€(gè)Transform組件。
問題:獲取、增加、刪除組件的命令分別是什么?
獲?。篏etComponent增加:AddComponent刪除:Destroy

7. 物理引擎
物理引擎就是在游戲中模擬真實(shí)的物理效果。Unity內(nèi)置了NVIDIA的Physx物理引擎,Physx是目前使用最為廣泛的物理引擎,被很多游戲大作所采用,開發(fā)者可以通過物理引擎高效、逼真地模擬剛體碰撞、車輛駕駛、布料、重力等物理效果,使游戲畫面更加真實(shí)而生動(dòng)。
物理引擎主要包含三個(gè)核心內(nèi)容:
1. Collider是最基本的觸發(fā)物理的條件,例如碰撞檢測(cè)?;旧?,沒有Collider物理系統(tǒng)基本沒有意義(除了重力);
2. Rigidbody是物體的基本物理屬性設(shè)置,當(dāng)檢測(cè)碰撞完之后,就要計(jì)算物理效果,而Rigidbody提供計(jì)算基本參數(shù)。
3. PhysicMaterial則是附加的基本物理參數(shù),是一個(gè)物理材質(zhì),UNITY3D有自帶默認(rèn)的物理材質(zhì)的系數(shù)(在Edit/Project Settings/Physic下設(shè)置),它參與碰撞的計(jì)算例如反彈效果摩擦效果等。
常見問題:
對(duì)Rigidbody施加力的常用方式?
AddForce 添加普通力;AddExplosionForce 添加爆炸力;AddForceAtPosition 添加位置力。
兩個(gè)Collider產(chǎn)生碰撞的必要條件?
至少要有一個(gè)物體具有Rigibody剛體才會(huì)觸發(fā)OnColliderEnter函數(shù)。
有碰撞器Collider
碰撞器和觸發(fā)器的區(qū)別?
最大的區(qū)別是碰撞器有碰撞效果觸發(fā)器沒有;觸發(fā)器是一個(gè)特殊的碰撞器。
Collider有幾種?(三種)
1、Static Collider(靜態(tài)碰撞器):帶有Collider沒有添加Rigidbody的對(duì)象,用于靜止物體如地理環(huán)境;
2、Rigidbody collider:帶有rigidbody的collider對(duì)象,能夠根據(jù)物理引擎很好的響應(yīng)外力和碰撞作用。
3、Kinematic rigidbody collider:帶有rigidbody的collider對(duì)象,開啟Is kinematic。
當(dāng)物體進(jìn)來(lái)OnTriggerEnter觸發(fā),出去時(shí)OnTriggerExit觸發(fā)。那么物體在進(jìn)來(lái)后Destory后會(huì)如何?
經(jīng)過測(cè)試是:不會(huì)調(diào)用OnTriggerExit。
PhysicMaterial有哪些主要屬性?
dynamicFriction:移動(dòng)摩擦力,值在0到1之間。
staticFriction:靜止摩擦力,值在0到1之間。
Bounciness:彈力,0值沒有彈力,1-沒有能量損失的反彈。
Character Controller(角色控制器)的特性
角色本身不受Physics影響,需要接受外力作用時(shí),使用OnCharacterColliderHit();
使用角色控制器如何防止角色經(jīng)常卡住?
Skin Width:設(shè)置為radius的10%;
Step offset:對(duì)于2meter(米)高的Character設(shè)為0.1到0.4;
Min move distance設(shè)為0即可。
Rigidbody常用屬性?
打開Is Kinematic后物體不受物理引擎影響,只受Transform控制;
Freeze Position凍結(jié)位置軸向,F(xiàn)reeze Rotation凍結(jié)方向軸向,凍結(jié)之后的軸向只受Transform控制;
使用Physics時(shí)不要使用Transform
CharacterController和Rigidbody的區(qū)別?
CharacterController自帶膠囊碰撞器,里面包含有剛體的屬性;
Rigidbody就是剛體,使物體帶有剛體的特征。
什么是Trigger?
Collider勾選Is Trigger屬性,碰撞器變成觸發(fā)器;
在物體發(fā)生碰撞的整個(gè)過程中,有幾個(gè)階段,分別列出對(duì)應(yīng)的函數(shù)?
OnCollisionEnter(進(jìn)入)、OnCollisionStay(保持)、OnCollisionExit(退出)
什么叫做鏈條關(guān)節(jié)?
Hinge Joint,可以模擬兩個(gè)物體間用一根鏈條連接在一起的情況,能保持兩個(gè)物體在一個(gè)固定距離內(nèi)部相互移動(dòng)而不產(chǎn)生作用力,但是達(dá)到固定距離后就會(huì)產(chǎn)生拉力。

8. 導(dǎo)航網(wǎng)格
參看PDF

9. 解釋下A*尋路?
(AI是實(shí)時(shí)計(jì)算的,導(dǎo)航網(wǎng)格是自動(dòng)計(jì)算的。AI可以自己研究算法,比導(dǎo)航網(wǎng)格更方便,導(dǎo)航網(wǎng)格被封裝了。)
首先,A*算法的提出是為了解決游戲中從A點(diǎn)到目標(biāo)B點(diǎn)繞過障礙物 尋找最短路徑的問題。
其次,A*算法核心為:?jiǎn)l(fā)式搜索、估值函數(shù)、選取最小估值
最后,A*算法有優(yōu)點(diǎn)也有缺點(diǎn),它理論上將是時(shí)間最優(yōu)的,但空間增長(zhǎng)是指數(shù)級(jí)別的

10. 光照貼圖(Lightmapping)
Lightmapping是一種增強(qiáng)靜態(tài)場(chǎng)景光照效果的技術(shù),較少的性能消耗使靜態(tài)場(chǎng)景看上去更真實(shí)、豐富以及更具有立體感。
Unity使用Autodesk的Beast插件。
使用光照貼圖的優(yōu)點(diǎn):
A:使用光照貼圖比使用實(shí)時(shí)光源渲染要快 B:可以降低游戲內(nèi)存消耗 C、多個(gè)物體可以使用同一張光照貼圖
11. 后期屏幕渲染
參看PDF

12. 遮擋剔除
參看PDF

13. 插件
最喜歡的就是U3D中的插件系統(tǒng),Unity3D中的插件極大得提高了開發(fā)效率。
問題:常用的插件有哪些?
NGUI、2D Toolkit、iTween、PlayMaker、特效插件FxMaker、NGJMinMap(小地圖)等(最好多熟悉幾個(gè)插件,問的時(shí)候好回答)
一 界面制作 推薦:NGUI
二 2D游戲制作 推薦:2D Toolkit   //[?tu:lk?t] 工具包,工具箱
三 可視化編程 推薦:PlayMaker
四 插值插件 推薦:iTween,HOTween
五 路徑搜尋 推薦:Simple Path

14. iTween插件
是什么?iTween是一個(gè)動(dòng)畫庫(kù)。
原理?iTween的核心是數(shù)值插值,簡(jiǎn)單說(shuō)就是給iTween兩個(gè)數(shù)值(開始值,結(jié)束值),它會(huì)自動(dòng)生成一些中間值。
應(yīng)用場(chǎng)景?對(duì)象移動(dòng)、振屏效果

15. 協(xié)同程序Coroutine
協(xié)同程序,即在主程序運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來(lái)協(xié)同當(dāng)前程序的執(zhí)行。換句話說(shuō),開啟協(xié)同程序就是開啟一個(gè)線程。
問題:協(xié)同程序有幾種開啟方式?
有兩種。在Unity3D中,使用StartCoroutine(string methodName)和StartCoroutine(IEnumerator routine)都可以開啟一個(gè)線程。區(qū)別在于使用字符串作為參數(shù)可以開啟線程并在線程結(jié)束前終止線程,相反使用IEnumerator 作為參數(shù)只能等待線程的結(jié)束而不能隨時(shí)終止(除非使用StopAllCoroutines()方法);另外使用字符串作為參數(shù)時(shí),開啟線程時(shí)最多只能傳遞一個(gè)參數(shù),并且性能消耗會(huì)更大一點(diǎn),而使用IEnumerator 作為參數(shù)則沒有這個(gè)限制。
問題:如何終止協(xié)同程序?
使用StopCoroutine(string methodName)來(lái)終止一個(gè)協(xié)同程序,使用StopAllCoroutines()來(lái)終止所有可以終止的協(xié)同程序,但這兩個(gè)方法都只能終止該MonoBehaviour中的協(xié)同程序。
還有一種方法可以終止協(xié)同程序,即將協(xié)同程序所在gameobject的active屬性設(shè)置為false。
問題:協(xié)同程序和線程之間的區(qū)別?
協(xié)程和線程差不多,線程的調(diào)度是由操作系統(tǒng)完成的,協(xié)程把這項(xiàng)任務(wù)交給了程序員自己實(shí)現(xiàn),當(dāng)然也就可以提高靈活性,另外協(xié)程的開銷比線程要小,在程序里可以開更多的協(xié)程。
線程與協(xié)同程序的主要區(qū)別在于,一個(gè)具有多線程的程序可以同時(shí)運(yùn)行幾個(gè)線程,而協(xié)同程序卻需要彼此協(xié)作地運(yùn)行。就是說(shuō),一個(gè)具有多個(gè)協(xié)同程序的程序在任何時(shí)刻只能運(yùn)行一個(gè)協(xié)同程序,并且正在運(yùn)行的協(xié)同程序只會(huì)在其顯示地掛起時(shí),它的執(zhí)行才會(huì)暫停。

16. 動(dòng)畫系統(tǒng)
U3D中支持模型動(dòng)畫和骨骼動(dòng)畫,模型動(dòng)畫是模型中自包含的幀動(dòng)畫,使用Animation組件控制;骨骼動(dòng)畫使用Animator組件控制,也就是Mecanim系統(tǒng),通過狀態(tài)機(jī)和混合樹控制動(dòng)畫的狀態(tài)轉(zhuǎn)換。骨骼動(dòng)畫應(yīng)用最廣泛。
問題:寫出Animation的五個(gè)方法?
AddClip 添加剪輯、Blend 混合、Play 播放、Stop 停止、Sample 采樣

17. 如何實(shí)現(xiàn)游戲的暫停、加速和減速?
Time.timeScale = 0;即可讓游戲暫停。
Time.timeScale=1時(shí),Update、LateUpdate、FixedUpdate 都按正常的時(shí)間來(lái)執(zhí)行。
Time.timeScale=2時(shí),Update和 LateUpdate的執(zhí)行速度是之前的2倍,而FixedUpdate還是按正常時(shí)間來(lái)執(zhí)行。

18. 如何在Unity3D中使用單例模式?
先聲明一個(gè)靜態(tài)私有變量,如:instance;再聲明一個(gè)靜態(tài)公共方法,如:GetInstance,在該方法中判斷instance為null時(shí),通過GameObject.FindObjectOfType(typeof(MyClass))創(chuàng)建instance的實(shí)例(在C#中直接new一個(gè)新的實(shí)例),不為null則直接返回。
參考代碼:
public class MyClass  
{  
     private static MyClass instance;  
     public static MyClass GetInstance()  
     {  
         if (!instance)  
         {  
             instance = GameObject.FindObjectOfType(typeof(MyClass));
         }  
         return instance;  
     }  
}

19. 什么是游戲AI
游戲AI是游戲中的人工智能,AI中最常用到的是隨機(jī)數(shù)Random和狀態(tài)控制。
如怪物AI:巡邏(隨機(jī)目標(biāo)點(diǎn))->發(fā)現(xiàn)->追趕->攻擊->返回->繼續(xù)巡邏
在實(shí)際項(xiàng)目中,AI腳本的參數(shù)往往設(shè)置成Public,供策劃人員修改。如:攻擊速度、技能類型、移動(dòng)速度、命中率、攻擊百分比
形成一個(gè)閉環(huán),保證任何時(shí)候Ai可用
要能夠畫出邏輯圖

20. Unity3D中腳本的編譯順序
腳本的編譯過程分四步:
1. 編譯所有 ”Standard Assets”, “Pro Standard Assets” or “Plugins” 目錄下的代碼
2. 編譯所有“Standard Assets/Editor”, “Pro Standard Assets/Editor” or “Plugins/Editor” 目錄下的代碼
3. 編譯除了上面列出來(lái)的目錄和Editor目錄之外的所有代碼
4. 編譯Editor目錄下的代碼
問題:如何在C#腳本中調(diào)用JS腳本中的方法?
如果你希望某個(gè)Javascript能被其他腳本引用,那么把它放到第一組的某個(gè)目錄里,然后把要使用它的代碼放在第三組的某個(gè)目錄里就好了。
同樣,如果希望某個(gè)C#代碼能被其他Javascript腳本引用,也必須把這個(gè)C#腳本放到第一組的某個(gè)目錄里,Javascript代碼放到第三組的某個(gè)目錄里。
編輯器類存放路徑是什么?
工程目錄下的Assets/Editor文件夾下。

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

22. unity3d從喚醒到銷毀有一段生命周期,請(qǐng)列出系統(tǒng)自己調(diào)用的幾個(gè)重要方法。
Awake >OnEnable > Start > Update –> FixedUpdate > LateUpdate –> OnGUI > Reset > OnDisable –> OnDestroy

23. 有兩個(gè)相同的方法,放在兩個(gè)腳本的Awake里,將這兩個(gè)腳本放在同一個(gè)游戲?qū)ο笊希葓?zhí)行那個(gè)?(李老師原創(chuàng))
跟腳本的添加順序有關(guān),后添加的先執(zhí)行。由此可以推斷游戲?qū)ο筇砑拥慕M件以“?!钡臄?shù)據(jù)結(jié)構(gòu)保存,后進(jìn)先出。

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

25. 移動(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)。

26. 當(dāng)游戲中需要頻繁創(chuàng)建一個(gè)物體對(duì)象時(shí),我們需要怎么做來(lái)節(jié)省內(nèi)存。
對(duì)象池,做一個(gè)pool,游戲開始時(shí)預(yù)先實(shí)例化足夠的數(shù)量,然后用的時(shí)候取不用的時(shí)候收回
27. 一個(gè)場(chǎng)景放置多個(gè)camera并同時(shí)處于活動(dòng)狀態(tài),會(huì)發(fā)生什么
實(shí)際看到的畫面由多個(gè)camera的畫面組成,由depth、Clear Flag、Culling Mask都會(huì)影響最終合成效果。
28. 簡(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ì)的交流。
29. 如何銷毀一個(gè)UnityEngine.Object以及其子類
Destroy
30. 為什么u3d會(huì)出現(xiàn)組件上數(shù)據(jù)丟失的情況
一般是組件上綁定的物體對(duì)象被刪除了
31. u3d下如何安全的在不同工程遷移asset數(shù)據(jù)
方法1,可以把assets目錄和ProjectSetting目錄一起遷移,
方法2,導(dǎo)出包
方法3,用unity帶的assets server功能

32. 請(qǐng)描述游戲動(dòng)畫有哪幾種,以及其原理。
主要有關(guān)節(jié)動(dòng)畫、單一網(wǎng)格模型動(dòng)畫(關(guān)鍵幀動(dòng)畫)、骨骼動(dòng)畫。
關(guān)節(jié)動(dòng)畫把角色分成若干獨(dú)立部分,一個(gè)部分對(duì)應(yīng)一個(gè)網(wǎng)格模型,部分的動(dòng)畫連接成一個(gè)整體的動(dòng)畫,角色比較靈活Quake2中使用了這種動(dòng)畫。
單一網(wǎng)絡(luò)模型動(dòng)畫由一個(gè)完整的網(wǎng)格模型構(gòu)成,在動(dòng)畫序列的關(guān)鍵幀里記錄各個(gè)頂點(diǎn)的原位置及其改變量,然后插值運(yùn)算實(shí)現(xiàn)動(dòng)畫效果,角色動(dòng)畫較真實(shí)。
骨骼動(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)畫。(骨骼動(dòng)畫是由關(guān)節(jié)動(dòng)畫發(fā)展而來(lái)的,如今基本都使用骨骼動(dòng)畫來(lái)實(shí)現(xiàn)角色動(dòng)畫)
問題:寫出Animation的五個(gè)方法

33. 如何優(yōu)化內(nèi)存?
有很多種方式,例如
1.壓縮自帶類庫(kù);
2.將暫時(shí)不用的以后還需要使用的物體隱藏起來(lái)而不是直接Destroy掉;
3.釋放AssetBundle占用的資源;
4.降低模型的片面數(shù),降低模型的骨骼數(shù)量,降低貼圖的大??;
5.使用光照貼圖,使用多層次細(xì)節(jié)(LOD),使用著色器(Shader),使用預(yù)設(shè)(Prefab)。

34. 圖像學(xué)底層原理(李老師原創(chuàng))
1.GPU計(jì)算:頂點(diǎn)、線、三角、像素顏色(貼圖)
2.(攝像機(jī)進(jìn)行)可視化檢測(cè)
3.調(diào)用顯卡的底層渲染API(OpenGL、DX11)
-DrawPoint/DrawLine/DrawColor

35. NGUI核心原理?(原創(chuàng))
UIGeomety(幾何圖形計(jì)算)->UIWebgit(部件)->UIPanel(容器分組)->UICamera(可視化檢測(cè))->UIDrawCall(渲染)

36. 坐標(biāo)系
Unity3D采用左手坐標(biāo)系
坐標(biāo)系有:世界坐標(biāo)系、屏幕坐標(biāo)系、GUI坐標(biāo)系
問題:localPositionPosition的使用區(qū)別?
localPosition:自身位置,相對(duì)于父級(jí)的變換的位置。
Position:在世界坐標(biāo)transform的位置
37. 腳本
問題:怎么拿到一個(gè)對(duì)象上腳本的方法
GameObject.GetComponent<>();

38. 簡(jiǎn)述一下對(duì)象池,你覺得在FPS游戲里哪些東西適合使用對(duì)象池?
對(duì)象池就存放需要被反復(fù)調(diào)用資源的一個(gè)空間,比如游戲中要常被大量復(fù)制的對(duì)象,子彈,敵人,以及任何重復(fù)出現(xiàn)的對(duì)象。
39. 對(duì)象池的原理?(原創(chuàng))
作用:復(fù)用,提高對(duì)象使用效率,避免頻繁的銷毀、創(chuàng)建操作。
過程:
預(yù)熱-在使用之前批量創(chuàng)建對(duì)象
使用-從對(duì)象列表中獲取
回收-隱藏
擴(kuò)容-自動(dòng)批量創(chuàng)建(使用對(duì)象達(dá)到總?cè)萘?0%)

40. 角色換裝怎么做?思路
1.模型貼圖(類似人體彩繪)
2.Mesh Reander(換網(wǎng)格)
3.紙娃娃系統(tǒng)

41. 技能釋放怎么做?
一般游戲中的技能都是粒子特效,結(jié)合輸入控制粒子特效的播放。

42. 有限狀態(tài)機(jī)
每個(gè)對(duì)象都維護(hù)自己的狀態(tài)機(jī),狀態(tài)機(jī)的狀態(tài)改變,靠狀態(tài)觸發(fā)器。每一個(gè)狀態(tài)觸發(fā)器都包含三個(gè)固定函數(shù):Enter(進(jìn)入)、Excute(執(zhí)行)、Exit(退出)
請(qǐng)給我設(shè)計(jì)一個(gè)狀態(tài)機(jī),完成一個(gè)簡(jiǎn)單的xxxx情景。
答:狀態(tài)機(jī)并不是單純的switch結(jié)構(gòu),如果你是新手,你說(shuō)switch我可以容忍,如果你干了好些年2Dx,然后想自廢武功搞U3d了,再說(shuō)switch就直接pass了。
FSM
FSMSystem 負(fù)責(zé)狀態(tài)的切換
FSMState 表示各個(gè)狀態(tài)基類,執(zhí)行Excute、進(jìn)入、退出、切換條件ChangeCheck
-Update
可以怪物AI來(lái)使用FSM

對(duì)比(偽代碼)
Update()
If(state1)
{
   If(state is 2)
{
   //go to state2
}
Excute();
}
If(state2)
{
}

43. Unity 連接數(shù)據(jù)庫(kù)
本地?cái)?shù)據(jù)最常用的是SQLite,需要得到Mono.Data.Sqlite.dll 文件與System.Data.dll文件。

44. 本地?cái)?shù)據(jù)存儲(chǔ)方式?(原創(chuàng))
文本:xmljson、excel(cvs)
數(shù)據(jù)庫(kù):SQLite
PlayerPrefes

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

46. LayerMask.NameToLayer()這個(gè)方法有什么作用?
LayerMask的使用是按位操作的,LayerMask.NameToLayer("Players") 返回該Layer的編號(hào)。
在射線、攝像機(jī)遮罩剔除(Culling Mask)使用

47. itween插件的作用是什么,itween作用于世界坐標(biāo)還是局部坐標(biāo),請(qǐng)列舉出3個(gè)其常用方法?
iTween是一個(gè)動(dòng)畫庫(kù),作者創(chuàng)建它的目的就是最小的投入實(shí)現(xiàn)最大的產(chǎn)出。讓你做開發(fā)更輕松,用它可以輕松實(shí)現(xiàn)各種動(dòng)畫,晃動(dòng),旋轉(zhuǎn),移動(dòng),褪色,上色,控制音頻等等
方法:aMoveTo  物體移動(dòng) ;bColorTo:隨著時(shí)間改變對(duì)象的顏色組; cLookTo:隨時(shí)間旋轉(zhuǎn)物體讓其臉部朝向所提供的Vector3Transform位置。

48. 什么是局部坐標(biāo),什么是世界坐標(biāo)?
世界坐標(biāo)是不會(huì)變的,一直以世界坐標(biāo)軸的XYZ為標(biāo)準(zhǔn)。
局部坐標(biāo)其實(shí)就是自身的坐標(biāo),會(huì)隨著物體的旋轉(zhuǎn)而變化的。
49. 以下哪個(gè)函數(shù)在游戲進(jìn)入新場(chǎng)景后會(huì)被馬上調(diào)用?
  MonoBehaviour.OnLevelWasLoaded
50. Mecanim系統(tǒng)中,Body Mask的作用是?
  指定身體的某一部分是否參與渲染
51. Material和Physic Material區(qū)別?
PhysicMaterial 物理材質(zhì):物理材質(zhì)描述,如何處理物體碰撞(摩擦,彈性)。
Material材質(zhì)(材質(zhì)類)為了獲得一個(gè)對(duì)象使用的材質(zhì),可以使用 Renderer.materia屬性

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

53. 請(qǐng)簡(jiǎn)述OnBecameVisible及OnBecameInvisible的發(fā)生時(shí)機(jī),以及他們執(zhí)行的意義?
當(dāng)renderer(渲染器)在任何相機(jī)上都不可見時(shí)調(diào)用:OnBecameInvisible
當(dāng)renderer(渲染器)在任何相機(jī)上可見時(shí)調(diào)用:OnBecameVisible

54. 請(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í),有: i*i=-1    j*j=-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)向節(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)

55. 說(shuō)一下您在U3D游戲中用到的設(shè)計(jì)模式?
單例
MVC(NGUI的MVC架構(gòu):
1. 一個(gè)UI Panel(比如背包界面)打成一個(gè)預(yù)制件-View 封裝
2. 背包數(shù)據(jù)放在Model里面
3. 行為控制對(duì)應(yīng)一個(gè)Controler腳本

UI架構(gòu)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多