当前位置: 首页 > news >正文

代码修改材质参数

1、 如何得到对象使用的材质

  • 获取到对象的渲染器Renderer

Mesh Renderer和Skinned Mesh Renderer都继承Renderer,可以用里式替换原则父类获取、装载子类对象

  • 通过渲染器获取到对应材质

可以利用渲染器中的material或者sharedMaterial来获取物体的材质,如果存在多个材质,可以使用renderer.materials或renderer.sharedMaterials来获取

material和sharedMaterial的区别

material:
material属性会返回对象的实例化材质, 相当于它会为对象创建一个该材质的独立副本,通过material属性修改材质时,这些更改只会影响这个特定对象,而不会影响使用相同材质的其他对象,使用material会增加内存消耗,因为每个对象都有自己独立的材质副本,但是可以单独修改单个对象

sharedMaterial:
sharedMaterial属性会返回对象的共享材质,相当于它返回的是所有使用这个材质的对象共享的同一个材质实例,通过sharedMaterial属性修改材质时,这些更改会影响所有使用这个材质的对象
使用sharedMaterial不会增加内存消耗,但是会批量修改所有使用该材质的对象

//sharedMaterial和material的区别
//sharedMaterial:一个是改一个都变
//material:一个是改一个不会影响其它使用相同材质球的对象
//得到主材质球
material = renderer.material;//renderer.sharedMaterial;
//得到所有的材质球
Material[] materials = renderer.sharedMaterials; //renderer.materials;

2、如何修改材质属性以及常用方法

颜色:材质对象中有color成员用于颜色修改
纹理:材质对象中有mainTexture成员用于主纹理修改
通用修改方式:材质中有各种Set方法,用于修改属性,通过传入属性名,以及对应值进行赋值
注意:属性值以SubShader中声明的属性名为准,而不是面板上的显示
修改Shader:调用材质中shader属性进行修改,利用Shader.Find(Shader名)方法得到对应Shader

// 修改颜色
material.color = color;
// 修改主纹理
material.mainTexture = Resources.Load<Texture2D>("路径");if(material.HasColor("_Color"))
{material.SetColor("_Color", color);print(material.GetColor("_Color"));
}if(material.HasFloat("_FresnelScale"))material.SetFloat("_FresnelScale", fresnelScale);//修改渲染队列
material.renderQueue = 2000;// 修改材质球使用的shader
material.shader = Shader.Find("Unlit/Lesson80_Fresnel");material.SetTextureOffset("_MainTex", new Vector2(0.5f, 0.5f));
material.SetTextureScale("_MainTex", new Vector2(0.5f, 0.5f));

http://www.lryc.cn/news/484108.html

相关文章:

  • [C++11] 包装器 : function 与 bind 的原理及使用
  • java项目-jenkins任务的创建和执行
  • 单片机中的BootLoader(重要的概念讲解)
  • 【数据分享】中国食品工业年鉴(1984-2023) PDF
  • 优选算法 - 1 ( 双指针 移动窗口 8000 字详解 )
  • FairyGUI和Unity联动(入门篇)
  • Go:文件输入输出以及json解析
  • 编写红绿起爆线指标(附带源码下载)
  • 设计模式(四)装饰器模式与命令模式
  • Android11 修改系统语言
  • vue3 查看word pdf excel文件
  • java八股-垃圾回收机制-垃圾回收算法,分代回收,垃圾回收器
  • iSCSI 和FC的概述
  • 一文了解Android中的AudioFlinger
  • 超全面!一文带你快速入门HTML,CSS和JavaScript!
  • C语言 | Leetcode C语言题解之第557题反转字符串中的单词III
  • 408笔记合集
  • 智慧医疗:纹理特征VS卷积特征
  • OPC学习笔记
  • 数据结构的时间复杂度和空间复杂度
  • HBase理论_背景特点及数据单元及与Hive对比
  • 生产模式打包
  • Vue的路由
  • Spring框架之策略模式 (Strategy Pattern)
  • 探索Google Earth Engine:利用MODIS数据和R语言进行2000-2021年遥感生态指数(RSEI)的时空趋势分析
  • 多商户中英双语电商系统设计与开发 PHP+mysql
  • 牵手App红娘专属1V1服务,打造贴心交友指导
  • 论文解析:边缘计算网络中资源共享的分布式协议(2区)
  • Android Osmdroid + 天地图 (一)
  • 浅谈:基于三维场景的视频融合方法