как ограничить и зажать расстояние между двумя точками в рендере Line 2 unity2d - PullRequest
0 голосов
/ 27 мая 2019

Я создаю игру, в которой вы можете щелкнуть по мячу и перетащить его, чтобы нарисовать средство визуализации линий с двумя точками и указать его в определенном направлении, а после отпускания я добавляю силу к шару, сейчас я просто хочу знать, как я могу ограничить расстояние между этими двумя точками, например, дать ему радиус.

You can take a look at here.

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Вы можете просто зажать его, используя Mathf.Min.

Поскольку вы не предоставили пример кода, к сожалению, вот пример кода, который я составил с простой плоскостью с MeshCollider, дочерним объектом с LineRenderer и камерой, установленной на Orthographic. Возможно, вам придется принять это как-то.

public class Example : MonoBehaviour
{
    // adjust in the inspector
    public float maxRadius = 2;

    private Vector3 startPosition;

    [SerializeField] private LineRenderer line;
    [SerializeField] private Collider collider;
    [SerializeField] private Camera camera;

    private void Awake()
    {
        line.positionCount = 0;

        line = GetComponentInChildren<LineRenderer>();
        collider = GetComponent<Collider>();
        camera = Camera.main;
    }

    // wherever you dragging starts
    private void OnMouseDown()
    {
        line.positionCount = 2;

        startPosition = collider.ClosestPoint(camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, transform.position.z)));

        var positions = new[] { startPosition, startPosition };

        line.SetPositions(positions);
    }

    // while dragging
    private void OnMouseDrag()
    {
        var currentPosition = GetComponent<Collider>().ClosestPoint(camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, transform.position.z)));

        // get vector between positions
        var difference = currentPosition - startPosition;

        // normalize to only get a direction with magnitude = 1
        var direction = difference.normalized;

        // here you "clamp" use the smaller of either
        // the max radius or the magnitude of the difference vector
        var distance = Mathf.Min(maxRadius, difference.magnitude);


        // and finally apply the end position
        var endPosition = startPosition + direction * distance;

        line.SetPosition(1, endPosition);
    }
}

Вот как это может выглядеть

enter image description here

0 голосов
/ 27 мая 2019

Я написал следующий псевдокод, который может вам помочь

float rang ;

Bool drag=true; 
GameObject ball;

OnMouseDrag () { 
if(drag) { 
//Put your dragging code here

}

if (ball.transform.position>range)
     Drag=false;
else Drage=true;

}
...