Unity 如何更改单个物体的颜色-MaterialPropertyBlock

使用传统的gameObject.renderer.material.color=?无法更改单个对象材质的颜色,它会让所有附有该material的物体一起变更,因为material是共享的。

如何更改单个物体的颜色,而不更改使用该材质的所有其他对象的颜色呢?

可以通过脚本干净利落地解决,使用 MaterialPropertyBlock :

Unity - Scripting API: MaterialPropertyBlock (unity3d.com)icon-default.png?t=N7T8https://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);
    }
}

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bunny Chen

来啊来让我发家致富,一毛钱可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值