【问题标题】:How to draw multi-stroke lines in unity如何统一绘制多笔画线
【发布时间】:2014-08-21 15:01:17
【问题描述】:

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

这是我的线渲染器配置:

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

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    所以,我的问题得到了答案..
    要在 Unity 中绘制多笔画线,我需要将每个笔画(每条连续线)作为一个线渲染器。这是用 2 笔画“A”的插图:


    要团结一致:
    第一步,为每个 LineRenderer 制作一个预制件并为其分配一个唯一的标签。在不需要时删除预制件需要此标签。在此示例中,我为预制件提供“LineDraw”标签。


    第二步,创建一个空的游戏对象并附加脚本来检测鼠标按下事件。在此示例中,我使用鼠标左键单击创建笔划线,然后单击鼠标右键清除所有线条。

    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);
            }
        }
    }
    

    }

    完成了!

    【讨论】:

    • 您应该将自己的答案标记为已接受,这样问题就不会留在未回答的部分中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 2014-10-28
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多