【Untiy&对象】如何实现一个Prefab立方体的6个面不同图案



总结一下,实现的几个方法。


1.必须要在辅助的3D软件进行UV展开,比如说3Dmax maya。

只要在模型上显示图案都和UV有关联。(参考资料3)
2.使用代码对每个立方体,的6个面的材质进行替换。
3.用6个小方块替换1个大方块。
4.使用shader的双材质
5.六个面分别来一个plan之后赋予材质

------------------------------------------------

参考资料1的内容(避免内容404,分流)

实际测试效果图
【Untiy&对象】如何实现一个Prefab立方体的6个面不同图案_第1张图片

将此脚本放到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().mesh;
int[] triangles;
mesh.subMeshCount = 6;
this.gameObject.GetComponent().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().materials[0].color = Color.red;
this.gameObject.GetComponent().materials[1].color = Color.green;
this.gameObject.GetComponent().materials[2].color = Color.white;
this.gameObject.GetComponent().materials[3].color = Color.black;
this.gameObject.GetComponent().materials[4].color = Color.blue;
this.gameObject.GetComponent().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.

你可能感兴趣的:(Unity,Unity对象)