隐藏健康吧直到敌人靠近C#

时间:2018-08-23 17:47:22

标签: c# unity3d hidden

我知道如何创建对撞机来检测标记为“敌人”的游戏对象。我也很熟悉使其成为isTrigger事件以及OnTriggerEnter()的功能。

我的问题似乎是从健康点脚本(HPsc)将图像读取到EnemyDetection脚本中。

在我的HPsc中,我已将我的HP映像(红色和绿色)声明并分配为公共静态映像HP_Green,HP_Red。因此,在我的EnemyDetection脚本中,我引用了这些HPsc.HP_Green.SetActive(True)和HPsc.HP_Red.SetActive(true)

但是,问题似乎在于SetActive是用于文本UI而不是用于Image? FadeIn()和FadeOut()在这里实际上可以替代吗?

HealthBar类:

public class HPsc
{
    public static Image HP_Bar_Green;
    public static Image HP_Bar_Red; // Allows me to initialize the images in Unity

    void Start()
    {
        HP_Bar_Green = GetComponent<Image>();
        HP_Bar_Red = GetComponent<Image>(); //How I grab the images upon startup
    }
}

敌人检测​​:

public class EnemyDetection
{
    void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Enemy1")
        {
            HpSc.HP_Bar_Green.SetActive(true);
            // This is DetectEnemy trying to grab the image from the other script.
        }
    }
}

*****解决方案#1 ***** HP_Bar_Green.gameObject.SetActive(true); – Fredrik Widerberg

只需将其中的gameObject串起来!谢谢大家!

******问题#2 ****** 好的,现在我的下一个代码问题是将两个图像都放入正确的变量中。

HP_Bar_Green = transform.GetChild(0).gameObject.GetComponent(); HP_Bar_Red = transform.GetChild(1).gameObject.GetComponent();

我试图确保每个变量只能包含其应该包含的内容。 .GetChild()看上去很吸引人,但是却引起了很多问题。编译器允许游戏开始运行,但是在5分钟内,我在编译器中堆积了20,000个相同的错误。

*****问题已解决*****

哈利路亚!

我将HP_Bar_Red移到了EnemyDetection脚本中。将其设为公共变量,然后将对象手动插入Unity inspector中。 (因为有人在这里推荐。谢谢大家!祝你幸福!)

2 个答案:

答案 0 :(得分:1)

因此,您正在尝试对SetActive()组件进行Image。 但是,SetActive()GameObject的一部分,可以在您的阶层中激活/停用GameObject

因此,您需要先获取GameObject,然后致电SetActive()

myImage.gameObject.SetActive(true);

如果您只想启用/禁用Image组件,则可以这样做

myImage.enabled = true;

答案 1 :(得分:0)

您需要使用以下命令将Image组件上的GameObject设置为活动或非活动状态

GameObject.SetActive(boolean)

或者您也可以这样做

HpSc.HP_Bar_Green.enabled = true/false;

班级:

public class EnemyDetection
{
    void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Enemy1")
        {
            HpSc.HP_Bar_Green.GameObject.SetActive(true);
            //or
            HpSc.HP_Bar_Green.enabled = true;
            // This is DetectEnemy trying to grab the image from the other script.
        }
    }
}

您可能会遇到HpSc.HP_Bar_Green静态的问题,因此,如果有多个敌人,您可能希望拥有一个获取HpSc组件并将其禁用的类。

public class EnemyDetection
{
    void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Enemy1")
        {
            HpSc healthBar = other.GetComponent<HpSc>();

            healthBar.GameObject.SetActive(true);
            //or
            healthBar.enabled = true;
        }
    }
}

非静态变量:

public class HPsc
{
    public Image HP_Bar_Green;
    public Image HP_Bar_Red; // Allows me to initialize the images in Unity

    void Start()
    {
        HP_Bar_Green = this.GetComponent<Image>();
        HP_Bar_Red = this.GetComponent<Image>();
    }
}