我正在尝试将我单击的对象实例添加到控件对象的列表中。但是,当我这样做时,它表示引用未设置为对象的实例。我必须在控件对象上实例化列表的代码是:
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
答案 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
是正确的游戏对象,或者selected
是null
哪个不应该发生你像你发布的那样初始化它......