Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用多个组件<;图像>;() ---- 公共级HPsc { 公共静态图像HP_条形图_绿色; 公共静态图像HP_Bar_Red;//允许我在Unity中初始化图像 私有void Start() { HP_Bar_Green=GetComponent(); HP_Bar_Red=GetComponent();//如何在启动时抓取图像 } }_C#_Unity3d - Fatal编程技术网

C# 使用多个组件<;图像>;() ---- 公共级HPsc { 公共静态图像HP_条形图_绿色; 公共静态图像HP_Bar_Red;//允许我在Unity中初始化图像 私有void Start() { HP_Bar_Green=GetComponent(); HP_Bar_Red=GetComponent();//如何在启动时抓取图像 } }

C# 使用多个组件<;图像>;() ---- 公共级HPsc { 公共静态图像HP_条形图_绿色; 公共静态图像HP_Bar_Red;//允许我在Unity中初始化图像 私有void Start() { HP_Bar_Green=GetComponent(); HP_Bar_Red=GetComponent();//如何在启动时抓取图像 } },c#,unity3d,C#,Unity3d,这两个变量都用HP_Bar_绿色填充。我怎样才能防止这种情况发生?为什么会发生这种情况 我已尝试附加此.GetComponent();我试着写一个IF语句来防止这种情况发生,但没有成功 public class HPsc { public static Image HP_Bar_Green; public static Image HP_Bar_Red; // Allows me to initialize the images in Unity private voi

这两个变量都用HP_Bar_绿色填充。我怎样才能防止这种情况发生?为什么会发生这种情况

我已尝试附加此.GetComponent();我试着写一个IF语句来防止这种情况发生,但没有成功

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

    private void Start()
    {
        HP_Bar_Green = GetComponent<Image>();
        HP_Bar_Red = GetComponent<Image>(); //How I grab the images upon startup
    }
}
if(HP\u-Bar\u-Red==HP\u-Bar\u-Green)
{
HP_Bar_Red=GetComponent();
Debug.Log(“红色”+HP\u条\u红色);
HP_Bar_Red.gameObject.SetActive(false);
}
感谢所有的帮助和建议!我真的被困在这里了

****更新****

我决定将HP_Bar_Red移动到EnemyDetection脚本。这样我就可以公开它,并通过脚本手动将其插入Unity inspector。但是,当我按PLAY时,图像从脚本字段中消失,但是它仍然出现在屏幕上。然后,当游戏处于游戏模式且脚本运行良好时,我可以将图像放回inspector上的字段中。那么,为什么这个形象不被接受呢

if (HP_Bar_Red == HP_Bar_Green)
{
    HP_Bar_Red = GetComponent<Image>();

    Debug.Log("RED "+HP_Bar_Red);
    HP_Bar_Red.gameObject.SetActive(false);
}
公共类EnemyDetection:单一行为
{
公共形象:红色;
私有void Start()
{
HP_Bar_Red=GetComponent();
Debug.Log(“红色”+HP\u条\u红色);
//HP_Bar_Red.gameObject.SetActive(false);
HP_Bar_Red.gameObject.SetActive(false);
}
}

您有多个
图像
组件连接到
游戏对象
正确吗

如果是这种情况,您需要使用并使用返回的
组件[]

public class EnemyDetection : MonoBehaviour
{
    public Image HP_Bar_Red;

    private void Start()
    {

        HP_Bar_Red = GetComponent<Image>();
        Debug.Log("RED " + HP_Bar_Red);

        // HP_Bar_Red.gameObject.SetActive(false);
        HP_Bar_Red.gameObject.SetActive(false);
    }
}
公共级HPsc
{    
私有组件[]_图像;
void Start()
{
Images=GetComponents();
}
无效更新()
{
//假设顺序正确,您还可以做一些
//用于搜索数组的id属性。
绿色变量=图像[0];
var red=图像[1];
//对图像做些处理。
}
}
使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 使用UnityEngine.UI; //确保该名称适合.cs文件名,并将该脚本添加到场景中的GameObejct中 公共类HPsc:单一行为 { 公共静态图像HP_条形图_绿色; 公共静态图像HP_条形图_红色; //将图像添加到场景-检查器中: 公众形象;绿色; 公众形象受损; 私人空间 { HP\u Bar\u Green=imgRed;//使它们可以通过静态变量访问 HP_条形图_红色=绿色; } //测试(在其他类中也可用): 私有void Start() { Debug.Log(HPsc.HP\u Bar\u Red!=null); } }
在您的情况下,最好正确命名GameObjects并使用GameObject.Find(“HP_Bar_Green”).GetComponent()@GameGenerator也可以工作。有一条错误消息说我无法使用即时引用访问;改为使用类型限定它。这意味着什么?您必须使用
公共类HPsc:monobhavior{…
并将此组件添加到场景中的游戏对象中。您还需要正确的使用方法。最佳方法:在unity中创建一个新脚本,在顶部使用UnityEngine.UI添加
。如果我将其公开为非静态,那么当我尝试继承其他脚本中的构造函数时,它会破坏我的代码。我的当前代码可以工作,减去一个变量而不是g设置放在变量中。必须有一些while循环或if语句,我可以将HP_BAR_Red强制放入变量中。它们是根据我将它们导入Unity的方式命名的。这两个图像实际上是我正在处理的游戏中的一个Healthbar。每个变量都对应于每个图像。问题是,它们都只得到了绿色条图像。我不知道如何使用Unity创建列表并填充它,但我现在将研究它。我使用GetComponent()动态捕获图像,因为我的变量设置为静态。我非常喜欢你的列表想法。谢谢!你不必继承MonoBehavior吗?GetComponent只适用于游戏对象脚本(MonoBehavior)正在运行。大体上,您可以在脚本中使用FindObjectsOfType(),FindObjectsOfType是用于列表的,不是吗?到目前为止,我必须获取组件()填充变量,然后将它们放入一个列表中。然后将它们拉出来。这里的问题是,如果我可以得到这两个图像,我就不需要列表lol。如果我可以使用公共非静态,这会更容易,但是由于我从另一个类继承它们,这在我当前的代码设置中不起作用。我不想废弃代码因为它在很大程度上起作用。
public class HPsc
{    
    private Component[] _images;

    void Start()
    {
        Images = GetComponents<Image>();
    }

    void Update()
    {
        // Assuming the order is correct, you could also make some sort of 
        // id property to search the array with.
        var green = images[0];
        var red = images[1];

        // Do something with the images.
    }
}
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //Make sure that the name fits to the .cs file name and add this script to a GameObejct in the scene public class HPsc : MonoBehaviour { public static Image HP_Bar_Green; public static Image HP_Bar_Red; //Add your images here in the scene - Inspector: public Image imgGreen; public Image imgRed; private void Awake() { HP_Bar_Green = imgRed; //Make them accessable over the static variables HP_Bar_Red = imgGreen; } //Test (also usable in another class): private void Start() { Debug.Log(HPsc.HP_Bar_Red != null); } }