【Untiy&对象】如何实现一个Prefab立方体的6个面不同图案
来源:互联网 发布:社交网络关系图 绘制 编辑:程序博客网 时间:2024/06/03 20:14
总结一下,实现的几个方法。
1.必须要在辅助的3D软件进行UV展开,比如说3Dmax maya。
只要在模型上显示图案都和UV有关联。(参考资料3)2.使用代码对每个立方体,的6个面的材质进行替换。3.用6个小方块替换1个大方块。4.使用shader的双材质5.六个面分别来一个plan之后赋予材质
------------------------------------------------
参考资料1的内容(避免内容404,分流)
实际测试效果图
将此脚本放到Cube上
代码部分
using UnityEngine;
using System.Collections;
using System;
public class test : MonoBehaviour {
void OnGUI()
{
if (GUI.Button(new Rect(100, 100, 100, 100), "测试Mesh"))
{
Mesh mesh = new Mesh();
mesh = this.gameObject.GetComponent<MeshFilter>().mesh;
int[] triangles;
mesh.subMeshCount = 6;
this.gameObject.GetComponent<MeshRenderer>().materials = new Material[6];
triangles = mesh.triangles;
mesh.SetTriangles(GetRangeArray(triangles, 0, 5), 0);//根据数字,红z+
mesh.SetTriangles(GetRangeArray(triangles, 6, 11), 1);//绿y +
mesh.SetTriangles(GetRangeArray(triangles, 12, 17), 2);//白z -
mesh.SetTriangles(GetRangeArray(triangles, 18, 23), 3);//黑y -
mesh.SetTriangles(GetRangeArray(triangles, 24, 29), 4);//蓝x -
mesh.SetTriangles(GetRangeArray(triangles, 30, 35), 5);//黄x +
//根据图片,红z+
// 蓝x -
// 绿y +
// 白z -
// 黑y -
// 黄x +
this.gameObject.GetComponent<MeshRenderer>().materials[0].color = Color.red;
this.gameObject.GetComponent<MeshRenderer>().materials[1].color = Color.green;
this.gameObject.GetComponent<MeshRenderer>().materials[2].color = Color.white;
this.gameObject.GetComponent<MeshRenderer>().materials[3].color = Color.black;
this.gameObject.GetComponent<MeshRenderer>().materials[4].color = Color.blue;
this.gameObject.GetComponent<MeshRenderer>().materials[5].color = Color.yellow;
}
}
public int[] GetRangeArray(int[] SourceArray, int StartIndex, int EndIndex)
{
try
{
int[] result = new int[EndIndex - StartIndex + 1];
for (int i = 0; i <= EndIndex - StartIndex; i++) result[i] = SourceArray[i + StartIndex];
return result;
}
catch (IndexOutOfRangeException ex)
{
throw new Exception(ex.Message);
}
}
}
------------------------------------------------将此脚本放到Cube上
代码部分
using UnityEngine;
using System.Collections;
using System;
public class test : MonoBehaviour {
void OnGUI()
{
if (GUI.Button(new Rect(100, 100, 100, 100), "测试Mesh"))
{
Mesh mesh = new Mesh();
mesh = this.gameObject.GetComponent<MeshFilter>().mesh;
int[] triangles;
mesh.subMeshCount = 6;
this.gameObject.GetComponent<MeshRenderer>().materials = new Material[6];
triangles = mesh.triangles;
mesh.SetTriangles(GetRangeArray(triangles, 0, 5), 0);//根据数字,红z+
mesh.SetTriangles(GetRangeArray(triangles, 6, 11), 1);//绿y +
mesh.SetTriangles(GetRangeArray(triangles, 12, 17), 2);//白z -
mesh.SetTriangles(GetRangeArray(triangles, 18, 23), 3);//黑y -
mesh.SetTriangles(GetRangeArray(triangles, 24, 29), 4);//蓝x -
mesh.SetTriangles(GetRangeArray(triangles, 30, 35), 5);//黄x +
//根据图片,红z+
// 蓝x -
// 绿y +
// 白z -
// 黑y -
// 黄x +
this.gameObject.GetComponent<MeshRenderer>().materials[0].color = Color.red;
this.gameObject.GetComponent<MeshRenderer>().materials[1].color = Color.green;
this.gameObject.GetComponent<MeshRenderer>().materials[2].color = Color.white;
this.gameObject.GetComponent<MeshRenderer>().materials[3].color = Color.black;
this.gameObject.GetComponent<MeshRenderer>().materials[4].color = Color.blue;
this.gameObject.GetComponent<MeshRenderer>().materials[5].color = Color.yellow;
}
}
public int[] GetRangeArray(int[] SourceArray, int StartIndex, int EndIndex)
{
try
{
int[] result = new int[EndIndex - StartIndex + 1];
for (int i = 0; i <= EndIndex - StartIndex; i++) result[i] = SourceArray[i + StartIndex];
return result;
}
catch (IndexOutOfRangeException ex)
{
throw new Exception(ex.Message);
}
}
}
MeshFilter.mesh
Mesh.SetTriangles
Mesh.triangles
subMeshCount
------------------------------------------------
参考资料:
1.
关于将Cude用代码的方式实现6个面不同材质的解决方案
2.
Unity Mesh(五) Mesh 立方体Cube贴图以及六个面分别贴不同的图片
3.
Blender UV贴图
4.
5.
6.
7.
8.
9.
0 0
- 【Untiy&对象】如何实现一个Prefab立方体的6个面不同图案
- 如何给一个立方体的面分别定义颜色
- 如何让一个变量存储多个不同的状态
- JPCT-AE for Android 3D (二)----------为立方体各面贴上不同的纹理
- Unity Mesh(五) Mesh 立方体Cube贴图以及六个面分别贴不同的图片
- openGL编码实现一个立方体
- css3立方体的实现
- 如何在一个数组中取不同的6个随机数
- 纯CSS3实现一个旋转的3D立方体盒子
- 知识点:CSS实现一个图案
- untiy 3d ShaderLab_第5章_第一个被执行的Pass_1_不同LightMode 被选择的顺序
- 一个ip,2个域名想用不同的域名访问不同网站,如何配置APACHE?
- 【面向对象程序设计常见面试题】如何定义和实现一个类的成员函数为回调函数?
- Untiy Shader电流效果的实现。吼吼。。。
- untiy实现图片的上传和下载
- untiy射线(简单追踪的实现)
- android一个应用如何在一个手机上装多个不同版本的方法
- 如何在一个工程里面实现不同的功能打入不同的日志文件中【log4net】
- LintCode 36 翻转链表 II
- 2017/4/23学习python笔记
- 写在前言--我的博客搭建之路
- MVC页面常见的三种传值方式
- 腾讯云Tomcat配置SSL证书
- 【Untiy&对象】如何实现一个Prefab立方体的6个面不同图案
- 臻于完美的妻子
- Head First 设计模式(九)迭代器与组合模式
- 4月英语的收获
- UI延迟
- poj 1276 (完全背包二进制转化01背包)
- P1118 数字三角形
- ListView和SQLite数据库案例--商品展示
- win7远程桌面连接设置