【发布时间】:2022-04-26 17:09:33
【问题描述】:
我按照教程使用鼠标位置绘制一条线,这条线将在画布内绘制。但是运行它时,线没有画出来!它给了我这个错误:
NullReferenceException:对象引用未设置为对象的实例
我的代码有什么问题?
这是脚本:
public GameObject Line;
GameObject CurrentLine;
LineRenderer linerenderer;
private List<Vector2> FingerPositions;
public Canvas Can;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
CreateLine();
}
if (Input.GetMouseButton(0))
{
Vector2 tempfingerpos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (Vector2.Distance(tempfingerpos, FingerPositions[FingerPositions.Count - 1]) > 0.1f)
{
UpdateLine(tempfingerpos);
}
}
}
void CreateLine()
{
CurrentLine = Instantiate(Line, Vector3.zero, Quaternion.identity);
linerenderer = CurrentLine.GetComponent<LineRenderer>();
FingerPositions.Clear();
FingerPositions.Add(Camera.main.ScreenToWorldPoint(Input.mousePosition));
FingerPositions.Add(Camera.main.ScreenToWorldPoint(Input.mousePosition));
linerenderer.SetPosition(0, FingerPositions[0]);
linerenderer.SetPosition(0, FingerPositions[1]);
CurrentLine.transform.SetParent(Can.transform, false);
}
void UpdateLine(Vector2 NewFingerPos)
{
FingerPositions.Add(NewFingerPos);
linerenderer.positionCount ++;
linerenderer.SetPosition(linerenderer.positionCount - 1, NewFingerPos);
}
【问题讨论】:
-
哪一行报错了?
-
@TheBatman 这个:if(Vector2.Distance(tempfingerpos, FingerPositions[FingerPositions.Count - 1]) > 0.1f)
-
您需要先初始化FingerPositions才能使用它。您是否在
Start()方法中运行FingerPositions = new List<Vector2>()? -
@TheBatman 是的,你是对的,但我只有一条不会随鼠标位置改变的水平线,而且他在世界空间中而不是在画布内,即使他在画布内等级制度!!
-
本教程有多久了?自 Unity 3D 早期以来,Unity 和 C# 已经发生了很大变化,尤其是在过去 3 年左右的时间里。教程中的代码可能在今天的 Unity 中不再有效。如果可以,请尝试匹配教程使用的 Unity 版本或尝试找到更现代的教程(如果它实际上很旧)。否则我会在周末不上班的时候尝试一下,看看我是否能弄清楚这里发生了什么:)