Сохрани этот рецепт, когда понадобится рулетка, лутбокс или мини-игра с вращением. Сделаем быстро и без боли.
Идея: вращаем объект через
Transform.Rotate по заданному алгоритму — колесо сделает N полных оборотов + смещение до выигрышного сектора.1️⃣ Скрипт контролируемого вращения:
public class ControlledWheel : MonoBehaviour
{
public int totalSectors = 8;
public float spinDuration = 5f;
public int winSectorIndex = 0; // Индекс выигрышного сектора (считай с 0)
public void Spin()
{
float fullCircles = 3; // Количество полных оборотов перед остановкой
float sectorAngle = 360f / totalSectors;
float targetAngle = 360f * fullCircles + (sectorAngle * winSectorIndex);
StartCoroutine(SpinRoutine(targetAngle));
}
IEnumerator SpinRoutine(float targetAngle)
{
float elapsed = 0;
float startAngle = transform.eulerAngles.z;
while (elapsed < spinDuration)
{
float t = elapsed / spinDuration;
t = t * t * (3f - 2f * t); // SmoothStep для плавного замедления
float angle = Mathf.Lerp(startAngle, startAngle + targetAngle, t);
transform.rotation = Quaternion.Euler(0, 0, angle);
elapsed += Time.deltaTime;
yield return null;
}
// Точная остановка на выигрышном секторе
transform.rotation = Quaternion.Euler(0, 0, startAngle + targetAngle);
Debug.Log($"Выпал сектор: {winSectorIndex + 1}");
}
}
2️⃣ Как использовать:
• Укажи в
winSectorIndex номер выигрышного сектора (от 0).• Вызови метод
Spin() по нажатию кнопки.🔔 Подпишись — впереди еще больше готовых решений для твоего инди-проекта.
👉Akrus Games | Unity