成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Unity3D 游戲引擎之游戲對象的訪問繪制線與繪制面詳解

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

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

01 using UnityEngine; 
02 using System.Collections; 
03 using System.Threading; 
04    
05 public class Main : MonoBehaviour { 
06        
07     //游戲對象,這里是線段對象 
08     private GameObject LineRenderGameObject; 
09        
10     //線段渲染器 
11     private LineRenderer lineRenderer; 
12        
13     //設置線段的個數,標示一個曲線由幾條線段組成 
14     private int lineLength = 4; 
15        
16     //分別記錄4個點,通過這4個三維世界中的點去連接一條線段 
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         //通過之前創建的對象的名稱,就可以在其它類中得到這個對象, 
25         //這里在main.cs中拿到line的對象 
26         LineRenderGameObject = GameObject.Find ("line"); 
27            
28         //通過游戲對象,GetComponent方法 傳入LineRenderer 
29         //就是之前給line游戲對象添加的渲染器屬性 
30         //有了這個對象才可以為游戲世界渲染線段 
31         lineRenderer = (LineRenderer)LineRenderGameObject.GetComponent ("LineRenderer"); 
32            
33         //設置線段長度,這個數值須要和繪制線3D點的數量想等 
34         //否則會拋異常~~ 
35         lineRenderer.SetVertexCount(lineLength); 
36            
37            
38     }    
39                     
40        
41     void Update() { 
42            
43         //在游戲更新中去設置點 
44         //根據點將這個曲線鏈接起來 
45         //***個參數為 點的ID  
46         //第二個 參數為點的3D坐標 
47         //ID 一樣的話就標明是一條線段 
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 }
通過上面代碼的設置,運行游戲,發現全新的一個三角形曲線赫然的映入我們的眼簾,有了上面的方法我們就可以組合的繪制出各種各樣的3D 游戲曲線了,這里MOMO使用的是顏色,大家也可以添加一個貼圖~
 
 
繪制面的話~,因為3D世界中游戲面全都是用三角形來拼起來的(出于效率的考慮),所以大家所看到的面其實都是用三角面拼接起來的。那么下面我們看看在 Unity3D 中如何繪制三角形平面。先創建一個GameObject對象,我命名為face,然后給這個對象添加兩個Mesh屬性, 添加MeshFilter(網格過濾器)與mesh Renderer(網格渲染器)屬性,這樣子就可以繪制網格面了。  
 
 
為了給網格面貼圖,我給mesh Renderer 渲染器添加一個材質,貼上一張圖片~ 在3D 的世界中兩點可以確定一條線,那么三點就肯定能確定一個面,3D世界中的面一定是三角形拼湊組成,任何3D的面的所需要的坐標點的數量 一定是3的倍數。和繪制線一樣,MOMO還是創建一個腳本綁定在攝像頭中,然后去訪問上面創建的face游戲對象 去渲染三角面~

[代碼]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         //通過object對象名 face 得到網格渲染器對象 
11         MeshFilter meshFilter = (MeshFilter)GameObject.Find("face").GetComponent(typeof(MeshFilter)); 
12            
13         //通過渲染器對象得到網格對象 
14         Mesh mesh = meshFilter.mesh; 
15        
16         //API中寫的不是提清楚,我詳細的在說一遍 
17            
18         //設置頂點,這個屬性非常重要 
19         //三個點確定一個面,所以Vector3數組的數量一定是3個倍數 
20         //遵循順時針三點確定一面 
21         //這里的數量為6 也就是我創建了2個三角面 
22         //依次填寫3D坐標點 
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         //設置貼圖點,因為面確定出來以后就是就是2D  
26         //所以貼紙貼圖數量為Vector2  
27         //***個三角形設置5個貼圖 
28         //第二個三角形設置一個貼圖 
29         //數值數量依然要和頂點的數量一樣 
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         //設置三角形索引,這個索引是根據上面頂點坐標數組的索引 
34         //對應著定點數組Vector3中的每一項 
35         //***將兩個三角形繪制在平面中 
36         //數值數量依然要和頂點的數量一樣 
37         mesh.triangles= new int []{0,1,2,3,4,5}; 
38            
39     } 
40 }
Build and Run  運行效果后清楚的可以看到兩個三角形。MOMO提醒大家 善用三角平面可以繪制出各種各樣的游戲面出來噢~哇咔咔~
 
 
責任編輯:冰凝兒
相關推薦

2012-12-24 09:04:04

iOSUnity3D

2012-12-24 08:46:50

iOSUnity3D

2012-12-24 09:01:41

iOSUnity3D

2012-12-24 08:40:12

2012-12-24 09:55:15

iOSUnity3D

2012-12-24 08:48:25

iOSUnity3D

2012-12-24 08:50:21

iOSUnity3D

2012-12-24 08:52:44

iOSUnity3D

2012-12-24 08:51:23

iOSUnity3D

2012-12-24 08:57:35

iOSUnity3D

2012-12-24 08:59:13

iOSUnity3D

2012-12-24 09:02:48

iOSUnity3D

2012-12-24 08:45:19

iOSUnity3D

2012-12-24 08:56:15

iOSUnity3D

2012-12-24 08:54:47

iOSUnity3D

2012-12-24 09:06:14

iOSUnity3D

2012-12-24 09:11:58

iOSUnity3D

2012-12-24 09:00:31

iOSUnity3D

2013-12-04 16:21:02

Android游戲引擎libgdx教程

2012-12-24 09:17:12

iOSUnity3D
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区二区三区久久久 | 亚洲一区在线日韩在线深爱 | 一级毛片网 | 一区二区三区视频在线 | 国产视频不卡一区 | 欧美一二三四成人免费视频 | 99久久精品免费看国产四区 | 精品久久久网站 | 人人干在线视频 | 精品久久99 | 热久久999| 国产二区视频 | 亚洲成人精品在线 | 日韩中出 | 亚洲色图综合 | 亚洲精品一区二三区不卡 | 国产精品178页 | 欧美日韩国产高清 | 欧美一区二区三区免费电影 | 中文字幕亚洲视频 | 一区二区三区国产 | 男人的天堂久久 | 美女久久 | 夜久久| 国产一区二区在线免费观看 | 精品一级 | 欧美一区二区三区久久精品 | 热99精品视频 | 精品久久久久久久 | 污片在线免费观看 | 国产成人精品av | 亚洲成人精品在线观看 | 国产成人免费在线 | 亚洲在线| 六月色婷 | 欧美日韩综合 | 999国产视频 | 天天操欧美 | 日韩欧美一二三区 | 久久天堂网 | 激情婷婷|