@KeanuCharlesReeves

Как в unity 2d сделать прыжок по траектории?

Нужно сделать так, чтобы игрок мог джойстиком направить траекторию, по которой будет направлен прыжок персонажа. Например, как рогатка в злых пиццах.
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Ezekiel4
Охотник на пиратов и сборщик монолитов
У вас есть позиция персонажа. Джойстиком вы задаёте угол и, возможно, силу прыжка. Далее используйте формулу
x = x0 + v*t + 1/2*a*t^2.

Киньте этот скрипт на объект с LineRenderer и посмотрите как он устроен.
using UnityEngine;

public class TrajectoryRenderer : MonoBehaviour {

	public LineRenderer lineRenderer; // Ссылка на LineRenderer, который будет отображать траекторию
	public Transform launchPoint; // Точка запуска
	public float launchForce = 10f; // Сила запуска
	public int resolution = 30; // Разрешение линии (количество точек)

	private void Update() {
		Vector3[] points = new Vector3[resolution];
		lineRenderer.positionCount = resolution;

		float launchAngle = Mathf.Deg2Rad * launchPoint.eulerAngles.z; // Угол запуска в радианах
		Vector2 launchVelocity = launchForce * new Vector2(Mathf.Cos(launchAngle), Mathf.Sin(launchAngle)); // Начальная скорость

		for (int i = 0; i < resolution; i++) {
			float time = i / (float) resolution;
			points[i] = CalculatePosition(time, launchVelocity);
		}

		lineRenderer.SetPositions(points);
	}

	Vector3 CalculatePosition(float time, Vector2 launchVelocity) {
		// Вычисляем текущее положение с учётом гравитации
		// Формула: P = P0 + V0*t + 1/2*a*t^2
		// где P0 - начальное положение, V0 - начальная скорость, a - ускорение (гравитация), t - время
		Vector2 position = (Vector2) launchPoint.position + launchVelocity * time + 0.5f * Physics2D.gravity * time * time;
		return new Vector3(position.x, position.y, 0);
	}
}

* поворот задаётся поворотом самой точки запуска
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы