如何统一绘制多笔划线

时间:2014-08-21 15:01:18

标签: c# unity3d

在我的团结2D项目中,我希望能够绘制多行程..
正如我现在尝试的那样,我可以使用LineRenderer组件绘制unistroke线,就像绘制“C”或“S”字母一样。但是例如“A”或“X”字母表需要超过1个笔画(多笔画)并且我无法使用LineRenderer绘制它。因为LineRenderer存储点并将这些点与一条线连接起来,所以我们不能在外线中有断开的部分 你们有任何想法怎么做吗? 作为附加信息,我使用的是C#语言和Unity 4.5 Free。谢谢

这是我的Line Renderer配置:
Line Renderer Configuration

这是我的“C”和“A”字母的结果示例,“A”是失败的一个:
A C

1 个答案:

答案 0 :(得分:3)

所以,我得到了一个问题的答案 要在Unity中绘制多笔画线,我需要将每个笔画(每个连续线)作为一个线渲染器。这是制作" A" 2冲程:
Illustration

要团结一致:
第一步,为每个LineRenderer制作一个预制件,并为其指定一个唯一的标签。需要此标签可在不需要时删除预制件。在这个例子中,我给出了#34; LineDraw"预制件的标签 Prefabs

第二步,创建一个空的gameObject并附加脚本以检测Mouse Down事件。在这个例子中,我使用鼠标左键单击创建笔划线,单击鼠标右键清除所有线条。

public class TestLineRenderer : MonoBehaviour {
public GameObject lineDrawPrefabs; // this is where we put the prefabs object

private bool isMousePressed;
private GameObject lineDrawPrefab;
private LineRenderer lineRenderer;
private List<Vector3> drawPoints = new List<Vector3>();

// Use this for initialization
void Start () {
    isMousePressed = false;
}

// Update is called once per frame
void Update () {
    if(Input.GetMouseButtonDown(1))
    {
        // delete the LineRenderers when right mouse down
        GameObject [] delete = GameObject.FindGameObjectsWithTag("LineDraw");
        int deleteCount = delete.Length;
        for(int i = deleteCount - 1; i >= 0; i--)
            Destroy(delete[i]);
    }

    if(Input.GetMouseButtonDown(0))
    {
        // left mouse down, make a new line renderer
        isMousePressed = true;
        lineDrawPrefab = GameObject.Instantiate(lineDrawPrefabs) as GameObject;
        lineRenderer = lineDrawPrefab.GetComponent<LineRenderer>();
        lineRenderer.SetVertexCount(0);
    }
    else if(Input.GetMouseButtonUp(0))
    {
        // left mouse up, stop drawing
        isMousePressed = false;
        drawPoints.Clear ();
    }

    if(isMousePressed)
    {
        // when the left mouse button pressed
        // continue to add vertex to line renderer
        Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        if (!drawPoints.Contains (mousePos)) 
        {
            drawPoints.Add (mousePos);
            lineRenderer.SetVertexCount (drawPoints.Count);
            lineRenderer.SetPosition(drawPoints.Count - 1, mousePos);
        }
    }
}

}

完成了!