wordpress source安卓優(yōu)化大師手機版下載
Unity3D使用的是笛卡爾三維坐標系,并且是以左手坐標系進行展示的。
1.全局坐標系(global)
全局坐標系描述的是游戲?qū)ο笤谡麄€世界(場景)中的相對于坐標原點(0,0,0)的位置。我們在場景中創(chuàng)建一個cube,初始的position值為(0,0,0),表示它當前在原點位置,如果我們設(shè)置它的position屬性值為(1,2,3),則此時表示,cube相對于世界原點在x軸上偏移了1個單位,在y軸上偏移了2單位,在z軸上偏移了3個單位(注:unity中單位為米,即每單位為1米)。
?2.局部坐標(local)
場景中的游戲?qū)ο蠖加袑儆谧约旱莫毩⒆鴺讼?#xff0c;也稱為模型坐標系,通過切換工具欄中的global按鈕就可以切換全局/局部坐標系。我們新建一個cube,在inspector面板中修改rotation屬性的y軸為200,這時切換全局/局部坐標系按鈕,我們發(fā)現(xiàn)全局坐標系和局部坐標系不一致了。如果覺得不好理解,我舉個形象的例子,比如用導(dǎo)航軟件,我們這里先將指南針正北方向規(guī)定為世界坐標的正方向,當導(dǎo)航軟件提示我們向左轉(zhuǎn),我們向左轉(zhuǎn),這時我們自身的方向變化了,但是世界坐標的正方向還是原來的正北,并沒有因為我們的自身左轉(zhuǎn)而改變指南針的正北方向,左轉(zhuǎn)就是局部坐標系的概念,當導(dǎo)航軟件提示我們向北直行時,向北就是世界坐標系的概念了。
如果我們再新建另外一個cube,并且將其中一個拖動到另一個cube上組成父子關(guān)系,這時,父節(jié)點的cube的坐標就成為了子節(jié)點cube的原點了,子節(jié)點的移動則是相對父節(jié)點的偏移。當我們將子物體的position屬性設(shè)為(0,0,0)時,子物體就和它的父節(jié)點重合了,我們設(shè)置子物體的position屬性為(0,-2,0)時,子物體在y軸上相對于父節(jié)點向下偏移了2個單位。
?3.屏幕坐標系:
以像素來定義的二維坐標系,用以描述像素在屏幕上的位置,屏幕的左下角定義為原點(0,0),右上角則為Game窗口的寬和高值組成的二維坐標點,可以用unity對應(yīng)的屏幕api表示(Screen.width,Screen.height),z軸的大小根據(jù)相機在世界坐標的位置來定義。鼠標的位置坐標,得到的就是屏幕坐標。屏幕坐標的數(shù)值只跟Game窗口的大小有關(guān),跟分辨率沒有關(guān)系。下圖通過截圖軟件標識了左下角的(0,0)坐標。
?4.視口坐標
視口坐標是標準化后的屏幕坐標,視口標準化(或者叫歸一化)概念跟向量的歸一化類似,向量的標準化即通過計算讓向量的長度為1,類似的,視口坐標以0到1之間的數(shù)來表示,它的范圍是以相機視口的左下角為(0,0),右上角為(1,1)定義的一個矩形。如果我們希望一個物體能被看到,那么它就需要被轉(zhuǎn)換到視口坐標。理解視口坐標可以參照屏幕坐標,z軸與屏幕坐標一樣,我們看視口矩形框時,z軸指向我們,z軸為正方向,z軸的值為攝像機的世界坐標取反。如下圖,就是攝像機的視口。
各種坐標的轉(zhuǎn)換方法:
世界和本地坐標的互轉(zhuǎn),直接取unity的transform的接口即可,取世界坐標用的position,取局部坐標用localpoistion。
屏幕坐標轉(zhuǎn)為世界坐標:使用camera.screentoworldPoint(vector3 v),camera為場景中的場景相機實例,此api常用于射擊游戲的子彈發(fā)射、戰(zhàn)略游戲或者角色扮演游戲中的點擊地面移動角色。
世界坐標轉(zhuǎn)為屏幕坐標,使用camera.worldtoscreenpoint(vector3 v),camera為場景中的UI相機實例,比如我們需要在怪物的頭上掛一個血條,就可以使用場景相機將世界坐標轉(zhuǎn)為屏幕坐標,然后再用UI相機將屏幕坐標轉(zhuǎn)為世界坐標,最后賦值給UI控件。
屏幕坐標轉(zhuǎn)為視口坐標,使用camera.screentoviewportpoint,camera為場景中場景相機。視口坐標請參照屏幕坐標。
世界坐標轉(zhuǎn)為視口坐標,使用camera.worldtoviewportpoint,camera為場景中場景相機。
屏幕坐標轉(zhuǎn)ugui坐標,當canvas的渲染模式(render mode)為screen space overlay時,直接將屏幕坐標賦給目標物體的transform.position(注意不是localposition)。當渲染模式為screenspace camera時,會出現(xiàn)因深度值不正確而引發(fā)的問題,這時應(yīng)該使用RectTransformUtility.ScreenPointToWorldPointInRectangle方法將屏幕坐標轉(zhuǎn)為世界坐標后再賦給transform.position。
Unity的話主要還是分兩塊吧,第一塊是美術(shù)(自己都不懂~這里允許我稍微帶過一下吧~),美術(shù)的話主要包括3d模型、材質(zhì)、紋理(貼圖)這幾部分吧,當然你也可以說還有shader(著色器),Unity本身擁有幾十種shader,也可以根據(jù)自己的需要使用shaderLab語言來編寫shader,這個對我來說相當有難度,所以一般只用Unity自帶的和網(wǎng)上“流傳”的。
接下來是程序方面的:
基本組成:
Scene場景,類似于Flash中的stage,用于放置各種對象。
GameObject,可以攜帶各種Component(每個GameObject至少帶有Transform組件,所有的組件都可以從頂部菜單Component里面找到并添加給游戲?qū)ο?#xff09;。
Component組件,附加在GameObject上,不同的組件可以使GameObject具有不同的屬性,Transform、碰撞器、剛體、渲染器等都是組件,腳本也是組件的一種,對象所表現(xiàn)出來的行為都是由組件實現(xiàn)的。
腳本語言:
C#、Javascript、boo(前兩者使用較為廣泛,網(wǎng)上教程以前兩者為主,個人推薦c#),一般的繼承MonoBehaviour類的腳本都需要依附的場景中的對象上才能被執(zhí)行。
用戶圖形界面部分(GUI):
- 用于制作按鈕、文本顯示、滾動條、下拉框等常用圖形操作界面元素,使用GUISkin和GUIStyle可以自定義樣式)
- 系統(tǒng)自帶GUI
- 各類GUI插件,NGUI、EZGUI等。
預(yù)制:
- 用于程序運行時,動態(tài)實例化對象的“母體”,比如,在射擊類游戲中,子彈的生成就可以使用實例化預(yù)制的方式來實現(xiàn),這就好比是Flash中的各種Display類,你可以定義它的各種屬性方法,然后在使用的時候直接實例化一個實例。
- 在project面板右擊選擇Creat——Prefab新建一個預(yù)制,將Hierarchy面板中要制成預(yù)制的對象拖到這個新建預(yù)制上即可。
標簽和層:
- 標簽(tag)用于辨別物體,與name類似,使用對象的tag和name都可以找到對應(yīng)的物體 (GameObject.Find(“Name”)、 GameObject.FindWitnTag(“Tag”))。默認是Untagged,可以通過Inspector面板里面Tag的下拉菜單選擇 Add Tag項來添加新的標簽,?在tagmanager中點開Tags左側(cè)的小三角通過size來增加標簽的數(shù)量,每個Element內(nèi)都填入新標簽的名字
- 層(layer),在使用某些功能的時候,可以通過層來過濾不 需要運用該功能的對象,也就是把該功能運用到特定的層,比如,相機的Culling Mask屬性,通過選擇特定層可以實現(xiàn)只顯示位于被選中的層的對象。層的添加也是在標簽管理器中,Unity已經(jīng)設(shè)置了8個層,你是不能對這8個層進行修 改的,你可以從第9個(也就是user layer8)開始添加你定義的層。