【问题标题】:How can I disable script in runtime?如何在运行时禁用脚本?
【发布时间】:2021-07-12 16:14:28
【问题描述】:

我有一个问题,gameobject.enabled 不起作用,我尝试了所有方法但无法解决,如果您能帮助我,我将不胜感激。以下是我写的脚本:

在此之前,非常感谢。

代码如下:

public class GenerarCartaAleatoria : MonoBehaviour
{
    public GameObject go, padre;
    
    string numSprite;
    int contador = 1;
    int contadorChild;
    int contadorOrder = 329;

    public void Generar()
    {
        string numRandom = Random.Range(1,36).ToString();
        int numLenght = numRandom.Length;

        if (numLenght == 1)
        {
            numSprite = "Sprites/000" + numRandom;
        }
        else if(numLenght == 2)
        {
            numSprite = "Sprites/00" + numRandom;
        }
        else if (numLenght == 3)
        {
            numSprite = "Sprites/0" + numRandom;
        }
        else if (numLenght == 4)
        {
            numSprite = "Sprites/" + numRandom;
        }

        GameObject spriteCosa = Instantiate(go);

        spriteCosa.transform.parent = padre.transform;

        GameObject cosasa = transform.GetChild(contadorChild).gameObject;

        cosasa.AddComponent<Image>();

        cosasa.GetComponent<GenerarCartaAleatoria>().enabled = false;

        cosasa.transform.SetSiblingIndex(0);
        
        cosasa.name = contador.ToString();

        cosasa.GetComponent<Image>().sprite = Resources.Load<Sprite>(numSprite);

        cosasa.GetComponent<RectTransform>().localScale = new Vector3(1,1,0);

        cosasa.GetComponent<RectTransform>().localPosition = new Vector3(-171, contadorOrder, 0);

        contador++;
        contadorChild++;
        contadorOrder += 100;
    }
}

我的层次结构:

【问题讨论】:

  • 我们无法调试代码图像。请编辑您的问题以实际提供文本形式的代码。
  • 只是一个旁注。在代码中使用非英语命名被认为是一种不好的做法。这让其他人更难理解代码的意图。
  • Nikkas,感谢您的建议
  • 不要使用script 标签。每个 SO 问题都以一种或另一种方式与脚本有关。这并不比添加code 作为标签更好。那个标签只是噪音,它过去被删除了,很快就会再次删除。

标签: c# unity3d boolean


【解决方案1】:

如果您尝试禁用游戏对象,则使用 gameObejct.SetActive(bool),其中 bool 为真或假。要关闭它,该行将是 yourGameObjectHere.SetActive(false) 或在您的情况下为 cosas.SetActive(false)

不过,我对您问题的措辞有些困惑。你写的 gameObject.enabled 不起作用。您的意思是 .enabled 不适用于您的组件吗?当您使用 .enable 时,它​​以组件为基础使用,因此它将禁用您正在查找的游戏对象上名为 GenerarCartaAleotoria 的组件。这是 .enabled = false 不起作用,这是你的问题吗?

【讨论】:

  • TEEBQNE 是的,我正在尝试禁用一个组件,抱歉我写得不好
  • 不用担心,只是想澄清一下。两个问题: 1. 你确定你用 GetChild 抓取了正确的游戏对象吗? 2. 到GetComponent这一行是否有空引用的错误?
  • Llama,完成,编辑问题并输入代码。
  • TEEBQNE,不,没有那个
  • 你能解释一下你想用你的代码做什么吗?从我所看到的情况来看,您正在随机生成一个从 1->35 的数字并将其转换为字符串,然后根据该长度,将 Resource 字符串引用设置为精灵。在此之后,您将实例化一个名为 go 的预制件并将其父级设置为 padre。然后,您将在 contradorChild 的子索引处获取对象所在脚本的子代。在此之后,您在此对象上设置各种数据,然后增加您的计数器。我相信您的 GetChild 获取了错误的对象,这导致了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2021-02-14
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
相关资源
最近更新 更多