【问题标题】:Draw a Line on Canvas With Mouse Position Unity 3D使用鼠标位置 Unity 3D 在画布上绘制线条
【发布时间】: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&lt;Vector2&gt;()?
  • @TheBatman 是的,你是对的,但我只有一条不会随鼠标位置改变的水平线,而且他在世界空间中而不是在画布内,即使他在画布内等级制度!!
  • 本教程有多久了?自 Unity 3D 早期以来,Unity 和 C# 已经发生了很大变化,尤其是在过去 3 年左右的时间里。教程中的代码可能在今天的 Unity 中不再有效。如果可以,请尝试匹配教程使用的 Unity 版本或尝试找到更现代的教程(如果它实际上很旧)。否则我会在周末不上班的时候尝试一下,看看我是否能弄清楚这里发生了什么:)

标签: c# unity3d


【解决方案1】:

我的建议是先尝试绘制具有固定位置的线条渲染器(您可以添加两个空对象,然后在这些对象之间绘制线条渲染器)。 如果这行得通,然后用手指移动到逻辑。 请记住,如果您使用屏幕空间覆盖,则无法看到线渲染器,因此您必须使用 Canvas - World Space 才能在画布上看到它。

【讨论】:

    【解决方案2】:

    替换这个 私人名单FingerPositions; 有了这个

        private List<Vector2>  FingerPositions = new List<Vector2>();
    

    【讨论】:

    • 也许你可以提供一些额外的信息来说明为什么这会起作用。
    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    相关资源
    最近更新 更多