我复制了这个人所做的事情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”的返回值,因为它不是变量
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;
是一个可以防止错误的句子,但现在却导致了另一个错误!
您无法直接编辑
Material.color
,只能为其分配新值。在您的情况下,您必须创建一个新的 Color
变量,更改值,然后将新颜色分配给您的材质:
Color newColor = UnityEngine.Color.HSVToRGB(hue, sat, bri);
newColor.a = 0.8f;
MR.material.color = newColor;