我无法统一赋予游戏对象透明度

问题描述 投票:0回答:1

我复制了这个人所做的事情https://www.youtube.com/watch?v=ZfWEBJVWydo

我想提供透明度以使其看起来不错,但是发生了“无法修改‘material.color’的返回值,因为它不是变量”。

我还尝试给它一个新的RGB颜色,这样它就可以具有透明度,但仍然不起作用。

using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using UnityEngine;
using UnityEngine.ProBuilder.Shapes;
using Color = System.Drawing.Color;


public class Rainbow : MonoBehaviour
{
    private float effsped = 15;

    private float hue;
    private float sat=0.68f;
    private float bri = 1;
    private MeshRenderer MR;
    Color32 objcolor;
    // Start is called before the first frame update
    void Start()
    {
        MR = GetComponent<MeshRenderer>();
        hue = Random.Range(0f, 1f);
        MR.material.color = UnityEngine.Color.HSVToRGB(hue, sat, bri);


    }

    // Update is called once per frame
    void Update()
    {
        UnityEngine.Color.RGBToHSV(MR.material.color, out hue, out sat, out bri);
        hue += (effsped / 10000);
        if (hue >= 0.99f)
        {
            hue = 0f;
        }
        MR.material.color = UnityEngine.Color.HSVToRGB(hue, sat, bri, true);
        Color hastrancy = new Color(MR.material.color.r, MR.material.color.g, MR.material.color.b, 0.8f);
        MR.material.SetColor("_Color", hastrancy);

    }
}
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using UnityEngine;
using Color = System.Drawing.Color;


public class Rainbowinv : MonoBehaviour
{
    private float effsped = 15;

    private float hue;
    private float sat=0.68f;
    private float bri = 1;
    private MeshRenderer MR;
    // Start is called before the first frame update
    void Start()
    {
        MR = GetComponent<MeshRenderer>();
        hue = Random.Range(0f, 1f);
        MR.material.color = UnityEngine.Color.HSVToRGB(hue, sat, bri);

    }

    // Update is called once per frame
    void Update()
    {
        UnityEngine.Color.RGBToHSV(MR.material.color, out hue, out sat, out bri);
        hue -= (effsped / 10000);
        if (hue <= 0)
        {
            hue = 0.99f;
        }
        MR.material.color = UnityEngine.Color.HSVToRGB(hue, sat, bri) ;
        MR.material.color.a = 0.8f;
    }
}

这两个是每两个游戏对象的组件,这些是我的错误:

Assets\Scripts\Rainbowinv.cs(35,9):错误CS1612:无法修改“Material.color”的返回值,因为它不是变量

如何统一获取材质的 RGB 值?

MR.material.color.a 与 objColor 相同。但为什么这个答案有效?

Assets\Scripts\Rainbow.cs(38,31):错误 CS1729:“Color”不包含采用 4 个参数的构造函数

https://docs.unity3d.com/ScriptReference/Material.SetColor.html

那么为什么这会起作用?

Assets\Scripts\Rainbow.cs(39,40):错误CS1503:参数2:无法从“System.Drawing.Color”转换为“UnityEngine.Color”

这到底是什么意思?我以为使用

Color = System.Drawing.Color;
是一个可以防止错误的句子,但现在却导致了另一个错误!

unityscript
1个回答
0
投票

您无法直接编辑

Material.color
,只能为其分配新值。在您的情况下,您必须创建一个新的
Color
变量,更改值,然后将新颜色分配给您的材质:

Color newColor = UnityEngine.Color.HSVToRGB(hue, sat, bri);
newColor.a = 0.8f;
MR.material.color = newColor;
© www.soinside.com 2019 - 2024. All rights reserved.