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 ...
随机推荐
- css3-calc用法
css3--calc()使用 css3新增的一个功能,可以计算元素的长度 例如说:一个百分百布局中,分左右两侧,中间需要一个分隔空间,使用padding或者margin则会超出100%,这时候使用ca ...
- 九度OJ 1139:最大子矩阵 (矩阵运算、缓存)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1014 解决:376 题目描述: 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩 ...
- File syncing and sharing software with file encryption and group sharing, emphasis on reliability and high performance.
http://seafile.com/ showdoc haiwen/seafile: File syncing and sharing software with file encryption a ...
- eclipse调试第三方jar包需要源码的问题
很多时候测试自己的jar包功能时,需要有一个测试工程导入该jar包,但是一般在调试的时候,需要跟进去看看步骤和逻辑是否正确,这个时候就需要在jar包的源码中下断点.最近刚好自己也会经常这样做,也遇到了 ...
- 使用Windows API发送HTTP请求
先看一个简单的GET示例 #include <Windows.h> #include <winhttp.h> #include <stdio.h> int main ...
- C#实现(递归和非递归)高速排序和简单排序等一系列排序算法
本人由于近期工作用到了一些排序算法.就把几个简单的排序算法.想冒泡排序,选择排序,插入排序.奇偶排序和高速排序等整理了出来,代码用C#代码实现,而且通过了測试.希望能给大家提供參考. ...
- Hive与impala的对比测试实验
前面几篇随笔记录了我安装环境的一些笔记,环境ok以后,自然要看看impala到底性能如何,拿他来hive做做对比: 前面hive章节中,已经建立了一张名叫chengyeliang的table,该表的结 ...
- Express中的Ejs模板传值问题
在Ejs模板传值过程中,route下的变量值通过res.sender()中的变量参数传给views, 这时在views中若该变量在javascript代码中使用,可直接使用该变量,不必使用<% ...
- Python序列——元组
元组是什么 1 创建元组 2 访问元组中的值 3 更新元组中的元素 4 删除元组中的元素或者元组本身 元组相关操作 内建函数对元组的支持 1 序列类型函数 2 元组内建函数 元组的特殊性 1. 元组是 ...
- platform_set_drvdata 和 platform_get_drvdata
ndev是我们在probe函数中定义的局部变量,如果我想在其他地方使用它怎么办呢? 这就需要把它保存起来.内核提供了这个方法,使用函数platform_set_drvdata()可以将ndev保存成平 ...