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);
}
}
* поворот задаётся поворотом самой точки запуска
using UnityEngine;
public class DynamicCircle : MonoBehaviour {
public SpriteRenderer spriteRenderer;
[Min(1)] public int textureWidth = 100;
[Min(1)] public int textureHeight = 100;
public Color defaultColor = Color.white;
private Texture2D _circleTexture;
private void Start() {
CreateCircleTexture();
}
private void CreateCircleTexture() {
_circleTexture = new Texture2D(textureWidth, textureHeight);
var center = new Vector2(textureWidth / 2, textureHeight / 2);
var radius = textureWidth / 2;
for (int y = 0; y < _circleTexture.height; y++) {
for (int x = 0; x < _circleTexture.width; x++) {
float distanceToCenter = Vector2.Distance(new Vector2(x, y), center);
if (distanceToCenter <= radius) {
_circleTexture.SetPixel(x, y, defaultColor);
} else {
_circleTexture.SetPixel(x, y, Color.clear);
}
}
}
_circleTexture.Apply();
spriteRenderer.sprite = Sprite.Create(_circleTexture, new Rect(0.0f, 0.0f, textureWidth, textureHeight), new Vector2(0.5f, 0.5f), 100.0f);
}
}
public static class PlatformChecker
{
public static bool IsMobilePlatform()
{
#if UNITY_EDITOR
return true;
#else
return Application.isMobilePlatform;
#endif
}
}
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;