设备:Surface Pro 8
Unity编辑器版本:2021.3.11f1c2(LTS)
目录
引言
在开发中使用贴图的时候要做出重复平铺的效果。同时一个Shader要用在多个不同物体上面,要根据物体自动改变贴图的块数。(物体只支持Cube)
为这个提供一个大致的解决想法,只是完成了1*1大小比例的贴图,像铺地砖一样贴在物体上。
注:别人Unity萌新,如有差错望指出,谢谢。创作不易,求赞~
制作
1.创建Editor文件夹(必须,不然打包时会出问题)
2.在任意文件夹下创建一个名为MeshUv的C#脚本文件,并在文件中使用以下代码:
using UnityEngine;
public class MeshUv : MonoBehaviour
{
public void Applying()
{
//获得信息
Mesh mesh = new Mesh();
Vector3 Scale = transform.localScale;
#if UNITY_EDITOR
MeshFilter mf = GetComponent<MeshFilter>();
Mesh meshCopy = Mesh.Instantiate(mf.sharedMesh) as Mesh;
mesh = meshCopy;
#else
mesh = GetComponent<MeshFilter>().mesh;
#endif
//UV变量
Vector2[] uvs = new Vector2[mesh.uv.Length];
for (int i = 0; i < uvs.Length; i++)
{
uvs[i] = new Vector2(0, 0);
}
//依据信息改变变量
//x所对面
uvs[21] = new Vector2(0, Scale.y);
uvs[22] = new Vector2(Scale.z, Scale.y);
uvs[23] = new Vector2(Scale.z, 0);
//y所对面
uvs[4] = new Vector2(0, Scale.z);
uvs[5] = new Vector2(Scale.x, Scale.z);
uvs[9] = new Vector2(Scale.x, 0);
//z所对面
uvs[1] = new Vector2(Scale.x, 0);
uvs[2] = new Vector2(0, Scale.y);
uvs[3] = new Vector2(Scale.x, Scale.y);
//-x所对面
uvs[17] = new Vector2(0, Scale.y);
uvs[18] = new Vector2(Scale.