我试图将我单击的对象的实例添加到控件对象的列表中。 但是,当我这样做时,它表示未将引用设置为对象的实例。 我必须实例化控件对象上的列表的代码是:

public List<Transform> selected = new List<Transform>();

我尝试使用该单元所附的代码将其添加到该列表中:

if (!selected)
    {

       // Set selected state

       selected = true;

       // Add to Selected List

       control.GetComponent<ForwardCommandScript>().selected.Add(this.transform);

       // Set material colour brighter

       oldColour = gameObject.renderer.material.color;

       newColour = oldColour + new Color(0.2f, 0.2f, 0.2f);

       gameObject.renderer.material.color = newColour;

    }

我也尝试过转换。 稍后,我将尝试通过找到在实例化该单元时设置的参考ID来删除它,因此,如果我需要查找其变量,然后删除该脚本附带的游戏对象,那么我应该尝试添加脚本而不是对象。 我尝试了GameObject,transform和class。 我想使用该类,以便可以轻松访问变量。 我已经在统一的答案和论坛上发布了此内容,但是在启动的一周内没有人回答,我不喜欢在同一网站上发布相同的内容。

干杯,斯科布博

===============>>#1 票数:0

感谢您添加完整的错误消息:)

你需要更换

control.GetComponent<ForwardCommandScript>().selected.Add(this.transform);

control.GetComponent<ForwardCommandScript>().selected.Add(transform);

因为

this 

是对脚本的引用,而不是对GameObject的引用。 您也可以使用gameObject.transform,transform只是的缩写

===============>>#2 票数:0 已采纳

您的错误NullReferenceException: Object reference not set to an instance of an object表明关联行中的内容为null 由于错误消息没有指出哪一部分为null ,因此您必须拆分代码并检查哪一部分失败。

我不确定如何拆分,但是可以这样尝试:

var script = control.GetComponent<ForwardCommandScript>();
if (script == null) Debug.Log("script not found");
if (script.selected == null) Debug.Log("selected is null");
script.selected.Add(this.transform);

现在,您应该在引发异常之前在调试日志中获得两条消息之一。 找不到脚本,您必须检查脚本是否已正确分配给游戏对象,以及control是否是正确的游戏对象,或者selectednull ,如果您像发布的那样对其进行了初始化,则不会发生...

  ask by Scobbo translate from so

未解决问题?本站智能推荐: