添加到另一个类的列表

时间:2014-04-21 05:14:20

标签: list class unity3d

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

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,转换和类。我想使用该类,以便我可以轻松访问变量。我已经在统一答案和论坛上发布了这个,但没有人在本周回复,我不喜欢在同一网站上重新发布相同的内容。

干杯,Scobbo

2 个答案:

答案 0 :(得分:0)

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

你需要替换

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

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

,因为

this 

是对脚本的引用,而不是GameObject。你也可以使用gameObject.transform,其变换只是

的缩写

答案 1 :(得分: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哪个不应该发生你像你发布的那样初始化它......