首页 > 解决方案 > 限制用户可以绘制和擦除的行数

问题描述

我有一个允许用户画线的代码。
问题是我不知道如何将用户可以创建的行数限制为一条,以及如何删除它以便用户可以重试。

public GameObject linePrefab;
public GameObject currentLine;

public LineRenderer lineRenderer;
public EdgeCollider2D edgeCollider;
public List<Vector2> fingerPositions;

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]) > .1f)
        {
            UpdateLine(tempFingerPos);
        }
    }
}

void CreateLine()
{
    currentLine = Instantiate(linePrefab, Vector3.zero, Quaternion.identity);
    lineRenderer = currentLine.GetComponent<LineRenderer>();
    edgeCollider = currentLine.GetComponent<EdgeCollider2D>();
    fingerPositions.Clear();
    fingerPositions.Add(Camera.main.ScreenToWorldPoint(Input.mousePosition));
    fingerPositions.Add(Camera.main.ScreenToWorldPoint(Input.mousePosition));
    lineRenderer.SetPosition(0, fingerPositions[0]);
    lineRenderer.SetPosition(1, fingerPositions[1]);
    edgeCollider.points = fingerPositions.ToArray();
}

void UpdateLine(Vector2 newFingerPos)
{
    fingerPositions.Add(newFingerPos);
    lineRenderer.positionCount++;
    lineRenderer.SetPosition(lineRenderer.positionCount - 1, newFingerPos);
    edgeCollider.points = fingerPositions.ToArray();
}

标签: c#unity3d

解决方案


这段代码怎么样:

void Update()
{
//--- some code here.
    if (Input.GetMouseButtonDown(0))
    {
        if(CanDrawLine)  //Checking if allowed to create line
           CreateLine();
    }
    if (Input.GetMouseButton(0))
    {
        if(CanDrawLine)  //Checking if allowed to create line
        {
            Vector2 tempFingerPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            if (Vector2.Distance(tempFingerPos, fingerPositions[fingerPositions.Count - 1]) > .1f)
            {
                UpdateLine(tempFingerPos);
            }
        }
    }
//--- some code here
}

[SerializeField]
int m_maxCountToCreate = 10;
int m_numberOfLinesCreated = 0;

bool CanDrawLine
{
   get { return m_numberOfLinesCreated == m_maxCountToCreate; }
}


void CreateLine()
{
    m_numberOfLinesCreated++;
    // your code here.
}

推荐阅读