Как правильно добавить краевой коллайдер во время выполнения? - PullRequest
0 голосов
/ 13 февраля 2019

Я следовал этому уроку 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();
    }
}
...