1.使用unity的MovieTexture播放視頻在物體上,對象只能在電腦上面試
2.移動端播放全屏視頻 Handheld.PlayFullScreenMovie(),視頻文件必須放置在StreamingAssets文件夾下編程
3.Unity的其餘特殊文件夾??json
4.Unity實例化物體(destObject,position,rotation,parent)和(destObject,position,rotation),前者會先讓預製物體實例化爲parent的子物體,而且使其scale值乘以父物體的scale值,再調整其位置,這樣得出的結果事宜相對座標,每每會發生預料以外。後一種爲直接實例化,沒有父子依賴關係,也不調整其scale值,能夠後面添加父子關係,這樣的結果更好。通常狀況下,最好將預製物體的座標設爲(0,0,0)。設計模式
5.使用 transform.parent.TransformPoint(transform.localPosition)來進行座標轉換,無論有幾層父子關係,都以其最高層來轉化。網絡
6.今天弄了一天仍是沒解決一個問題:
我要在下圖模型如圖選中的小圓球的position位置實例化一個餅狀的物體並設置該物體爲小球的子物體,小球爲該模型的骨骼的子物體,餅狀預製物體的座標爲(0,0,0),腳本是依附在小球上的
多線程
代碼以下
架構
實例化後的結構以下(此處我把視圖放到模型裏面能夠看到餅狀物體)
框架
爲何個人預製物體沒法實例化到小圓球的座標位置,求解求解求解,有人遇到過此問題求解,我快崩潰了tcp
利用一個capsule做爲小球的子物體來代替該小球就可讓物體實例化在capsule的位置,這說明模型自帶的子物體的位置真的不能做爲一個預製物體的位置參考,不然會出錯,最有效的方式是創建一個unity物體,而後調整位置,併爲該物體的子物體,讓unity物體代替該物體的定位功能。編輯器
7.上面主要出現的問題的緣由是,物體實例化子物體參考的是自身的pivot座標,center座標是以colider組件來定義的座標,物體的移動,轉向,世界座標,子物體實例化位置,都是以pivot來作參考的,pivot是物體網格渲染的真實座標。而且若是物體沒有父物體,那麼檢視面板顯示的是pivot世界座標,若是有父物體,那麼顯示的是相對座標,在腳本里相對座標能夠用localposition得到。
8.修改某些物體的pivot座標的方法,因爲pivot是在建模的時候固定的,因此沒法真實修改,可是可讓此物體成爲某個空物體的子物體,讓後調節它們的相對位置,最後讓這個空物體代替原來的物體。可是對於某些動畫模型來講最好不要這樣作,最好是用其餘模型工具實際修改。
9.Destroy函數會在一幀的結尾執行。
7.MonoBehaviour類中的鼠標事件如OnMouseDown只對空間中的物體有效,對UGUI無效,對UGUI須要新的事件系統接口新的:EvenSystem。
8.對於拖拽事件,OnPointerDown不能代替OnBeginDrag,OnPointerClick不能代替OnEndDrag。不然會發生沒法復位的Bug。
9.模型的Animation下的Curves能夠添加參數曲線,若要使用此參數,可在animator組件中添加和此參數同名的參數,可是參數值以animation下的值爲準。
10.腳本組件下面有start()函數或者update函數時,在檢視面板中才有勾選框。
7.預製物體的腳本GameObject成員變量的值只能是預製物體對象,不能引用場景中的對象。
8.網格碰撞器的面數必須小於256面。
9.若是物體A與物體B發生碰撞,C是物體A的子物體,而且物體C沒有Rigidbody組件,A和B都有Rigidbody組件,而且碰撞點在C,那麼發生碰撞的是A與B的Rigidbody。可是若是C有Rigidbody組件,那麼發生碰撞的就是C與B。也就是說碰撞的是兩個邏輯上最近的Rigidbody。
10.mesh filter定義了物體的形狀,mesh render定義了物體的渲染顯示。
11.拖拽精靈子圖到空物體建立精靈動畫時有可能沒有彈出動畫建立窗口,這多是軟件反應延遲,可刪除剛建立的沒用的子物體,再次拖拽。
7. Animator Controller 與 Animator override Controller的關係相似於父類虛函數與子類重寫函數的關係,能夠爲兩個形狀不一樣,可是動畫轉換條件相同的,只是動畫不一樣的物體其中一個添加Animator override Controller,而後重用上一個的Animator Controller,而後替換相應的動畫便可,當此類物體的數量不少時,用這種方式能夠節省時間。
8.
layer主要經過光線投射來選擇性地忽略碰撞器,或者添加碰撞功能。而sorting layer就是一個渲染層級的順序的控制。
9.
[Serializable]可使其定義的變量在inspector面板下顯示。[HideInspector]用在public變量前面表示即便是公共變量,也不會在Inspector中顯示。
10.
Animator中Trigger類型的參數,設置其值以後當即就會自動恢復原來的值,用於設置某些攻擊技能狀態頗有效。
7.OnLevelWasLoaded(int index),在一個場景加載完成後調用。
8.Mathf.Lerp(float a,float b,float t)函數用於插值運算,即讓a變化到b,變化插值爲t。即a=a*(1-t)+b*t;此方法有2D和3D的重載。
9.Instantiate(obj,position,rotation)函數用於實例化物體,當rotation爲Quaternion.identity時表示使用obj原來的旋轉。
10.重複和延遲執行的方法:
Invoke(methodName: string, time: float): void;
用於調用並延遲執行某個方法
methodName要執行的方法名稱,time延遲多久以後執行。
InvokeRepeating(methodName: string, time: float, repeatRate: float): void;
用於調用並延遲執行某個方法,以後重複執行該方法
Methodname方法名稱,time多久以後執行,repeatRate執行間隔
11.廣播消息:BroadcastMessage(「MethodName」):用於調用全部子物體的MethodName方法。
12.協同程序的使用:
(1)什麼是協調程序
unity協程是一個能暫停執行,暫停後當即返回,直到中斷指令完成後繼續執行的函數。
它相似一個子線程單獨出來處理一些問題,性能開銷較小,可是他在一個MonoBehaviour提供的主線程裏只能有一個處於運行狀態的協程。
(2)協同程序的特色
一、協程在中斷指令(YieldInstruction)產生時暫停執行
二、協程一暫停執行便當即返回 //中斷協程後返回主函數,暫停結束後繼續執行協程剩餘的函數。
三、中斷指令完成後從中斷指令的下一行繼續執行
四、同一時刻、一個腳本實例中能夠有多個暫停的協程,但只有一個運行着的協程
五、函數體所有執行完後,協程結束
六、協程能夠很好的控制跨越必定幀數後執行的行爲
七、協程在性能上、相比於通常函數幾乎沒有更多的開銷
八、協同程序都是在主程序中運行,而且會在每一幀中檢測你yield後面的條件是否知足,若知足會繼續執行。
好比當一個狀態函數到達某一個狀態時須要執行某個程序,可是又不能影響其餘函數的執行,此時可使用協程序另外開闢一個線程來執行,提升運行速度。
32.場景中不要直接拖拽引用切換場景不銷燬的物體,由於當場景再次切換回來的時候,引用的物體將再也不是原來的物體,會形成某些調用丟失。
33.關於遊戲暫停:使用Time.timeScale。其中Time.timeScale將會影響fixedUpdate函數,而Update函數將不會受到影響。而且影響到的變量是deltaTime,fixedDeltaTime不會受到影響。使用時應該使用Update函數和deltaTime的配合使用。由於fixedUpdate只是使其幀率下降,在其中使用運動等會發生跳幀現象。
32.光照烘培和太陽光:
即將靜態物體自發光,影子與環境光等進行預先的烘培,從而使光照的效果獲得預先的計算存儲。當有其餘光源靠近時,相關部分會根據烘培的效果進行呈現。
首先點擊playerSetting,設置光照爲Deferred
(1)首先打開Lighting窗口,點擊Object,點擊renderers,點選場景中要進行烘培的物體(被選擇的物體烘培後會在相互之間烘培出反射的環境光效果),點選Lightmap static,這樣物體就會造成靜態物體。這裏若是baking設置爲baked,那麼烘培的結果是地上出現固定的影子。若是選擇realtime,那麼地上的陰影就是實時的。
(2)選擇要用於烘培的光源。點擊renderes旁邊的lights,在層次視圖中點選一個光源,光源類型暫時只能是平行光,設置光照強度和反射的強度。
(3)進行環境設置:點擊Scene,這裏在Sun下選擇一個光源,這樣天空中會出現一個太陽,太陽的位置,角度等將跟隨該光源變化。設置環境光的強度。點擊precomputed Realtime GI設置CPU Usage的質量。而後點擊build。
40.關於Destroy
調用Destroy()
系統會首先執行disable操做
而後會執行OnDisable方法
這裏若是在OnDisable根據名字或者標籤查找該物體將會的系統的一個錯誤提示,可是不會發生使程序崩潰的錯誤警告go.IsActive() && go.GetTag() != 0,
最後執行OnDestroy方法
這裏若是在OnDisable根據名字或者標籤查找該物體將會獲得空的結果。
41.退出場景緻使的問題解決辦法
有三個敵人,攻擊這三個敵人,血量爲零時調用destroy銷燬敵人。在敵人的的ondestory中判斷是否還有標籤爲敵人的物體存在,若是沒有就斷定贏了,若是有就判斷本身是否死亡,若是死亡就輸了。這裏若是退出場景的時候本身先被系統銷燬,就會發生贏了的結果。若是敵人先被銷燬,就會發生輸了的結果。如今怎麼讓這兩種狀況都不會發生
8:18:48
牛牛她爸 2017/7/10 8:18:48
@阿輝用一個列表來記住三個敵人
牛牛她爸 2017/7/10 8:19:01
打死一個就從列表中標記他dead
40.光照探頭的使用:
在光照烘培的基礎上,讓烘培的光照對非靜態物體產生應該有的光照效果(該靜態物體的renderer下須要設置light probe爲blend probe)。
(1)設置光源,相關設置和光照烘培相同,在設置燈光類型中baking須要設置爲baked。
(2)添加光照探頭,新建空物體,添加light probe group組件,而後在光源附近添加儘可能多的光照探頭。
(3)而後點擊lighting下的build進行烘培。
(4)放入一個物體,在其renderer下Light Probes選擇Blend Probes。
40.太陽光暈:
(1)新建光暈物體new Flare,並添加貼圖設置尺寸顏色。
(2)將該物體添加到光源的light組件下flare下。此時若是該光源是和天陽相關的,那麼光暈就會產生在太陽上,不然會產生在光源上。對於其餘好比和太陽相關的物體,添加組件Lend Flare,添加flare文件,而後點擊Directional。
45.導出包致使的BUG:導出Asset包以後,項目中的tag便籤並不會一塊兒export,所以再導入到其餘項目或者電腦上以後,相應的tag的代碼就會失效,致使一些錯誤,當build以後,這些錯誤就會顯現出來。正確的導出以後還要複製用戶的設置文件夾。
三.須要掌握的Unity知識
1、Unity做爲3D遊戲引擎必需要掌握固定流水線和可編程流水線,由於涉及到矩陣變換的知識點,在項目開發中會用獲得的,若是讀者不懂的能夠查閱資料。
2、Unity做爲3D引擎有本身的座標系,在此強調一點,雖然它的圖形API分爲DirectX和OpenGL,可是它的世界座標系是左手座標系。
3、另外要掌握的座標系有屏幕座標系,UI座標系,視口座標,包括它們的原點是在哪一個位置,由於在項目開發中也會涉及到以上三個座標系之間的變換。
4、函數的執行順序,好比Awake,OnEnable,Start 等,以及3D碰撞體的執行效率,好比球體,膠囊體,立方體,Mesh等等。
5、程序的優化處理,這個是面試考察的重點,內存的管理也是Unity程序開發的重中之重。內存管理無非就是對內存的使用,針對UI的內存管理使用的是圖集方式,Unity自身的圖集功能浪費內存,好比2048*2048的圖集大小,它佔的內存是4M,也就是說無論圖集是否填滿,它都須要在內存中開闢4M的空間,可是若是使用Texture Packer工具就能夠節省沒有填滿的空間,針對大量UI的加載能夠採用分類打包圖集的方法處理。固然內存池的使用也是能夠應用到UI的管理,另外就是對3D場景資源的管理,須要場景圖片有本身的圖庫,這樣圖片能夠重複利用,另外模型的面數,骨骼數量,材質數量這些都須要去關注。
6、內存優化還須要涉及到圖片的格式,不帶Alpha通道的圖片採用jpg格式,帶有Alpha通道的採用png格式,這是一種處理方式,另一種處理方式就是將Alpha通道單獨拿出來,全部的圖片都是jpg格式,而後用帶有Alpha通道的圖片跟jpg格式文件進行結合使用。這樣也能夠優化圖片的大小。
7、在架構設計方面,就要注意了,代碼的編寫,好比經常使用的設計模式,工廠模式,單例模式,MVC模式,FSM模式,觀察者模式等,這些模式做爲開發者必需要掌握的。(屁,指揮單例模式)
8、接下來就是Shader編寫了,在這裏給讀者推薦一個編輯器工具Shader Forge編輯器,對於一些材質渲染很是好用,這個能夠做爲讀者學習Shader的工具。
9、另外對於C#中定義的String,StringBuilder或者List,ArrayList等它們之間的區分要搞清楚。
10、不一樣機型的適配處理,技術驗證等。
11、熱更新技術的實現,市面上應用比較廣的是ulua做爲腳本語言的框架設計。
12、做爲客戶端開發者也須要了解一些網絡方面的知識,好比tcp,udp,http這些協議處理的方式。
十4、做爲渲染場景的後處理方式,好比Bloom,Blur,HDR,SSAO,PSSM等等。
十5、C#中的事件監聽,委託的使用也要熟練掌握。
十6、協程與多線程的區別。
十7、文本文件的加載,好比json,xml,csv,二進制等等。
十8、有必要掌握的插件:PlayMaker,ITween,Behavior Designer。