第一篇:unity3D學習知識點總結
1.unity簡介和安裝(x)
2.unity基礎操作
unity窗口界面介紹
1.Scene場景編輯窗口(Q、W、E、R、T/按住鼠標右鍵—旋轉視角、按住鼠標右鍵Q、E、W、S、A、D)
2.Game游戲運行窗口(運行按鈕,暫停按鈕,下一幀畫面)3.Hierarchy 場景物體列表窗口(三角符號表示物體間的父子關系)
4.Project 項目資源列表窗口(與文件夾對應,mete文件,移動盡量在unity中移動而不是在文件夾中移動,可能報錯)
5.Inspector 屬性編輯列表窗口(選中Hierarchy物體,出現物體相關屬性)6.Console 控制臺輸出窗口
7.其他常用窗口:Layers(層)2by3(顯示模式)
unity菜單界面介紹 1.file 文件菜單 2.edit 編輯菜單 3.Assets 資源菜單
4.Gameobject 物體資源菜單 5.Component 組件菜單 6.Window 窗口菜單 7.Help 幫助菜單
Scene與場景漫游
1.Scene窗口各項工具
Q、W、E、R 按住鼠標右鍵Q、W、E、R Pivot 物體自己的中心/center 所有物體加權之后的中心 Global 世界坐標/local 自身坐標 Textured Wite/render Paths顯示 2D/3D 2.快捷鍵與視角的移動
Hierarchy與場景搭建
1.Gameobject: 基本組件
gameobject—>create other 2.Gameobject: 燈光組件 3.Gameobject: 物體組件 4.Gameobject:其他組件 5.Hierarchy層級關系與應用 6.場景搭建案例
Project與資源管理 Inspector與游戲組件
3.C#語言基礎
C#的值類型 C#的引用類型 C#的類型轉換 C#的邏輯語句 C#的集合類型
C#的面向對象特性封裝、繼承、多態
Unity 協程:
和線程的區別:沒有異步同步的概念,每一幀都執行(有內容的情況);
協程的作用:1)延時(等待)一段時間執行代碼;2)等某個操作完成之后再執行后面的代碼??偨Y起來就是一句話:控制代碼在特定的時機執行。
4.Unity腳本開發基礎
腳本介紹
腳本生命周期和腳本變量 腳本的響應時間和組件訪問 Transform場景物體的變換 腳本開發中的基礎數學 腳本開發中的3D數學 腳本開發中的輸入和控制 常用的方法函數 GUI組件的應用
代碼調試與MonoDevelop的使用
在float類型(public)前面加上[Range(0,10)],這樣在檢視面板中可以拖拽調整變量
5.Unity界面系統
UGUI系統的介紹和創建Canvas畫布 Native2D系統的介紹與使用 Rect Transform 界面系統的布局 UI Event界面系統的事件機制 UI Element 界面系統的可視組件 Auto Layout 界面系統的自動布局
6.動畫系統
動畫系統的介紹 資源和模型導入
Animation view 動畫的編輯
Animator Transitions 動畫的設置與狀態的過渡 Animator Controller 動畫控制器的介紹 Animator Scripting 動畫控制鍵的腳本控制
7.Unity 圖形處理系統
Unity5.0 著色器系統介紹 Unity5.0 渲染系統介紹
8.粒子系統
Unity 粒子界面以及創建
粒子形狀模塊以及生命周期速度類模塊 Unity 粒子的顏色以及速度控制方法 Unity 粒子的旋轉、外部作用力與碰撞
9.UI(UGUI、NGUI)
10.全局光照和局部光照模型的不同:局部光照,主要考慮光源發出的光對物體的直接影響;全局光照除了處理光源發出的光,還考慮其他輔助光的影響,如光線穿過半透明或者透明物體,以及光線重一個物體表面反射到另一個物體表面等。
11.Unity 程序設計
1.恰當的使用單例
2.創建類盡量不要使用或者繼承MonoBehavior 3.界面之間傳遞消息,盡量使用委托來減少依賴 4.盡量控制程序的執行順序
12.Unity架構,目前沒有完美的架構,參考MVC等架構
13.設計模式,單例、觀察者等模式
第二篇:Unity3D重要知識點總結
www.tmdps.cn
Unity3D重要知識點總結
學習Untiy3d過程中,你需要知道數據結構和算法很重,要圖形學很重要,大的游戲公司看重個人基礎,綜合能力小公司就看你實際工作能力,看你的Demo做的如何。那么今天我們來看一下Unity3d學習中的重要知識點有哪些。
1.什么是渲染管道?
是指在顯示器上為了顯示出圖像而經過的一系列必要操作。渲染管道中的很多步驟,都要將幾何物體從一個坐標系中變換到另一個坐標系中去。
主要步驟有:
本地坐標->視圖坐標->背面裁剪->光照->裁剪->投影->視圖變換->光柵化。
2.如何優化內存?
www.tmdps.cn
有很多種方式,例如
1.壓縮自帶類庫;
2.將暫時不用的以后還需要使用的物體隱藏起來而不是直接Destroy掉;
3.釋放AssetBundle占用的資源;
4.降低模型的片面數,降低模型的骨骼數量,降低貼圖的大??;
5.使用光照貼圖,使用多層次細節(LOD),使用著色器(Shader),使用預設(Prefab)。
3.動態加載資源的方式?
1.Resources.Load();2.AssetBundle 1.通過Resources模塊,調用它的load函數:可以直接load并返回某個類型的Object,前提是要把這個資源放在Resource命名的文件夾下,Unity不關有沒有場景引用,都會將其全部打入到安裝包中。Resources.Load();2.通過bundle的形式:即將資源打成 asset bundle 放在服務器或本地磁盤,然后使用www.tmdps.cn
3.通過AssetDatabase.loadasset :這種方式只在editor范圍內有效,游戲運行時沒有這個函數,它通常是在開發中調試用的
【AssetDatabase 資源數據庫】
區別:Resources的方式需要把所有資源全部打入安裝包,這對游戲的分包發布(微端)和版本升級(patch)是不利的,所以unity推薦的方式是不用它,都用bundle的方式替代,把資源達成幾個小的bundle,用哪個就load哪個,這樣還能分包發布和patch,但是在開發過程中,不可能沒更新一個資源就打一次bundle,所以editor環境下可以使用AssetDatabase來模擬,這通常需要我們封裝一個dynamic resource的loader模塊,在不同的環境下做不同實現。動態資源的存放有時我需要存放一些自己的文件在磁盤上,例如我想把幾個bundle放在初始的安裝里,unity有一個streaming asset的概念,用于提供存儲接口的訪問。我們需要在編輯器建立一個StreamingAssets名字的文件夾,把需要我們放在客戶磁盤上的動態文件放在這個文件夾下面,這樣安裝后,這些文件會放在用戶磁盤的指定位置,這個位置可以通過Application.streamingAssetsPath來得到。
4.什么是協同程序?
在主線程運行時同時開啟另一段邏輯處理,來協助當前程序的執行。換句話說,開啟協程就是開啟一個線程??梢杂脕砜刂七\動、序列以及對象的行為。
5.你用過哪些插件?
www.tmdps.cn
一 界面制作 推薦:NGUI 二 2D游戲制作 推薦:2D Toolkit /工具包,工具箱
三 可視化編程 推薦:PlayMaker 四 插值插件 推薦:iTween,HOTween 五 路徑搜尋 推薦:Simple Path 六 美術及動畫制作 推薦:RageSpline,Smooth Moves 七 畫面增強 推薦:Bitmap2Material,Strumpy Shader Editor 八 攝像機管理 推薦:Security Camera 九 資源包 推薦:Nature Pack
十、造路插件EasyRoads3D 6.使用Unity3d實現2d游戲,有幾種方式?
1.使用本身的GUI;
www.tmdps.cn
2.把攝像機的Projection(投影)值調為Orthographic(正交投影),不考慮z軸;
3.使用2d插件,如:2DToolKit;
7.Unity3d中的碰撞器和觸發器的區別?
觸發器只是碰撞器身上的一個屬性,碰撞器是觸發器的載體。
碰撞器有碰撞的效果,IsTrigger=false,可以調用OnCollisionEnter/Stay/Exit函數;
觸發器沒有碰撞效果,IsTrigger=true,可以調用OnTriggerEnter/Stay/Exit函數。
a.如果不想讓碰撞檢測影響物體移動但是又想檢測到碰撞這時用到觸發器(Trigger)
b.觸發器用來檢測一個物件是否經過空間中的某個區域
8.物體發生碰撞的必要條件
兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體。
8.1 CharacterController和Rigidbody的區別?
CharacterController自帶膠囊碰撞器,里面包含有剛體的屬性;
www.tmdps.cn
Rigidbody就是剛體,使物體帶有剛體的特征。
[CharacterController:角色控制器]Rigidbody具有完全真實物理的特性,而CharacterController可以說是受限的Rigidbody,具有一定的物理效果但不是完全真實的
9.在物體發生碰撞的整個過程中,有幾個階段,分別列出對應的函數三個階段
1.OnCollisionEnter(進入碰撞)2.OnCollisionStay(逗留碰撞)3.OnCollisionExit(當退出碰撞)10.Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來
rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函數中。
11.什么叫做鏈條關節?
Hinge Joint,可以模擬兩個物體間用一根鏈條連接在一起的情況,能保持兩個物體在一個固定距離內部相互移動而不產生作用力,但是達到固定距離后就會產生拉力。
12.物體自身旋轉使用的函數?
www.tmdps.cn
Transform.Rotate()13.物體圍繞某點旋轉使用的函數?
Transform.RotateAround()14.Unity3d提供了一個用于保存和讀取數據的類(PlayerPrefs),請列出保存和讀取整形數據的函數
PlayerPrefs.SetInt()PlayerPrefs.GetInt()15.Unity3d提供了幾種光源類型,分別是哪幾種?
四種。
平行光:Directional Light 點光源:Point Light 聚光燈:Spot Light 區域光源:Area Light
www.tmdps.cn
16.Unity3d腳本從喚醒到銷毀有著一套比較完整的生命周期,請列出系統自帶的幾個重要的方法。
Awake—>Start—>Update—>FixedUpdate—>LateUpdate—>OnGUI—>Reset—>OnDisable—>OnDestroy 17.物理更新一般放在哪個系統函數里?
FixedUpdate,每固定幀繪制時執行一次,和Update不同的是FixedUpdate是渲染幀執行,如果你的渲染效率低下的時候FixedUpdate調用次數就會跟著下降。FixedUpdate比較適用于物理引擎的計算,因為是跟每幀渲染有關。Update就比較適合做控制。
18.移動攝像機的動作放在哪個系統函數中,為什么放在這個函數中?
LateUpdate,在每幀執行完畢調用,它是在所有Update結束后才調,比較適合用于命令腳本的執行。官網上例子是攝像機的跟隨,都是在所有Update操作完才跟進攝像機,不然就有可能出現攝像機已經推進了,但是視角里還未有角色的空幀出現。
19.當游戲中需要頻繁創建一個物體時,我們需要怎樣做能夠節省內存?
使用預制物體對象Prefab,然后復制創建。
20.在場景中放置多個Camera并同時處于活動狀態會發生什么?
www.tmdps.cn
游戲界面可以看到很多攝像機的混合。
21.請描述Prefab的作用,并描述如何在移動設備的環境下恰當的使用它?
Prefab在實例化的時候用到,主要用于經常會用到的物體,屬性方便修改。
22.請簡述Unity3d下如何安全的在不同工程間遷移asset數據,請列舉出三種方法?
1.可以把assets目錄和Library目錄一起遷移
2.導出包
3.用Unity帶的assets Server功能
23.請描述游戲動畫有哪幾種,以及其原理?
主要有關節動畫、骨骼動畫、單一網格模型動畫(關鍵幀動畫)。
a.關節動畫:把角色分成若干獨立部分,一個部分對應一個網格模型,部分的動畫連接成一 個整體的動畫,角色比較靈活,Quake2中使用這種動畫;
b.骨骼動畫,廣泛應用的動畫方式,集成了以上兩個方式的優點,骨骼按角色特點組成一定的層次結構,有關節相連,可做相對運動,皮膚作為單一網格蒙在骨骼之外,決定角色的外觀;
www.tmdps.cn
c.單一網格模型動畫由一個完整的網格模型構成,在動畫序列的關鍵幀里記錄各個頂點的原位置及其改變量,然后插值運算實現動畫效果,角色動畫較真實。
24.請描述為什么Unity3d中會發生在組件上出現數據丟失的情況
一般是組件上綁定的物體對象被刪除了
25.alpha blend工作原理
Alpha Blend 實現透明效果,不過只能針對某塊區域進行alpha操作,透明度可設。
26.寫出光照計算中的diffuse的計算公式
計算公式為: Idiffuse = Dintensity*Dcolor*N.L;(Dintensity表示漫反射強度,Dcolor 表示漫反射光顏色,N 為該點的法向量,L 為光源向量 其中N與L點乘,如果結果小于等于0,則漫反射為0。
27.Lod是什么,優缺點是什么?
www.tmdps.cn
LOD(Level of detail)多層次細節,是最常用的游戲優化技術。它按照模型的位置和重要程度決定物體渲染的資源分配,降低非重要物體的面數和細節度,從而獲得高效率的渲染運算。
28.兩種陰影判斷的方法、工作原理。
A.陰影由兩部分組成:本影與半影
a.本影:景物表面上那些沒有被光源直接照射的區域(全黑的輪廓分明的區域)
b.半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的區域(半明半暗區域)
求陰影區域的方法:做兩次消隱過程
一次對每個光源進行消隱,求出對于光源而言不可見的區域L;
一次對視點的位置進行消隱,求出對于視點而言可見的面S;
shadow area= L ∩ S B.陰影分為兩種:自身陰影和投射陰影
自身陰影:因物體自身的遮擋而使光線照射不到它上面的某些可見面
www.tmdps.cn
工作原理:利用背面剔除的方法求出,即假設視點在點光源的位置。
投射陰影:因不透明物體遮擋光線使得場景中位于該物體后面的物體或區域受不到光照照射而形成的陰影
工作原理:從光源處向物體的所有可見面投射光線,將這些面投影到場景中得到投影面,再將這些投影面與場景中的其他平面求交得出陰影多邊形,保存這些陰影多邊形信息,然后再按視點位置對場景進行相應處理得到所要求的視圖(利用空間換時間,每次只需依據視點位置進行一次陰影計算即可,省去了一次消隱過程)若是動態光源此方法就無效了。
29.Vertex Shader是什么,怎么計算?
頂點著色器
頂點著色器是一段執行在GPU上的程序,用來取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作頂點。
Vertex Shader對輸入頂點完成了從local space到homogeneous space(齊次空間)的變換過程,homogeneous space即projection space的下一個space。在這其間共有world transformation, view transformation和projection transformation及lighting幾個過程。
30.MipMap是什么,作用?
www.tmdps.cn
MipMapping:在三維計算機圖形的貼圖渲染中有常用的技術,為加快渲染進度和減少圖像鋸齒,貼圖被處理成由一系列被預先計算和優化過的圖片組成的文件,這樣的貼圖被稱為MipMap。
31.機試:二選一
1.用代碼實現第三角色控制器
2.實現吊機吊物體的功能
【吊機吊物體需要節點掛接和坐標系轉換】
32.反向旋轉動畫的方法是什么?
【反轉動畫,講動畫的速度調到-1,碰撞時,被碰撞物體與碰撞物體有collider組件,碰撞物體有剛體組件,或角色碰撞得包含角色組件 OR 改變animation.speed】
33.碰撞檢測需要物體具備什么屬性?
能檢測碰撞發生的方式有兩種,一種是利用碰撞器,另一種則是利用觸發器
【Physics.OverlapSphere相交球檢測碰撞,碰撞檢測需要包圍盒】
34.獲取、增加、刪除組件的命令分別是什么?
www.tmdps.cn
獲?。篏etComponent 增加:AddComponent 刪除:Destroy 35.Animation.CrossFade命令作用是:(C)A.動畫放大
B.動畫轉換
C.動畫的淡入為其他動畫
36.Application.loadLevel命令為:(A)A加載關卡
B.異步加載關卡
C.加載動作
37.調試記錄到控制臺的命令是什么?
Debug.Log();39.編輯器類存放路徑是什么?
工程目錄下的Assets/Editor文件夾下。
40.使用原生GUI創建一個可以拖動的窗口命令是什么?
www.tmdps.cn
GUI.DragWindow();41.localPosition與Position的使用區別?
localPosition:自身位置,相對于父級的變換的位置。、Position:在世界坐標transform的位置
42.寫一個計時器工具,從整點開始計時,格式為:00:00:00 43.寫出Animation的五個方法
AddClip 添加剪輯、Blend 混合、Play 播放、Stop 停止、Sample 采樣
44.怎么拿到一個對象上腳本的方法
GameObject.GetComponent<>();
www.tmdps.cn
45.請簡述向量的點乘,向量的叉乘以及向量歸一化的幾何意義?
點乘的幾何意義是:計算兩個向量之間的夾角,以及在某一方向上的投影;
叉乘的幾何意義是:創建垂直于平面,三角形,或者多邊形的向量;
46.Unity3D是否支持寫成多線程?如果支持的話要注意什么?
支持:如果同時你要處理很多事情或者與Unity的對象互動小可以用thread,否則使用coroutine.注意:C#中有lock這個關鍵字,以確保只有一個線程可以在特定時間內訪問特定的對象
47.Unity3D中的協程(Coroutine)和C#線程之間的區別是什么?
Unity3d沒有多線程的概念,不過unity也給我們提供了StartCoroutine(協同程序)和LoadLevelAsync(異步加載關卡)后臺加載場景的方法。StartCoroutine為什么叫協同程序呢,所謂協同,就是當你在StartCoroutine的函數體里處理一段代碼時,利用yield語句等待執行結果,這期間不影響主程序的繼續執行,可以協同工作。而LoadLevelAsync則允許你在后臺加載新資源和場景,所以再利用協同,你就可以前臺用loading條或動畫提示玩家游戲未卡死,同時后臺協同處理加載的事宜asynchronous[e??s??kr?n?s].synchronous同步
www.tmdps.cn
48.請簡述四元數的作用以及四元數相對于歐拉角的優點
A.四元數一般定義如下:q=w+xi+yj+zk其中 w,x,y,z是實數。同時,有: i*i=-1 j*j=-1 k*k=-1 B.四元數也可以表示為: q=[w,v] 有多種方式可表示旋轉,如 axis/angle、歐拉角(Euler angles)、矩陣(matrix)、四元組等。相對于其它方法,四元組有其本身的優點:
a.四元數不會有歐拉角存在的 gimbal lock 問題[萬向節死鎖] b.四元數由4個數組成,旋轉矩陣需要9個數
c.兩個四元數之間更容易插值
d.四元數、矩陣在多次運算后會積攢誤差,需要分別對其做規范化(normalize)和正交化(orthogonalize),對四元數規范化更容易 e.與旋轉矩陣類似,兩個四元組相乘可表示兩次旋轉
49.請簡述OnBecameVisible及OnBecameInvisible的發生時機,以及他們執行的意義?
當renderer(渲染器)在任何相機上都不可見時調用:OnBecameInvisible
www.tmdps.cn
當renderer(渲染器)在任何相機上可見時調用:OnBecameVisible 50.動畫層(Animation Layers)的作用是什么?
動畫層作為一個具有層級動畫編輯概念的工具,可以用來制作和處理任何類型的動畫
51.請說出4種面向對象的設計原則,并分別簡述它們的含義。
1)單一職責原則(The Single Responsiblity Principle,簡稱SRP):一個類,最好只做一件事,只有一個引起它的變化.2)開放-封閉原則(The Open-Close Principle,簡稱OCP):對于擴展是開放的,對于更改是封閉的
3)Liskov 替換原則(The Liskov Substitution Principle,簡稱LSP):子類必須能夠替換其基類
4)依賴倒置原則(The Dependency Inversion Pricinple,簡稱DIP):依賴于抽象
5)接口隔離原則(The Interface Segregation Principle,簡稱ISP):使用多個小的專門的接口,而不要使用一個大的總接口。
52.Material和Physic Material區別?
www.tmdps.cn
PhysicMaterial 物理材質:物理材質描述,如何處理物體碰撞(摩擦,彈性)。
Material材質(材質類)為了獲得一個對象使用的材質,可以使用 Renderer.materia屬性:
53.法線貼圖、CG動畫
A.法線貼圖:是在原物體的凹凸表面的每個點上均作法線,通過RGB顏色通道來標記法線的方向,你可以把它理解成與原凹凸表面平行的另一個不同的表面,但實際上它又只是一個光滑的平面。
B.CG動畫:原為Computer Graphics的英文縮寫。隨著以計算機為主要工具進行視覺設計和生產的一系列相關產業的形成,國際上習慣將利用計算機技術進行視覺設計和生產的領域通稱為CG。它既包括技術也包括藝術,幾乎囊括了當今電腦時代中所有的視覺藝術創作活動,如平面印刷品的設計、網頁設計、三維動畫、影視特效、多媒體技術、以計算機輔助設計為主的建筑設計及工業造型設計等。NGUI(NUGUI1、NGUI2)
54.如何銷毀一個UnityEngine.Object及其子類?
使用Destroy()方法;
55、請描述游戲動畫有哪幾種,以及其原理。
www.tmdps.cn
主要有關節動畫、單一網格模型動畫(關鍵幀動畫)、骨骼動畫。
a、關節動畫把角色分成若干獨立部分,一個部分對應一個網格模型,部分的動畫連接成一個整體的動畫,角色比較靈活Quake2([kwe?k]vi.發抖,顫抖;)中使用了這種動畫;b、單一網絡模型動畫由一個完整的網格模型構成,在動畫序列的關鍵幀里記錄各個頂點的原位置及其改變量,然后插值運算實現動畫效果,角色動畫較真實。
c、骨骼動畫,廣泛應用的動畫方式,集成了以上兩個方式的優點,骨骼按角色特點組成一定的層次結構,由關節相連,可做相對運動,皮膚作為單一網格蒙在骨骼之外,決定角色的外觀。皮膚網格每一個頂點都會受到骨骼的影響,從而實現完美的動畫
56、下面哪種做法可以打開Unity的Asset Store Windows-> Asset Store
57、Mecanim系統中,Body Mask的作用是?
指定身體的某一部分是否參與渲染
58、以下哪種操作步驟可以打開Unity編輯器的Lightmapping視圖?
Windows--> Lightmapping
www.tmdps.cn
59、關于光照貼圖
A:使用光照貼圖比使用實時光源渲染要快
B:可以降低游戲內存消耗
C、多個物體可以使用同一張光照貼圖
60、關于Vector3的API,以下說法正確的是?
Vector3.forward與Vector3(0,0,1)是一樣的意思;
61、什么是導航網格(NavMesh)?
一種用于實現自動尋路的網格
62、什么是局部坐標,什么是世界坐標?
世界坐標是不會變的,一直以世界坐標軸的XYZ為標準。局部坐標其實就是自身的坐標,會隨著物體的旋轉而變化的。
63、itween插件的作用是什么,itween作用于世界坐標還是局部坐標,請列舉出3個其常用方法?
www.tmdps.cn
iTween是一個動畫庫,作者創建它的目的就是最小的投入實現最大的產出。讓你做開發更輕松,用它可以輕松實現各種動畫,晃動,旋轉,移動,褪色,上色,控制音頻等等“
方法:
a、MoveTo 物體移動 ;
b、ColorTo:隨著時間改變對象的顏色組;
c、LookTo:隨時間旋轉物體讓其臉部朝向所提供的Vector3或Transform位置
64、請簡述NGUI中Panel和Anchor的作用
Anchor包含UIAnchor腳本。UIAnchor的功能是把對象錨定在屏幕的邊緣(左上,左中,左下,上,中,下,右上,右中,右下),或縮放物體使其匹配屏幕的尺寸Panel對象有UIPanel腳本,UIPanel是一個容器,它將包含所有UI小部件,并負責將所包含的部件組合優化、承載,以減少繪制命令的調用。
65、Unity攝像機有幾種工作方式,分別是什么?
perspective透視攝像機和orthographic正交攝像機
66、LayerMask.NameToLayer()這個方法有什么作用?
www.tmdps.cn
LayerMask的使用是按位操作的,LayerMask.NameToLayer(“Players”)返回該Layer的編號。
67、請描述MeshRender中material和shader的區別?
Shader(著色器)實際上就是一小段程序,它負責將輸入的Mesh(網格)以指定的方式和輸入的貼圖或者顏色等組合作用,然后輸出。繪圖單元可以依據這個輸出來將圖像繪制到屏幕上。輸入的貼圖或者顏色等,加上對應的Shader,以及對Shader的特定的參數設置,將這些內容(Shader及輸入參數)打包存儲在一起,得到的就是一個Material(材質)
Shader大體上可以分為兩類: 表面著色器(Surface Shader)、片段著色器(Fragment Shader)
68、什么是矢量圖
矢量圖:計算機中顯示的圖形一般可以分為兩大類——矢量圖和位圖。矢量圖使用直線和曲線來描述圖形,這些圖形的元素是一些點、線、矩形、多邊形、圓和弧線等等,它們都是通過數學公式計算獲得的。例如一幅花的矢量圖形實際上是由線段形成外框輪廓,由外框的顏色以及外框所封閉的顏色決定花顯示出的顏色。由于矢量圖形可通過公式計算獲得,所以
www.tmdps.cn
矢量圖形文件體積一般較小。矢量圖形最大的優點是無論放大、縮小或旋轉等不會失真;最大的缺點是難以表現色。
69.上機題:用鼠標實現在場景中拖動物體,用鼠標滾輪實現縮放(用一個Cube即可)。
70、以下哪個函數在游戲進入新場景后會被馬上調用?
MonoBehaviour.OnLevelWasLoaded 71、Unity3D方法執行的順序:
1、Awake(),2、Start()(激活時的初始化代碼)
3、Update()【FixUpdate、LateUpdate】、4、OnGUI(渲染模塊)
5、然后是卸載模塊(TearDown),這里主要有兩個方法OnDisable()與OnDestroy()這里只列出了70個重要的知識點,大家可以參照著去學習,同時也不能忽略其他沒有羅列出來的知識,最好就是在項目中不斷的鍛煉自己,讓自己在各方面的能力都不斷的提升。
第三篇:Unity3D學習總結
高考完了,上大學(或者大專)這幾乎是現在大多數孩子的選擇,我就是一個上了一個大專,雖然說是學制三年制,但是在第三年上了兩個月之后學校就不講課了,大家都紛紛走出校門開始找適合自己的工作,但是當我走出校門的時候,才發現我在大學期間幾乎是什么也沒學到,面試時一問三不知,找不到工作,此時才開始發現大學期間懶懶散散、早上起床起晚了不想去上課就不去了,和同學約好了出去玩也不去上課了,想在宿舍玩游戲就也不去上課了,不去上課,老師也不會多說什么,只會在他點名的時候叫到你的名字,如果你讓舍友幫你答到,你會發現什么事情也沒有,自此心里會愈發放松,課也是越曠越多,學習更是一點不懂,但是大學不學完全沒人管,導致畢業之后還不如上大學之前,上大學之前還會高中知識,上完大學之后連高中知識都不會了,于是不得不參加一個培訓班,但你選擇一個培訓班的時候你又會比較很多,怕培訓不出來、怕學不好、怕培訓了和沒培訓一個樣子...總之你有很多顧慮。
我經過思考之后加入了我Unity3D培訓班(狗刨學習網),因為我發現現在手機游戲迅速崛起,占據了國內很大的市場,因為手機人人都有,人們在坐公交,坐地鐵,坐火車等交通工具時都會玩手機,甚至有些人在走路時都會玩,我參加了Unity3D培訓班之后才發現,培訓班遠遠比學校好多了,在這里你不會老師會問你那里不會,然后再教給你,不像學校老師就是為了拿工資給你上課,你不去,記你一個曠課也不會對你說什么,在這里還有大家可以討論問題。
早上九點開始上課期間也有一些休息時間,可是幾乎沒有人亂走動,都是坐在自己的位置依舊學習,一直到晚上10點以后甚至到12點以后,大家都在拼命的學習,因為大家都知道了這是我們最后的機會,我們已經可以說是一只腳踏出了懸崖,如果我們還不能好好學習的話我們就會掉下懸崖,萬劫不復,所以大家都在拼命的學習,只為了將來出人頭地,不至于像大學那樣上完以后碌碌無為。
所以我現在的心情總結就為自己琢磨的一句話“活著干,死了算,聽天由命非好漢,拼命努力向前看。”當然我也想起了我們初中語文老師說的一句比較有文化的話“人生能有幾回搏,此時不搏何時搏?!?/p>
第四篇:Unity3d面試題總結
本人總結的一些Unity3d高頻面試題目,希望可以幫助到大家。限于個人水平有限,只附上一些參考答案。
======================================= 數據結構和算法很重要,圖形學也很重要!大的游戲公司很看重個人基礎、綜合能力; 小公司看你實際工作能力,看你的Demo。
高頻問答的問題: 一.什么是渲染管道?
是指在顯示器上為了顯示出圖像而經過的一系列必要操作。渲染管道中的很多步驟,都要將幾何物體從一個坐標系中變換到另一個坐標系中去。主要步驟有:
本地坐標->視圖坐標->背面裁剪->光照->裁剪->投影->視圖變換->光柵化。
二.如何優化內存? 有很多種方式,例如 1.壓縮自帶類庫;
2.將暫時不用的以后還需要使用的物體隱藏起來而不是直接Destroy掉;
3.釋放AssetBundle占用的資源; 4.降低模型的片面數,降低模型的骨骼數量,降低貼圖的大?。?5.使用光照貼圖,使用多層次細節(LOD),使用著色器(Shader),使用預設(Prefab)。
三、動態加載資源的方式?(有時候也問區別,具體請百度)1.Resources.Load();2.AssetBundle
四、什么是協同程序?
在主線程運行時同時開啟另一段邏輯處理,來協助當前程序的執行。換句話說,開啟協程就是開啟一個線程??梢杂脕砜刂七\動、序列以及對象的行為。
五、你用過哪些插件?
(最好多熟悉幾個插件,問的時候好回答)====== 1.使用Unity3d實現2d游戲,有幾種方式? 1.使用本身的GUI;
2.把攝像機的Projection(投影)值調為Orthographic(正交投影),不考慮z軸;
3.使用2d插件,如:2DToolKit;
2.Unity3d中的碰撞器和觸發器的區別?
碰撞器有碰撞的效果,IsTrigger=false,可以調用OnCollisionEnter/Stay/Exit函數;
觸發器沒有碰撞效果,IsTrigger=true,可以調用OnTriggerEnter/Stay/Exit函數。
3.物體發生碰撞的必要條件
兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體。
4.CharacterController和Rigidbody的區別?
CharacterController自帶膠囊碰撞器,里面包含有剛體的屬性; Rigidbody就是剛體,使物體帶有剛體的特征。
5.在物體發生碰撞的整個過程中,有幾個階段,分別列出對應的函數 三個階段
1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit
6.Unity3d的物理引擎中,有幾種施加力的方式,分別描述出來 rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函數中。7.什么叫做鏈條關節?
Hinge Joint,可以模擬兩個物體間用一根鏈條連接在一起的情況,能保持兩個物體在一個固定距離內部相互移動而不產生作用力,但是達到固定距離后就會產生拉力。
8.物體自身旋轉使用的函數? Transform.Rotate()
9.物體圍繞某點旋轉使用的函數? Transform.RotateAround()
10.Unity3d提供了一個用于保存和讀取數據的類(PlayerPrefs),請列出保存和讀取整形數據的函數 PlayerPrefs.SetInt()
11.Unity3d提供了幾種光源類型,分別是哪幾種? 四種。
平行光:Directional Light 聚光燈:Spot Light
12.Unity3d腳本從喚醒到銷毀有著一套比較完整的生命周期,請列出系統自帶的幾個重要的方法。
點光源:Point Light 區域光源:Area Light
PlayerPrefs.GetInt()Awake——>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>Reset——>OnDisable——>OnDestroy
13.物理更新一般放在哪個系統函數里?
FixedUpdate,每固定幀繪制時執行一次,和Update不同的是FixedUpdate是渲染幀執行,如果你的渲染效率低下的時候FixedUpdate調用次數就會跟著下降。FixedUpdate比較適用于物理引擎的計算,因為是跟每幀渲染有關。Update就比較適合做控制。
14.移動攝像機的動作放在哪個系統函數中,為什么放在這個函數中?
LateUpdate,在每幀執行完畢調用,它是在所有Update結束后才調,比較適合用于命令腳本的執行。官網上例子是攝像機的跟隨,都是在所有Update操作完才跟進攝像機,不然就有可能出現攝像機已經推進了,但是視角里還未有角色的空幀出現。
15.當游戲中需要頻繁創建一個物體時,我們需要怎樣做能夠節省內存?
使用預制物體對象Prefab,然后復制創建。
16.在場景中放置多個Camera并同時處于活動狀態會發生什么? 游戲界面可以看到很多攝像機的混合。
17.請描述Prefab的作用,并描述如何在移動設備的環境下恰當的使用它?
Prefab在實例化的時候用到,主要用于經常會用到的物體,屬性方便修改。
18.如何銷毀一個UnityEngine.Object及其子類? 使用Destroy()方法;
19.請簡述Unity3d下如何安全的在不同工程間遷移asset數據,請列舉出三種方法?
1.可以把assets目錄和Library目錄一起遷移 2.導出包
3.用Unity帶的assets Server功能
20.請描述游戲動畫有哪幾種,以及其原理?
主要有關節動畫、骨骼動畫、單一網格模型動畫(關鍵幀動畫)。關節動畫:把角色分成若干獨立部分,一個部分對應一個網格模型,部分的動畫連接成一個整體的動畫,角色比較靈活,Quake2中使用這種動畫;
骨骼動畫,廣泛應用的動畫方式,集成了以上兩個方式的優點,骨骼按角色特點組成一定的層次結構,有關節相連,可做相對運動,皮膚作為單一網格蒙在骨骼之外,決定角色的外觀;
單一網格模型動畫由一個完整的網格模型構成,在動畫序列的關鍵幀里記錄各個頂點的原位置及其改變量,然后插值運算實現動畫效果,角色動畫較真實。
21.請描述為什么Unity3d中會發生在組件上出現數據丟失的情況 一般是組件上綁定的物體對象被刪除了
22.alpha blend工作原理
Alpha Blend 實現透明效果,不過只能針對某塊區域進行alpha操作,透明度可設。
23.寫出光照計算中的diffuse的計算公式
diffuse = Kd x colorLight x max(N*L,0);Kd 漫反射系數、colorLight 光的顏色、N 單位法線向量、L 由點指向光源的單位向量、其中N與L點乘,如果結果小于等于0,則漫反射為0。
24.Lod是什么,優缺點是什么?
LOD(Level of detail)多層次細節,是最常用的游戲優化技術。它按照模型的位置和重要程度決定物體渲染的資源分配,降低非重要物體的面數和細節度,從而獲得高效率的渲染運算。
25.兩種陰影判斷的方法、工作原理。
26.Vertex Shader是什么,怎么計算? 頂點著色器
27.MipMap是什么,作用?
MipMapping:在三維計算機圖形的貼圖渲染中有常用的技術,為加快渲染進度和減少圖像鋸齒,貼圖被處理成由一系列被預先計算和優化過的圖片組成的文件,這樣的貼圖被稱為MipMap。
28.機試:二選一
1.用代碼實現第三角色控制器 2.實現吊機吊物體的功能
29.反向旋轉動畫的方法是什么?
30.碰撞檢測需要物體具備什么屬性?
31.獲取、增加、刪除組件的命令分別是什么? 獲?。篏etComponent 增加:AddComponent 刪除:Destroy
32.Animation.CrossFade命令作用是:(C)A.動畫放大 B.動畫轉換 C.動畫的淡入為其他動畫
33.Application.loadLevel命令為:(A)A.加載關卡 B.異步加載關卡 C.加載動作
34.調試記錄到控制臺的命令是什么? Debug.Log();
35.編輯器類存放路徑是什么?
工程目錄下的Assets/Editor文件夾下。
36.使用原生GUI創建一個可以拖動的窗口命令是什么? GUI.DragWindow();
37.localPosition與Position的使用區別?
localPosition:自身位置,相對于父級的變換的位置。Position:在世界坐標transform的位置
38.意義連線 Mathf.Round Mathf.Clamp Mathf.Lerp
插值 四舍五入 限制
39.寫一個計時器工具,從整點開始計時,格式為:00:00:00
40.寫出Animation的五個方法
41.怎么拿到一個對象上腳本的方法 GameObject.GetComponent<>();
42.上機題:用鼠標實現在場景中拖動物體,用鼠標滾輪實現縮放(用一個Cube即可)。
43.請簡述向量的點乘,向量的叉乘以及向量歸一化的幾何意義? 點乘的幾何意義是:計算兩個向量之間的夾角,以及在某一方向上的投影;
叉乘的幾何意義是:創建垂直于平面,三角形,或者多邊形的向量;
參
考
:http://blog.sina.com.cn/s/blog_9283b6f601017hfw.html
第五篇:Unity3D【飛機大戰項目總結】
Unity3D——飛機大戰項目總結
學飛機大戰好幾天了,今天就總結一下飛機大戰所學的知識,所遇到的困難,還有常出現在錯誤。
一:資源包的導入,場景的搭建步驟不在闡述在這包的導入和創建新文件夾在回顧一下Scences存放場景視圖,Scripts存放腳本,Resources存放資源包,資源包下有Textures存放圖片,Materials存放材質,Audios存放聲音,Madels存放模型。
二:腳本的建立
(1)玩家的飛機的前后左右的移動代碼如下:
float x = Input.GetAxis(“Horizontal”);//左右移動 float z = Input.GetAxis(“Vertical”);//前后移動 transform.Translate(-x,0,-z);(2)子彈的不停發射我們采用了鼠標事件用if判斷代碼如下:
if(Input.GetMouseButtonDown(0)||Input.GetKey(KeyCode.Space))//鼠標左鍵或空格發射子彈
(3)子彈的個數我們用克隆的方法代碼如下:
GameObject u=GameObject.Instantiate(yushe,transform.position,Quaternion.identity)as GameObject;//Instantiate有三個參數一個是所克隆的對象,第二個是所克隆的位置,第三個是位置。
(4)在克隆出子彈時,子彈是靜止不動的,我們在給它加個力,有于我這個腳本是掛在子彈預設體上的代碼如下:
u.rigidbody.AddForce(0,0,-8000);//有三個參數,一個是X軸的力,一個是Y軸的力,一個是Z軸的力。
(5)敵機的飛行就按傻瓜的來所代碼如下:
transform.Translate(new Vector3(0,0,-1));//有三個參數,一個是X軸的飛行,一個是Y軸的飛行,一個是Z軸的飛行。
(6)敵機的子彈發射也是傻瓜類型代碼如下: float rocketTime=1;//給敵機所發射的時間
rocketTime-= Time.deltaTime;//時間遞減 if(rocketTime<=0){//如果時間小于零為真 rocketTime=1;GameObject
aa=GameObject.Instantiate(EnPeoRo2,transform.position,Quaternion.identity)as GameObject;aa.rigidbody.AddForce(0,0,8000);//給敵機子彈加力
(7)子彈的銷毀,腳本添加給玩家子彈的預設體上代碼如下:
Destroy(this.gameObject,2);//倆個參數一個是銷毀目標,而是幾秒后所消失
(8)敵機子彈的消失,腳本添加給敵機腳本代碼如下:
Destroy(this.gameObject,2);(9)玩家子彈打到敵機時,敵機消失代碼如下 void OnTriggerEnter(Collider aa){//添加觸發器
if(aa.tag==“PlayRocket”){//如果玩家的子彈碰到標簽為PlayRocket則為真 //Debug.Log(collision.gameObject.name);
Destroy(this.gameObject);//銷毀目標
}else if(transform.transform.position.z>=227){//當敵機飛出電腦屏幕敵機自動 } } Destroy(this.gameObject);銷毀
(10)當敵機子彈打到玩家飛機時則玩家飛機生命減少,若干次銷毀代碼如下;void OnTriggerEnter(Collider aa){
}
if(aa.tag==“EnenmyRocket”){//打到一次
} i--;//生命建少一次 if(i==0){//當減為零時為真 Destroy(this.gameObject);}//銷毀目標
具體代碼如下:
玩家飛機代碼public class PlayerPlan : MonoBehaviour {
public GameObject yushe;int i=2;// Use this for initialization void Start(){ }
// Update is called once per frame void Update(){
float x = Input.GetAxis(“Horizontal”);float z = Input.GetAxis(“Vertical”);transform.Translate(-x,0,-z);if(Input.GetMouseButtonDown(0)||Input.GetKey(KeyCode.Space)){ GameObject
u=GameObject.Instantiate(yushe,transform.position,Quaternion.identity)as GameObject;
} void OnTriggerEnter(Collider aa){
}
if(aa.tag==“EnenmyRocket”){
} i--;if(i==0){ Destroy(this.gameObject);} } u.rigidbody.AddForce(0,0,-8000);}
玩家子彈代碼如下: using UnityEngine;using System.Collections;
public class PlayRicket : MonoBehaviour {
} 敵機子彈代碼: using UnityEngine;using System.Collections;
public class EnProRock2 : MonoBehaviour {
public GameObject EnPeoRo2;float rocketTime=1;// Use this for initialization void Start(){ }
// Update is called once per frame void Update(){
} //this.gameObject.rigidbody.AddForce(Vector3.back);Destroy(this.gameObject,2);// Use this for initialization void Start(){ }
// Update is called once per frame void Update(){
rocketTime-= Time.deltaTime;if(rocketTime<=0){ rocketTime=1;GameObject
aa=GameObject.Instantiate(EnPeoRo2,transform.position,Quaternion.identity)as GameObject;
} } aa.rigidbody.AddForce(0,0,8000);} 敵機代碼如下: using UnityEngine;using System.Collections;
public class EnenmyPeople2 : MonoBehaviour {
}
if(aa.tag==“PlayRocket”){
} } // Use this for initialization void Start(){ }
// Update is called once per frame void Update(){ } void OnTriggerEnter(Collider aa){ transform.Translate(new Vector3(0,0,-1));//Debug.Log(collision.gameObject.name);
Destroy(this.gameObject);}else if(transform.transform.position.z>=227){ Destroy(this.gameObject);//想了解更多到狗刨學習網