如何在运行时正确添加边缘对撞机?

时间:2019-02-13 07:14:09

标签: c# unity3d scripting gameobject

我已按照本教程https://www.youtube.com/watch?v=pa_U64G7gkE在Unity 2d中创建线条绘制功能。

问题是预制件上有一个边缘碰撞器,当球碰到线时,球到达中心,而不是在线的顶部。就像重叠该行的上半部分一样。

这是下面的代码。我已经尝试过使用多边形对撞机,但是它没有起作用,或者我做得不正确。如果有人帮助我,我将不胜感激。

public class DrawLine : MonoBehaviour 
{
    public GameObject linePrefab;
    public GameObject currentLine;

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

    // Update is called once per frame
    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,Vector2.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();
    }
}

0 个答案:

没有答案