Небольшое задание на unity
Собственно нужно сделать простую игру.Есть мяч для гольфа и лунка. По нажатию кнопки над мячом от гольфа начинает прорисовываться траектория( точками, как в енгри бердс ), и как только кнопка отпускается то мяч начинает летет по этой траектории. Собственно вся проблема это отрисовать этот вектор, никогда раньше с ними не работал, так что буду рад любой помощи 
Ответы (1 шт):
Во-первых, не вектор, а траектория. Вектор полета мяча будет разный в каждой точке полета.
Во-вторых:
Код ниже сэмулирует простую физику(без учета сопротивления воздуха и тд). Если ты используешь физику, то реальная траектория может немного отличаться от расчетной, но по идее не должна сильно отличаться.
public class Ball : MonoBehaviour
{
[SerializeField] private float _speed = 20; // для примера
private Vector3 throwDir = (Vector3.right + Vector3.up).normalized; // просто для теста, удар под 45 гр
private Vector3 velocity;
private static readonly Vector3 gravity = new Vector3(0, -9.8f, 0);
private bool thrown = false;
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
velocity = _speed * throwDir;
thrown = true;
}
if (!thrown)
{
return;
}
velocity += gravity * Time.deltaTime; //△v = v0 + a△t
transform.position += velocity * Time.deltaTime;
}
}
Это должно дать тебе идею о том, что делать дальше. В твоем случае, тебе надо рассчитать положение мячика в пространстве с заданным (тобой) шагом по времени. Скорость в заданное время, в этом случае, должна быть V = _speed * throwDir - 9.8 * time. Положение в мяча в пространстве будет просто: pos = initialPos + V * time , где V это та скорость , которую ты рассчитал выше.
С той формулой позиции выше рассчитываешь положение мячика с нужным шагом времени, ну и создаешь спрайт мячика в каждой рассчитанной точке. Эти спрайты лучше класть в пул, чтобы потом заново использовать.
Вот можешь этот код запустить, чтобы было понятнее, что будет происходить, просто жми по пробелу несколько раз:
public class Ball : MonoBehaviour
{
[SerializeField] private float _speed = 20; // для примера
private Vector3 throwDir = (Vector3.right + Vector3.up).normalized; // просто для теста, удар под 45 гр
private Vector3 velocity;
private static readonly Vector3 gravity = new Vector3(0, -9.8f, 0);
private float time = 0;
private Vector3 initialPos;
private void Start()
{
initialPos = transform.position;
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
velocity = _speed * throwDir;
time += 0.1f; // шаг
velocity += gravity * time; //△v = v0 + a△t
transform.position = initialPos + velocity * time;
}
}
}
Если надо соединить эти спрайты линией, то уже потом можешь всякие LineRenderer`ы использовать.
Гифка, как работает . Мне было лень делать все полностью, но я думаю смысл дошел.