自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Unity3D 游戲引擎之游戲?qū)ο蟮脑L問(wèn)繪制線與繪制面詳解

移動(dòng)開(kāi)發(fā) iOS 游戲開(kāi)發(fā)
一眨眼學(xué)習(xí)Unity3D 也有一段時(shí)間了,基本已經(jīng)拿下了這套游戲引擎,回過(guò)頭來(lái)想想以前寫的RPG 游戲引擎,越來(lái)越發(fā)現(xiàn)以前寫的就是垃圾。人果然是要不斷學(xué)習(xí)與不斷進(jìn)步
最近做一個(gè)項(xiàng)目須要去繪制線與繪制面,那么把這兩天的學(xué)習(xí)筆記整理一下,一是給自己留作備忘,二是方便初學(xué)者學(xué)習(xí)。
任何一個(gè)無(wú)規(guī)則曲線它都是有若干個(gè)線段組成,及時(shí)是圓形它也是又若干個(gè)線段組成的,也就是說(shuō)將若干個(gè)線段拼接起來(lái)就是我們須要的無(wú)規(guī)則曲線~那么在3D 的世界中我們須要知道 X Y Z 三個(gè)點(diǎn)來(lái)確定一條3D線段。
首先先使用Unity編輯器的方式來(lái)添加一條線~
Unity -> GameObject -> Create Empty 創(chuàng)建一個(gè)空的對(duì)象,我命名為line。然后點(diǎn)擊 Component -> Miscellaneous -> Line Renderer 給line添加一個(gè)線渲染器的屬性,Line Renderer是非常中的屬性,下面我會(huì)詳細(xì)的說(shuō)明。
    
 
Create -> Material 創(chuàng)建一個(gè)材質(zhì),做來(lái)這個(gè)線段的貼圖,下面我們看看Line Renderer的一些重要參數(shù)。
Cast Shadows: 是否投射陰影。
Receive Shadows: 是否接收陰影。
Materials :設(shè)置材質(zhì),這里可以設(shè)置多個(gè)材質(zhì), line就是上面我們創(chuàng)建的材質(zhì),這里我給line這個(gè)材質(zhì)涂上了紅顏色。
Positions: 這個(gè)屬性就比較重要了,它是專門設(shè)置線段在3D 世界中的點(diǎn)的坐標(biāo),size 設(shè)置點(diǎn)的數(shù)量 為3 那么將會(huì)有3個(gè)點(diǎn),Element 0   Element 1 Element 2    這三個(gè)點(diǎn)將確定這條曲線分為兩段,***段是(0,0,1) 到  (0,0,2) ,第二段是 (0,0,2) 到(0,0,4)。
Paramerters 
StartWidth :設(shè)置起點(diǎn)的寬度  
EndWidth:  設(shè)置終點(diǎn)的寬度 ,這兩項(xiàng)數(shù)值默認(rèn)為1,但是現(xiàn)實(shí)起來(lái)很寬,所以一般都設(shè)置為0.幾~ 
Start Color: 設(shè)置起點(diǎn)顏色
Start Color: 設(shè)置終點(diǎn)顏色
Use World Space 使用世界坐標(biāo)系
大家看看效果,清楚的可以看到曲線分為兩部分,***部分較短 第二部分較長(zhǎng)。
 
怎么樣? 繪制線的方法不難學(xué)吧?在已知線段位置的情況下我們可以使用上面的方法去設(shè)置這條線,但是如果線段的位置是在游戲過(guò)程中動(dòng)態(tài)的產(chǎn)生就得在代碼中去動(dòng)態(tài)的去設(shè)置。
創(chuàng)建腳本Main.cs 綁定到攝像頭上,運(yùn)行游戲繪制線的話須要在Main中去拿到line這個(gè)對(duì)象的實(shí)例。這就是一個(gè)比較重要的知識(shí)點(diǎn)了。
一些重要的方法,在編輯器中編輯的一些東西,在代碼中也可以做到。
LineRenderer.SetWidth(0.1,0.1) ; 設(shè)置線段起始點(diǎn)與結(jié)束點(diǎn)的寬度 (參數(shù)1 為起始點(diǎn) 參數(shù)2為結(jié)束點(diǎn))
LineRenderer.SetColor(Color.black,Color.white); 設(shè)置線段起始點(diǎn)與結(jié)束點(diǎn)的顏色 (參數(shù)1 為起始點(diǎn)顏色 參數(shù)2為結(jié)束點(diǎn)顏色)
LineRenderer.SetVertexCount(5); 設(shè)置線段數(shù)量。
LineRenderer.useWorldSpace = true; 是否使用世界坐標(biāo)系,和上面編輯器對(duì)應(yīng)。

[代碼]c#/cpp/oc代碼:

01 using UnityEngine; 
02 using System.Collections; 
03 using System.Threading; 
04    
05 public class Main : MonoBehaviour { 
06        
07     //游戲?qū)ο?,這里是線段對(duì)象 
08     private GameObject LineRenderGameObject; 
09        
10     //線段渲染器 
11     private LineRenderer lineRenderer; 
12        
13     //設(shè)置線段的個(gè)數(shù),標(biāo)示一個(gè)曲線由幾條線段組成 
14     private int lineLength = 4; 
15        
16     //分別記錄4個(gè)點(diǎn),通過(guò)這4個(gè)三維世界中的點(diǎn)去連接一條線段 
17     private Vector3 v0 = new Vector3(1.0f,0.0f,0.0f); 
18     private Vector3 v1 = new Vector3(0.0f,1.0f,0.0f); 
19     private Vector3 v2 = new Vector3(0.0f,0.0f,1.0f); 
20     private Vector3 v3 = new Vector3(1.0f,0.0f,0.0f); 
21        
22     void Start(){ 
23            
24         //通過(guò)之前創(chuàng)建的對(duì)象的名稱,就可以在其它類中得到這個(gè)對(duì)象, 
25         //這里在main.cs中拿到line的對(duì)象 
26         LineRenderGameObject = GameObject.Find ("line"); 
27            
28         //通過(guò)游戲?qū)ο?,GetComponent方法 傳入LineRenderer 
29         //就是之前給line游戲?qū)ο筇砑拥匿秩酒鲗傩?nbsp;
30         //有了這個(gè)對(duì)象才可以為游戲世界渲染線段 
31         lineRenderer = (LineRenderer)LineRenderGameObject.GetComponent ("LineRenderer"); 
32            
33         //設(shè)置線段長(zhǎng)度,這個(gè)數(shù)值須要和繪制線3D點(diǎn)的數(shù)量想等 
34         //否則會(huì)拋異?!?nbsp;
35         lineRenderer.SetVertexCount(lineLength); 
36            
37            
38     }    
39                     
40        
41     void Update() { 
42            
43         //在游戲更新中去設(shè)置點(diǎn) 
44         //根據(jù)點(diǎn)將這個(gè)曲線鏈接起來(lái) 
45         //***個(gè)參數(shù)為 點(diǎn)的ID  
46         //第二個(gè) 參數(shù)為點(diǎn)的3D坐標(biāo) 
47         //ID 一樣的話就標(biāo)明是一條線段 
48         //所以盆友們須要注意一下! 
49            
50         lineRenderer.SetPosition (0, v0); 
51         lineRenderer.SetPosition (1, v1); 
52         lineRenderer.SetPosition (2, v2); 
53         lineRenderer.SetPosition (3, v3); 
54    
55    
56     } 
57        
58 }
通過(guò)上面代碼的設(shè)置,運(yùn)行游戲,發(fā)現(xiàn)全新的一個(gè)三角形曲線赫然的映入我們的眼簾,有了上面的方法我們就可以組合的繪制出各種各樣的3D 游戲曲線了,這里MOMO使用的是顏色,大家也可以添加一個(gè)貼圖~
 
 
繪制面的話~,因?yàn)?D世界中游戲面全都是用三角形來(lái)拼起來(lái)的(出于效率的考慮),所以大家所看到的面其實(shí)都是用三角面拼接起來(lái)的。那么下面我們看看在 Unity3D 中如何繪制三角形平面。先創(chuàng)建一個(gè)GameObject對(duì)象,我命名為face,然后給這個(gè)對(duì)象添加兩個(gè)Mesh屬性, 添加MeshFilter(網(wǎng)格過(guò)濾器)與mesh Renderer(網(wǎng)格渲染器)屬性,這樣子就可以繪制網(wǎng)格面了。  
 
 
為了給網(wǎng)格面貼圖,我給mesh Renderer 渲染器添加一個(gè)材質(zhì),貼上一張圖片~ 在3D 的世界中兩點(diǎn)可以確定一條線,那么三點(diǎn)就肯定能確定一個(gè)面,3D世界中的面一定是三角形拼湊組成,任何3D的面的所需要的坐標(biāo)點(diǎn)的數(shù)量 一定是3的倍數(shù)。和繪制線一樣,MOMO還是創(chuàng)建一個(gè)腳本綁定在攝像頭中,然后去訪問(wèn)上面創(chuàng)建的face游戲?qū)ο?去渲染三角面~

[代碼]c#/cpp/oc代碼:

01 using UnityEngine; 
02 using System.Collections; 
03    
04 public class Main : MonoBehaviour { 
05    
06        
07     // Update is called once per frame 
08     void Update () { 
09            
10         //通過(guò)object對(duì)象名 face 得到網(wǎng)格渲染器對(duì)象 
11         MeshFilter meshFilter = (MeshFilter)GameObject.Find("face").GetComponent(typeof(MeshFilter)); 
12            
13         //通過(guò)渲染器對(duì)象得到網(wǎng)格對(duì)象 
14         Mesh mesh = meshFilter.mesh; 
15        
16         //API中寫的不是提清楚,我詳細(xì)的在說(shuō)一遍 
17            
18         //設(shè)置頂點(diǎn),這個(gè)屬性非常重要 
19         //三個(gè)點(diǎn)確定一個(gè)面,所以Vector3數(shù)組的數(shù)量一定是3個(gè)倍數(shù) 
20         //遵循順時(shí)針三點(diǎn)確定一面 
21         //這里的數(shù)量為6 也就是我創(chuàng)建了2個(gè)三角面 
22         //依次填寫3D坐標(biāo)點(diǎn) 
23         mesh.vertices = new Vector3[] {new Vector3(5, 0, 0), new Vector3(0, 5, 0), new Vector3(0, 0, 5),new Vector3(-5, 0, 0), new Vector3(0, -5, 0), new Vector3(0, 0, -5)}; 
24        
25         //設(shè)置貼圖點(diǎn),因?yàn)槊娲_定出來(lái)以后就是就是2D  
26         //所以貼紙貼圖數(shù)量為Vector2  
27         //***個(gè)三角形設(shè)置5個(gè)貼圖 
28         //第二個(gè)三角形設(shè)置一個(gè)貼圖 
29         //數(shù)值數(shù)量依然要和頂點(diǎn)的數(shù)量一樣 
30         mesh.uv = new Vector2[] {new Vector2(0, 0), new Vector2(0, 5), new Vector2(5, 5),new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1)}; 
31            
32            
33         //設(shè)置三角形索引,這個(gè)索引是根據(jù)上面頂點(diǎn)坐標(biāo)數(shù)組的索引 
34         //對(duì)應(yīng)著定點(diǎn)數(shù)組Vector3中的每一項(xiàng) 
35         //***將兩個(gè)三角形繪制在平面中 
36         //數(shù)值數(shù)量依然要和頂點(diǎn)的數(shù)量一樣 
37         mesh.triangles= new int []{0,1,2,3,4,5}; 
38            
39     } 
40 }
Build and Run  運(yùn)行效果后清楚的可以看到兩個(gè)三角形。MOMO提醒大家 善用三角平面可以繪制出各種各樣的游戲面出來(lái)噢~哇咔咔~
 
 
責(zé)任編輯:冰凝兒
相關(guān)推薦

2012-12-24 09:04:04

iOSUnity3D

2012-12-24 08:46:50

iOSUnity3D

2012-12-24 08:40:12

2012-12-24 09:01:41

iOSUnity3D

2012-12-24 08:50:21

iOSUnity3D

2012-12-24 09:55:15

iOSUnity3D

2012-12-24 08:48:25

iOSUnity3D

2012-12-24 08:51:23

iOSUnity3D

2012-12-24 08:52:44

iOSUnity3D

2012-12-24 08:57:35

iOSUnity3D

2012-12-24 08:59:13

iOSUnity3D

2012-12-24 08:45:19

iOSUnity3D

2012-12-24 09:02:48

iOSUnity3D

2012-12-24 08:56:15

iOSUnity3D

2012-12-24 08:54:47

iOSUnity3D

2012-12-24 09:11:58

iOSUnity3D

2012-12-24 09:06:14

iOSUnity3D

2012-12-24 09:00:31

iOSUnity3D

2013-12-04 16:21:02

Android游戲引擎libgdx教程

2012-12-24 09:17:12

iOSUnity3D
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)