Unity3D研究院之游戏对象的访问绘制线与绘制面详解(十七)



| 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 | 
using UnityEngine; 
using System.Collections; 
using System.Threading; 
public class Main : MonoBehaviour { 
//游戏对象,这里是线段对象 
private GameObject LineRenderGameObject; 
//线段渲染器 
private LineRenderer lineRenderer; 
//设置线段的个数,标示一个曲线由几条线段组成 
private int lineLength = 4; 
//分别记录4个点,通过这4个三维世界中的点去连接一条线段 
private Vector3 v0 = new Vector3(1.0f,0.0f,0.0f); 
private Vector3 v1 = new Vector3(0.0f,1.0f,0.0f); 
private Vector3 v2 = new Vector3(0.0f,0.0f,1.0f); 
private Vector3 v3 = new Vector3(1.0f,0.0f,0.0f); 
void Start(){ 
//通过之前创建的对象的名称,就可以在其它类中得到这个对象, 
//这里在main.cs中拿到line的对象 
LineRenderGameObject = GameObject.Find ("line"); 
//通过游戏对象,GetComponent方法 传入LineRenderer 
//就是之前给line游戏对象添加的渲染器属性 
//有了这个对象才可以为游戏世界渲染线段 
lineRenderer = (LineRenderer)LineRenderGameObject.GetComponent ("LineRenderer"); 
//设置线段长度,这个数值须要和绘制线3D点的数量想等 
//否则会抛异常~~ 
lineRenderer.SetVertexCount(lineLength); 
}
 
void Update() { 
//在游戏更新中去设置点 
//根据点将这个曲线链接起来 
//第一个参数为 点的ID 
//第二个 参数为点的3D坐标 
//ID 一样的话就标明是一条线段 
//所以盆友们须要注意一下! 
lineRenderer.SetPosition (0, v0); 
lineRenderer.SetPosition (1, v1); 
lineRenderer.SetPosition (2, v2); 
lineRenderer.SetPosition (3, v3); 
} 
} | 
通过上面代码的设置,运行游戏,发现全新的一个三角形曲线赫然的映入我们的眼帘,有了上面的方法我们就可以组合的绘制出各种各样的3D 游戏曲线了,这里MOMO使用的是颜色,大家也可以添加一个贴图~

绘制面的话~,因为3D世界中游戏面全都是用三角形来拼起来的(出于效率的考虑),所以大家所看到的面其实都是用三角面拼接起来的。那么下面我们看看在Unity3D 中如何绘制三角形平面。先创建一个GameObject对象,我命名为face,然后给这个对象添加两个Mesh属性, 添加MeshFilter(网格过滤器)与mesh Renderer(网格渲染器)属性,这样子就可以绘制网格面了。

| 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 | 
using UnityEngine; 
using System.Collections; 
public class Main : MonoBehaviour { 
// Update is called once per frame 
void Update () { 
//通过object对象名 face 得到网格渲染器对象 
MeshFilter meshFilter = (MeshFilter)GameObject.Find("face").GetComponent(typeof(MeshFilter)); 
//通过渲染器对象得到网格对象 
Mesh mesh = meshFilter.mesh; 
    //API中写的不是提清楚,我详细的在说一遍 
    //设置顶点,这个属性非常重要 
    //三个点确定一个面,所以Vector3数组的数量一定是3个倍数 
    //遵循顺时针三点确定一面 
    //这里的数量为6 也就是我创建了2个三角面 
    //依次填写3D坐标点 
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)}; 
//设置贴图点,因为面确定出来以后就是就是2D
 
//所以贴纸贴图数量为Vector2
 
//第一个三角形设置5个贴图 
//第二个三角形设置一个贴图 
//数值数量依然要和顶点的数量一样 
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)}; 
//设置三角形索引,这个索引是根据上面顶点坐标数组的索引 
//对应着定点数组Vector3中的每一项 
//最后将两个三角形绘制在平面中 
//数值数量依然要和顶点的数量一样 
mesh.triangles= new int []{0,1,2,3,4,5}; 
} 
} | 
Build and Run 运行效果后清楚的可以看到两个三角形。MOMO提醒大家 善用三角平面可以绘制出各种各样的游戏面出来噢~哇咔咔~

最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,总的来说这一章还是比较简单的,不过也是非常重要的一章。代码我就不上传了。哇咔咔~ MOMO愿和 大家好好学习,大家一起进步哈~!!!
- 本文固定链接: http://www.xuanyusong.com/archives/561
- 转载请注明: 雨松MOMO 2012年05月01日 于 雨松MOMO程序研究院 发表
Unity3D研究院之游戏对象的访问绘制线与绘制面详解(十七)的更多相关文章
- CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
		CAS (6) -- Nginx代理模式下浏览器访问CAS服务器网络顺序图详解 tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1. ... 
- (转)Unity3D研究院之游戏架构脚本该如何来写(三十九)
		这篇文章MOMO主要想大家说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Unity3D这套游戏引擎来说入门极快,可是要想做好却非常的难.这篇文章的目的是让哪些已经上手Unity3D游戏 ... 
- Unity3d 如何找到游戏对象并改变其颜色
		//游戏对象 private var obj:GameObject; //渲染器 private var render:Renderer; //贴图 private var texture:Textu ... 
- 应用层(一)HTTP服务访问基本流程和HTTP报文详解
		HTTP属于TCP/IP模型中一个面向文本的应用层协议,所使用的服务器端口号的TCP中的80端口,通信双方在这个基础上进行通信. 每个服务器都有一个应用进程,时刻监听着80端口的用户访问请求.当有用户 ... 
- JSP中的内置对象和Struts中的Web资源的详解
		JSP中的内置对象有如下几种: request :继承于HttpServletRequest, HttpServletRequest继承ServletRequest, 获得的Request对象的方法: ... 
- jQuery对象数据缓存Cache原理及jQuery.data详解
		网上有很多教你怎么使用jQuery.data(..)来实现数据缓存,但有两个用户经常使用的data([key],[value])和jQuery.data(element,[key],[value])几 ... 
- unity绘制线和绘制面
		绘制线条代码,其实就是指定至少两个点,然后赋予贴图即可,不废话,上代码: using UnityEngine; using System.Collections; public class LineT ... 
- xml和java对象互转:JAXB注解的使用详解
		先看工具类: import org.slf4j.Logger; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; ... 
- OpenGL之位图的绘制和gluOrtho2D等函数详解
		位图绘制 先来段代码吧: #include <iostream> #include <gl/glut.h> using namespace std; #pragma comme ... 
随机推荐
- Drupal 初次使用感受,兴许补充。
			非常久曾经就接触过.下载下来安装,结果界面太丑,太难看,直接删除. 近期又一次想到开源CMS,好奇看到那么多人推崇drupal.也便下载来又一次研究了下. 刚接触了下.只是总体使用感觉非常差.尤其几个 ... 
- 在VS2015中增加JQuery引用及智能提示
			打开VS2015,从"工具"菜单选择NuGet选项,搜索Jquery,并点击安装. 可以看到解决方案的scripts增加了对应文件的引用 在HTML文件中可以直接引用j ... 
- java设计模式之综述
			一.什么是设计模式 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系 ... 
- 九度OJ 1097:取中值 (中值)
			时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5092 解决:1411 题目描述: 存在两组数组,和4个数字a,b,c,d,要求做如下操作,将第一个数组第a个数到第b个数,第二个数组的第c ... 
- Conditions in bash scripting (if statements)
			Shell中判断语句if中-z至-d的意思 - sunny_2015 - 博客园 https://www.cnblogs.com/coffy/p/5748292.html Conditions in ... 
- source insight 快捷键
			source insight 返回上一视图 快捷键:ALT+, 浏览项目符号:F7 全局浏览查找某个名称开头的函数或结构体等 
- ffmpeg遇到inttypes.h和UINT64_C
			http://blog.csdn.net/cll131421/article/details/7763657 编译过程:错误一:无法打开包括文件:“inttypes.h”: No such file ... 
- [APIO 2010] 特别行动队
			[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1911 [算法] 设前i个士兵"修正"后的最大战斗力为fi 令su ... 
- Tensorflow和Caffe 简介
			TensorFlow TensorFlow 是相对高阶的机器学习库,用户可以方便地用它设计神经网络结构,而不必为了追求高效率的实现亲自写 C++或 CUDA 代码.它和 Theano 一样都支持自动求 ... 
- Spark Streaming之四:Spark Streaming 与 Kafka 集成分析
			前言 Spark Streaming 诞生于2013年,成为Spark平台上流式处理的解决方案,同时也给大家提供除Storm 以外的另一个选择.这篇内容主要介绍Spark Streaming 数据接收 ... 
