Unity - 当角色的生命值变低时,如何将屏幕变成红色?
Unity - How do I turn the screen red as my character's health gets low?
所以我正在为学校开发一个 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;
}
}
我无权访问您的场景和您的 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。我在 canvas 图像上使用此代码进行测试。您收到的错误是因为您没有 Color 变量,所以它不允许您访问颜色。而不是通过添加 Color img 并在我们做出更改后更新它,我们可以确保颜色会更新。
所以我正在为学校开发一个 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;
}
}
我无权访问您的场景和您的 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。我在 canvas 图像上使用此代码进行测试。您收到的错误是因为您没有 Color 变量,所以它不允许您访问颜色。而不是通过添加 Color img 并在我们做出更改后更新它,我们可以确保颜色会更新。