因此,我正在为学校制作一个Unity C#剧本,根据播放器目前的健康状况,该剧本应该将屏幕淡出红色,但我遇到了问题。
我有一个图像组件的引用(在这个脚本附加到的游戏对象上找到),并且当玩家的健康状况达到较低级别时,alpha会增加。
以下是我已尝试的内容:
我想知道是否有人可以告诉我我做错了什么。
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;
}
}
答案 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并在我们进行更改后更新,我们可以确保颜色将更新。