【技术记录】Unity正方体重复平铺材质

本文介绍如何在Unity中制作正方体贴图的重复平铺效果,通过理解UV坐标和法向量,结合C#脚本调整Cube的UV点布局,实现自动贴图。内容包括创建Editor脚本、调整材质球设置、理解UV坐标的意义以及法向量的作用。
摘要由CSDN通过智能技术生成

设备:Surface Pro 8

Unity编辑器版本:2021.3.11f1c2(LTS)

目录

引言

制作

原理

UV

法向

内置Cube的UV点布局

更改数值

编辑器


引言

在开发中使用贴图的时候要做出重复平铺的效果。同时一个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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值