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 ...
随机推荐
- 设置Activity进入退出动画
http://blog.csdn.net/tenpage/article/details/7792689 http://blog.csdn.net/lnb333666/article/details/ ...
- CXF实战之自己定义拦截器(五)
CXF已经内置了一些拦截器,这些拦截器大部分默认加入到拦截器链中,有些拦截器也能够手动加入,如手动加入CXF提供的日志拦截器.也能够自己定义拦截器.CXF中实现自己定义拦截器非常easy.仅仅要继承A ...
- 基于EasyDarwin EasyPusher实现Android手机直播推送功能
EasyPusher直播推送在之前就已经稳定支持了Windows.Linux.ARM上的RTSP直播推送功能,配合EasyDarwin开源流媒体服务器,延时基本在1s以内,这个技术方案经过一年多时间, ...
- Android笔记之强大的buildConfigField
在进行项目开发或维护时,经常会遇到调试和发布所用到的参数值不一致的情况 例如,服务器会分测试和正式,为了能方便地更改(自动更换)服务器地址,buildConfigField就派上用场了 以前都是手动更 ...
- SpringBoot-(7)-基于Web,JDBC,MySql,Druid,MyBatis整合创建SpringBoot项目
1 打开Spring Initializr 如果Project SDK为空,手动指定下JDK SDK路径 2, 填写Group和Artifact 3,选择依赖 选择Web,MySQL,JDBC,MyB ...
- Dockerfile指令:
Dockerfile指令: 第一行注释,指令是大写字母开头, FROM指令: FROM<image>,后面跟镜像名, FROM<image>:<tag>,后面跟镜像 ...
- Oracle Meger into 函数
Oracle 在 9i 引入了 merge 命令, 通过这个 merge 能够在一个SQL 语句中对一个表同时执行 inserts 和 updates 操作.Merge into 可以实现用 B 表来 ...
- C++中map容器的说明和使用技巧
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明 1 头文件 #include <map> 2 定义 ma ...
- hdu 1236 排名(排序)
题意:按成绩排序 思路:排序 #include<iostream> #include<stdio.h> #include<string.h> #include< ...
- tflearn数据预处理
#I just added a function for custom data preprocessing, you can use it as: minmax_scaler = sklearn.p ...