Files
ScienceLab.Density/Assets/Scripts/Lesson_1/SatelliteOrbit.cs
2026-06-04 00:55:54 +03:00

81 lines
2.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using UnityEngine;
public class SatelliteOrbit : MonoBehaviour
{
[Tooltip("Точка, навколо якої обертається супутник")]
public Transform center;
[Tooltip("Радіус орбіти")]
public float radius = 5f;
[Tooltip("Швидкість зміни кута в градусах за секунду")]
public float angularSpeed = 50f;
[Tooltip("Чи дивитись супутнику на центр під час руху")]
public bool lookAtCenter = false;
private float angleTheta; // горизонтальний кут (навколо Y)
private float anglePhi; // вертикальний кут (від 0 до 180)
void Start()
{
radius = Random.Range(300, 600);
angularSpeed = Random.Range(5, 25);
lookAtCenter = true;
if (center == null)
{
GameObject go = new GameObject("OrbitCenter");
go.transform.position = Vector3.zero;
center = go.transform;
}
// Випадкові початкові кути для різних напрямків руху
angleTheta = Random.Range(0f, 360f);
anglePhi = Random.Range(0f, 180f);
UpdatePosition();
}
void Update()
{
// Змінюємо кути для створення сферичної орбіти
angleTheta += angularSpeed * Time.deltaTime; // обертання навколо Y
anglePhi += angularSpeed * 0.5f * Time.deltaTime; // нахил вгору/вниз
if (angleTheta > 360f) angleTheta -= 360f;
if (anglePhi > 360f) anglePhi -= 360f;
UpdatePosition();
if (lookAtCenter)
transform.LookAt(center.position);
}
private void UpdatePosition()
{
float thetaRad = angleTheta * Mathf.Deg2Rad;
float phiRad = anglePhi * Mathf.Deg2Rad;
// Сферичні координати → декартові
float x = radius * Mathf.Sin(phiRad) * Mathf.Cos(thetaRad);
float y = radius * Mathf.Cos(phiRad);
float z = radius * Mathf.Sin(phiRad) * Mathf.Sin(thetaRad);
transform.position = center.position + new Vector3(x, y, z);
}
}