首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity2d新手代码错误ReferenceProblem

Unity2d新手代码错误ReferenceProblem
EN

Stack Overflow用户
提问于 2021-08-07 11:03:38
回答 3查看 48关注 0票数 0

我只是想从不同的脚本中检索字符串的值。试图在selectedElement中获取script1的值。

Script1:

代码语言:javascript
复制
public class ElementSelector : MonoBehaviour
{
    public Dropdown dropdown;
    public string selectedElement;
    public List<string> element = new List<string>();

    void Start()
    {
        dropdown.GetComponent<Dropdown>();
        dropdown.options.Clear();

        element.Add("Top");
        element.Add("Bottom");
        element.Add("Outlines");

        foreach (var item in element)
        {
            dropdown.options.Add(new Dropdown.OptionData() { text = item });
        }

        dropdown.onValueChanged.AddListener(delegate { DropdownElementSelected(dropdown); });  
    }

    public void DropdownElementSelected(Dropdown dropdown)
    {
        CurrentElement();
    }

    public string CurrentElement()
    {
        selectedElement = element[dropdown.value];
        return selectedElement;
    }

}

Script2:

代码语言:javascript
复制
public class Paint : MonoBehaviour
{
    public string element;

    public void SetColor()
    {
        
        element = GetComponent<ElementSelector>().selectedElement;
        Debug.Log("thefuck: " + element);         
        
    }
}

很长一段时间以来,我一直在努力理解,有一天,我遇到了一个非常类似的问题,但9个小时后,我意识到我需要将一个东西拖到Unity中的一个东西上,这就是引用问题。然而,现在我不认为我有一个物理游戏的组成部分可参考?

我只想要那个该死的字符串值..。

更新!

现在我从变量中得到了值。所以我现在已经把它放在了我的画图类中的一个字符串变量中,但是我再次陷入了行后的引用错误。

这是我的等级的截图

这对我来说很奇怪,甚至考虑到你们教过我组件和游戏,就像我看到的那样,现在我有一个字符串中的值,在我试图推开它的那个该死的类中。

在下面的内容中,如果我将“底部”替换为elementSelector的值,它的值为“底部”(测试和工作),这将给我一个参考错误。

代码语言:javascript
复制
if (create.GraffitiLetters.Count > 0)
        {
            for (int i = 0; i < create.GraffitiLetters.Count; i++)
            {
                string elementSelector;
                elementSelector = FindObjectOfType<ElementSelector>().selectedElement;
              
                GameObject barn = create.GraffitiLetters[i].transform.Find("bottom").gameObject;
                barn.GetComponent<SpriteRenderer>().color = colorPicker.GetColor();
                
            }
        }
EN

回答 3

Stack Overflow用户

发布于 2021-08-07 12:12:55

在“统一”中,您有GameObjects和组件。创建脚本时,从MonoBehavior继承。然后将该脚本分配给一个GameObject。然后,这个MonoBehavior是GameObject上的一个组件。

因此,您有一个GameObject,我们将其命名为MyMenuObject,然后将ElementSelector脚本分配给它。ElementSelector现在是MyMenuObject的一个组件。在SomethingMenu类中,您还可以访问GameObject,例如GameObject thisObject = this.gameObject

现在你有了油漆类,它也是一个组件。因此,您的绘图脚本需要添加到GameObject中。现在,您的画图类正在通过GetComponent访问另一个组件。因此,您要从指定了画图脚本的ElementSelector GameObject中请求该组件。

因此,您需要确保将两个脚本分配给同一个GameObject。

票数 0
EN

Stack Overflow用户

发布于 2021-08-07 12:56:27

谢谢各位,这对我来说还是很抽象的,但我现在知道要找什么了。这是否与参考问题相同?我设法从原来的问题中获得了值,并将其转换为Jaimim,但就在下一个引用错误之后。

代码语言:javascript
复制
string elementSelector;
elementSelector = FindObjectOfType<ElementSelector>().selectedElement; 

这个很管用。明白了。现在在我的油漆课上成了一根绳子。现在我有了这个东西,它可以画出我的一部分。

代码语言:javascript
复制
GameObject barn = create.GraffitiLetters[i].transform.Find("bottom").gameObject;
barn.GetComponent<SpriteRenderer>().color = colorPicker.GetColor(); 

这是可行的,但是如果我用elementSelector的值替换“底部”,这是一个引用错误。那怎么可能。现在我在同一个该死的类中,它仍然调用一个引用问题。对不起,如果我太厚了,这对我来说就像团结的第三天。

票数 0
EN

Stack Overflow用户

发布于 2021-08-07 15:52:06

问题解决了。

实际上,我不知道我是怎么做到的,我做了很多不同的尝试,这一切似乎都是以前的方式,当我得到错误,所以不能说它是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68691801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档