Unity 如何更改单个物体的颜色-MaterialPropertyBlock
创作时间:
作者:
@小白创作中心
Unity 如何更改单个物体的颜色-MaterialPropertyBlock
引用
CSDN
1.
https://blog.csdn.net/weixin_46146935/article/details/139467444
在Unity开发中,有时需要更改场景中单个物体的颜色,但使用传统的gameObject.renderer.material.color方法会改变所有使用该材质的物体颜色。本文将介绍如何使用MaterialPropertyBlock来解决这一问题,实现对单个物体颜色的独立控制。
使用传统的gameObject.renderer.material.color=?无法更改单个对象材质的颜色,它会让所有附有该material的物体一起变更,因为material是共享的。
如何更改单个物体的颜色,而不更改使用该材质的所有其他对象的颜色呢?
可以通过脚本干净利落地解决,使用MaterialPropertyBlock :
Unity - Scripting API: MaterialPropertyBlock (unity3d.com)
https://docs.unity3d.com/ScriptReference/MaterialPropertyBlock.html它为每个物体提供单独的材质锁,以下是简单的随机颜色变更脚本,将随机颜色替换为指定颜色即可(注意,不同的material内的属性名称不同,这里“_BaseColor”表示URP的默认材质颜色):
using UnityEngine;
public class CargoDisplay : MonoBehaviour
{
public MeshRenderer cargoRenderer;
private MaterialPropertyBlock _propertyBlock;
private static readonly int CargoColor = Shader.PropertyToID("_BaseColor");
private void Start()
{
_propertyBlock = new MaterialPropertyBlock();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
SetRandomColor();
}
}
/// <summary>
/// random color
/// </summary>
private void SetRandomColor()
{
_propertyBlock.SetColor(CargoColor, UnityEngine.Random.ColorHSV());
cargoRenderer.SetPropertyBlock(_propertyBlock);
}
/// <summary>
/// change color to the given color
/// </summary>
/// <param name="color"> the color to change to</param>
public void SetCargoColor(Color color)
{
_propertyBlock.SetColor(CargoColor, color);
cargoRenderer.SetPropertyBlock(_propertyBlock);
}
}
通过上述代码,你可以轻松实现对单个物体颜色的独立控制,而不会影响使用相同材质的其他物体。
热门推荐
中国古村落:文化挖掘与旅游发展战略
浙江古村治理的“诸葛妙计”:“三治”融合 文脉传承
PostgreSQL数据库备份和恢复实战操作指南
股票分析基本功:市盈率与市净率详解
国家数据局评选:9个文化科技示范场景硬核案例
雪燕的功效与作用及食用方法
雪燕的功效与作用及食用方法
增程新能源车是什么?它的优势与工作原理解析
顶层房子隔热装修方法及注意事项
项目管理实习经历怎么写
复试在即,这4点请注意!
【科学故事会】天象仪的前世今生
变压器测试服务指南
中文网页用什么字体最合适
如何节省开支以提高生活质量?这种节省方法有哪些实用的小技巧?
笔记本屏幕如何快速切换到桌面?操作步骤是什么?
2025年属蛇缺什么五行如何根据五行补救
面粉厂粉尘浓度监测与预防全攻略
胆结石的症状与处理方法
吃中药几小时后能喝酒及喝酒后多久可以吃药
洁癖怎么治
探讨汉字“二”的拼音、声调与文化意义
孩子抽搐了,就一定是癫痫吗?
第三代抗癫痫药拉考沙胺:作用机制、适用人群及注意事项全解析
医疗机构疑难病会诊流程及制度详解
人肉搜索:定义、危害与防范措施
转录组研究全攻略——实验设计、结果挖掘、验证
一文搞懂扩散模型Diffusion Models
arccosx的定义域和值域_高中数学知识点解答
怎样向法院申请退诉讼费