首页 > 解决方案 > Unity RGB 发射颜色的变化仅在达到 0 时显示

问题描述

因此,经过一番谷歌搜索后,我想出了一些脚本来根据武器中剩余的弹药量来改变材料(武器侧面的一个小反应堆)的发射,以便它可以作为一个指标。

唯一的问题是发射颜色只有在达到 0 时才会发生明显变化。

我玩过它,但由于我对 C# 缺乏经验(我或多或少是新手),我不确定问题出在哪里。

这是我的代码,删掉了一点,所以它只是在每次更新时删除弹药,而不是在武器射击时删除(为了便于颜色更改,默认情况下弹药设置为 51):

   public Material reactor;

   public float ammo;

   Vector4 emit = new Color(0f, 255f, 0f, 1f);

   public void Update() {

     Renderer renderer = GetComponent<Renderer> ();

     reactor.SetColor ("_EmissionColor", emit);

     if (ammo >= 1) {

       ammo--;
       float emitchange = emit.y - 5f;
       emit = new Vector4(emit.x, emitchange, emit.z, emit.w);

       reactor.SetColor("_EmissionColor", emit);

     } else {

       Debug.Log("Ammo Empty");

     }
   }

出于某种原因,它只是拒绝显示发射的任何变化,直到 emit.y 达到 0,这意味着我没有得到我想要的效果。

我希望有人知道该怎么做,谢谢!

(我也将此发布到 Unity Answers,但在过去 24 小时内一直处于适度状态,所以我想我会带到这里,答案显然更容易)

标签: c#unity3drgb

解决方案


你使用了Color,它的成分是从 0.0 到 1.0 的浮点数。

但是你把它当作一个Color32来操作,它的分量是从 0 到 255 的整数。

虽然这两个可以隐式地相互转换,但要使其工作,您只需在此行中更改“颜色”:

Vector4 emit = new Color(0f, 255f, 0f, 1f);

...到“Color32”。


推荐阅读