Unity - 当角色的生命值降低时,如何将屏幕变为红色?

时间:2016-08-03 01:35:29

标签: c# image monodevelop unity5 alpha

因此,我正在为学校制作一个Unity C#剧本,根据播放器目前的健康状况,该剧本应该将屏幕淡出红色,但我遇到了问题。

我有一个图像组件的引用(在这个脚本附加到的游戏对象上找到),并且当玩家的健康状况达到较低级别时,alpha会增加。

以下是我已尝试的内容:

  • 使用MonoDevelop检查bloodLossAlpha和healthSlider.value(值已正确设置)
  • 创建UI图像游戏对象而不是使用组件,然后修改代码以使用自定义标记搜索游戏对象,而不是搜索组件。

我想知道是否有人可以告诉我我做错了什么。

    Slider healthSlider;
    Image bloodLossImage;
    float bloodLossAlpha;

    // Use this for initialization
    void Start () {
        bloodLossImage = GetComponent<Image>();
        healthSlider = GetComponentInChildren<Slider>();
        bloodLossAlpha = bloodLossImage.color.a;
    }

    // Update is called once per frame
    void Update () {

        float currentHealth = healthSlider.value;

        if (currentHealth <= 100 && currentHealth >= 76) 
        {
            bloodLossAlpha = 0f;
        } 
        else if (currentHealth <= 75 && currentHealth >= 51) 
        {
            bloodLossAlpha = 47f;
        } 
        else if (currentHealth <= 50 && currentHealth >= 26) 
        {
            bloodLossAlpha = 94f;
        } 
        else
        {
            bloodLossAlpha = 141f;
        }
      }

1 个答案:

答案 0 :(得分:0)

我无法访问你的场景,所以你的currentHealth变量,但淡入淡出的动画对我有用,所以希望这会给你一个很好的起点@PierreGravelle。 我的代码:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class test : MonoBehaviour {

// Update is called once per frame
void Update () {
    Color img = gameObject.GetComponent<Image> ().color;
    img.b = Mathf.Lerp (img.b, 0, Time.deltaTime);
    img.g = Mathf.Lerp (img.g, 0, Time.deltaTime);
    gameObject.GetComponent<Image> ().color = img;
    }
}

mathf.lerp行在img.b或g和0之间插入一个Time.DeltaTime因子。我在画布图像上使用此代码进行测试。您收到的错误是因为您没有Color变量,所以它不会让您访问颜色。而是通过添加Color img并在我们进行更改后更新,我们可以确保颜色将更新。