Unity如何实现材质按照实际比例覆盖/延伸

今天上司指派了一个新任务,要求材质按照实际比例覆盖上物体,即如果有一块10X10的玻璃,但是贴图是1X1,那么贴图则需要100份,如果贴图是10X10,那么只要贴图左下角的那一部分。
解决方法:

  1. 如果用的是Image组件 ,那么操作将会特别简单,只需要先将贴图的 Texture Type改为Sprite,然后把精灵作为Image的数据源,然后将Image组件的Image Type改为Tiled即可,此时自由改变Image组件的大小,发现变大时贴图增加渲染的部分,变小则减少渲染的部分;
    变大时:
    变小时:
  2. 用的不是Image组件,而是其他组件,此时则需要通过material组件赋予其材质,material中有一个shader选择,我们选择Unlit/Texture,通过改变Tiling中的X数值和Y数值决定渲染的数量,其中X控制的是横向,Y轴控制的是纵向,值是多少,就代表渲染多少个贴图(材质);
    这里我们拿Cube举例。
    先将图片精灵给材质,然后将材质给Cube,效果如下:每个面只渲染了一个。
    现在我们尝试改变一下material中的shader材质中的Tiling属性,将X改为2,Y改为0.5,效果如下:Y轴只显示一半没有问题,但是X轴应该显示两个,但是却只显示了一个。
    这是因为我们没有将图片精灵的Wrap Mode改为Repeat,改完之后就显示就正常了
    假设Cube每个面是10X10,但是贴图只有1X1,将Tiling的X和Y分别改为10,效果如下:
    这种方法需要通过代码拿到需要渲染的物体与材质的宽高比,然后将比例给予Tiling,则可以正常显示,但是存在一个问题,如果多个物体同用一个材质,但是他们的尺寸又不一样,这就会导致数据混乱,接下来我们进入第三种方法,通过控制uv值一劳永逸。
  3. 通过提前设置好UV值,避免多个物体共用一个材质起冲突;
    简单说一下我对UV的理解,U就是要渲染的横轴方向,V就是要渲染的纵轴方向,W是Z轴(这里暂不讨论),通常取值在0~1,设置好需要渲染物体的UV与材质的UV即可进行比对。
    此时我们即可利用这一点,设置一个标准单位,此处拿米距离,需要渲染的物体UV都设置为10,代表十米,材质UV设置为1,代表一米,那么则需要一百个去覆盖(渲染)。
    此时并没有改变material(材质)shader中的Tiling,而是unity编辑器自动进行匹配。
    代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MeshUvTest : MonoBehaviour {private List<Vector3> points = new List<Vector3>();void Start () {points.Add(new Vector3(0, 0, 0));points.Add(new Vector3(0, 3, 0));points.Add(new Vector3(3, 3, 0));points.Add(new Vector3(3, 0, 0));MeshDrawQuad();}void MeshDrawQuad(){//新建一个MeshMesh quadMesh = new Mesh();//把顶点的集合赋值给Mesh的顶点组quadMesh.vertices = points.ToArray();//设置quad顶点数量,画quad相当于画两个三角形int[] quadPoints = new int[6];quadPoints[0] = 0;quadPoints[1] = 1;quadPoints[2] = 3;quadPoints[3] = 3;quadPoints[4] = 1;quadPoints[5] = 2;//把Quad的数量(顺序)给Mesh的三角计数quadMesh.triangles = quadPoints;//添加uv的参数设置Vector2[] uvs = new Vector2[points.Count];uvs[0] = new Vector2(0, 0);uvs[1] = new Vector2(0, 10);uvs[2] = new Vector2(10, 10);uvs[3] = new Vector2(10, 0);//把uvs信息赋值给QuadMesh.uvquadMesh.uv = uvs;GetComponent<MeshRenderer>().material.SetTextureScale("_MainTex", new Vector2(1, 1));//设置quad的相关参数quadMesh.RecalculateBounds();quadMesh.RecalculateNormals();quadMesh.RecalculateTangents();//把设置Quad的相关参数的Mesh赋值给MeshFilter组件GetComponent<MeshFilter>().mesh = quadMesh;}
}

到此即可完成上司交给我的要求。
关于画图的逻辑与UV的逻辑此处暂不讨论,刚入职对这些也不懂,暂时是和画图中XY的值设置为一样。
[Demo小案例] (https://download.csdn.net/download/qq_40629631/12308330)
ps:这里是刚入职的U3D萌新一只,日常中遇到问题记录一下解决方法,上述内容全是个人实践总结的经验,拿出来和大家分享一下,不一定对。如果有错还请多多指教。

Unity如何实现材质按照实际比例覆盖/延伸相关推荐

  1. Unity 模型导入材质丢失解决方案

    Unity 模型导入材质丢失解决方案 1.模型导入材质丢失解决方案 步骤如下: 1.打开材质球 2.,反射率和法线贴图分别赋值,即下面的两个物体对号入座 3.渲染成功 2.3d人物模型材质丢失 步骤如 ...

  2. Unity中利用材质自发光实现物体闪烁效果

    Unity中利用材质自发光实现物体闪烁效果 补充:这种方法有一点问题,在测试(Windows平台)的时候发现,要想在Build出来的游戏中实现闪烁效果,就必须在 Project 窗口中将源材质的自发光 ...

  3. 小功能⭐️Unity中利用材质自发光实现物体闪烁效果

    文章目录 本文基于VDer的文章<Unity中利用材质自发光实现物体闪烁效果>延伸开发 在实现了具有一个Material的物体闪烁发光之后,延伸开发了具有多个Material的自闪烁效果, ...

  4. unity地面添加材质球_unity自带材质球

    Unity5中重点推出了一套基于物理的着色(Physically Based Shading,PBS)的多功能Shader,叫做标准着色器(Standard Shader).这套Shader的设计初衷 ...

  5. Unity 自动创建材质球工具

    一个新的模型导入Unity,所有的材质都是绑定的不能修改,想调材质就只能一个个的去创建再拖贴图,想搞个工具一键创建材质并且上好贴图.百度了一下,这玩意靠谱的也是没几个,自己写一个吧. 这个稍微靠谱点, ...

  6. Unity 3D 物理引擎简介 || Unity 3D 物理材质|| Unity 3D 力(AddForce)

    Unity 3D 物理引擎简介 早期的游戏并没有强调物理引擎的应用,当时无论是哪一种游戏,都是用极为简单的计算方式做出相应的运算就算完成物理表现,如超级玛丽和音速小子等游戏. 较为常见的物理处理是在跳 ...

  7. Unity批量替换材质 URP项目

    Unity批量替换材质 URP项目 笔者此刻写文章的时候对Shader仅限于能看懂,以及Unity的shader和hlsl可以互相调用都是才了解,现在的需求是批量替换旧Shader至新Shader. ...

  8. 3DMAX模型导出到Unity之中如何确保材质不丢失

    3DMAX模型导出到Unity之中如何确保材质不丢失 解决方法 3dsMax中模型和贴图采用统一命名,贴图文件拷贝到Unity项目中,然后再导入fbx,就会为自动创建的材质找到对应贴图了.

  9. Unity 自定义自发光材质 shader (对比Standard Eimission)

    自定义自发光shader的时候会遇到 同样的HDR 颜色,但是standard表现正常而自己写的shader不正常的情况. 原因是因为Bloom效果是基于 standard的泛光材质调的,而自己写的E ...

最新文章

  1. c++结构体定义和使用_【C语言更新】结构体的定义及使用
  2. 惊天大谎:让穷人都能上网是Facebook的殖民阴谋?
  3. where field in
  4. aix服务重启mysql_mysqld进程几分钟重启一次,如何解决?
  5. spring java code配置_Spring-09-使用Java的方式配置Spring
  6. restify mysql_[菜鸟试水]关于Nodejs搭建后台API服务(Mysql-Restify)[下]
  7. Web前端文档阅读笔记-vis.js动态添加节点(vue cli环境)
  8. linux安装qq_体验一下,看看 Linux 系统中的 QQ 是什么样子的
  9. 餐饮店楼梯空间的设计方案
  10. 在沈阳存款多少可以不用工作?
  11. django模型_Django模型
  12. 无领导小组讨论(LGD)九大经典案例3
  13. 我的web前端工作日记2------web前端工作的一天
  14. 现代版的———项链 :(  转
  15. 启蒙教师周志华亲自讲解,机器学习视频课上线了
  16. Python Tkinter——数字拼图游戏
  17. 职场上思路不清楚的人有多可怕
  18. 奇偶校验(Parity Check)
  19. Pytorch常用张量变换操作
  20. linux查看邮件服务状态,利用mail实时监测服务器程序状态

热门文章

  1. 云栖探馆,看看有哪些黑科技
  2. 辗转相除法与更相减损术(求最大公约数)
  3. springboot整合springsecurity时出现了localhost将您重定向次数过多 循环地址错误解决
  4. 卷积LSTM网络应用于时空序列预测
  5. 微信小程序里的request:ok的坑
  6. CISA国内IT审计行业的“上岗证”
  7. (附源码)springboot福佳生活超市进销存管理系统 附源码261620
  8. 点卯.时空克隆(三维视频融合)旗舰版最新发布上线,两代技术产品,一代基于纹理技术,二代基于三维投影技术;用户攻略宝典免费拿走,有手就会!
  9. Python的安装教程
  10. 微信能自定义“撤回消息”? QQ 笑了!