【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);
}
}
}
------------------------------------------------

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