【问题标题】:Unity3d health bar GUI elementunity3d 健康栏 GUI 元素
【发布时间】:2016-01-28 02:14:32
【问题描述】:

我想使用我当前在 GUItext 中显示的信息创建一个健康栏。我想要的行为是让生命值随着时间的推移而减少(如倒数计时器),但每当玩家收集物体时就会增加少量。

这是我当前的代码:

using UnityEngine;
using System.Collections;

public class TimeText : MonoBehaviour {

    public GUIText timeText;
    //countdown
    public float timer = 99.00f;

    // Update is called once per frame
    void Update () 
    {
        timer -= Time.deltaTime*5;

        timeText.text = "Health: " + timer.ToString("0");

    }
}

这是我希望我的健康栏的样子:

【问题讨论】:

  • 您似乎在使用 Unity 非常古老的遗留“gui”系统。 不要使用它。只需使用普通的 Unity.UI 系统即可。这很容易。
  • 简单地使用 Invoke 或 InvokeRepeating。 google 1000s 的 QA
  • 在澄清问题后,这看起来像是将多个问题混为一谈:1)显示一个健康条图形,其大小与变化的数字相对应,2)在与特定类型/标签发生碰撞时增加健康对象(并可能破坏/停用对象)。仅针对第 1 部分,我建议使用 UI.Image 来显示健康栏,并更改其 fillAmount 变量。

标签: c# unity3d unity3d-2dtools guitext


【解决方案1】:

正如上面提到的@JoeBlow,请避免使用旧的 GUI 机制。它们超重、粗糙,对性能没有帮助。

@Serlite 为您解决了这个问题。这些就是你需要的。

对于健康栏,我建议使用 Unity UI 的 Image 组件。使用您想要的图像(可能与您在问题中发布的相同?)作为健康栏并根据您的timer 变量更改fillAmount(尽管就个人而言,我会将其重命名为“健康”来表示它的目的更好)。

看起来你已经注意到随着时间的推移降低生命值。 要增加生命值,请使用 Colliders 作为场景中的触发器,并在适当的对象上使用 OnTriggerEnter 或任何类似的默认单一行为方法。

我建议您阅读一些在线教程,以便您更好地了解 Unity 中的编程逻辑。希望对您有所帮助!

【讨论】:

  • 我同意 GUI 使用起来有点尴尬,但我从来没有读过任何关于 UI 比 GUI 更快的消息。可以给个来源吗?
  • 我有一个 unity3d 版本 4.5.1,但我没有任何 UI 图像。无论如何,添加或删除角色生命条的动画将如何工作?
  • @mar97 您是否考虑过更新您的 Unity 版本?在某些时候,有必要放弃 Unity 的遗留系统,因为它们确实会减慢您的开发速度。
  • @NikaKasradze 除了能够在编辑时看到 UI 元素以及向 UI 元素添加自定义脚本的能力之外,它还有助于提高性能,因为 UI 元素不需要每次都为它们调用方法单帧,不像旧的 onGUI 逻辑。他们唯一的电话来自他们收到的事件。
  • 感谢您的帮助。这是我在 UI 图像上的代码,我保持 GUIText 但不可见。我很满意。公共时间文本时间文本;图片 image = GetComponent(); image.fillAmount = Mathf.MoveTowards(timeText.timer/100,0f,Time.deltaTime*.5f);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多