Praticamente stavo facendo un day night cycle che non sia frame rate dipendente. Ora: la rotazione non è un problema, è perfettamente regolare, il problema sorge nel calcolarmi effettivamente che ora sia nel gioco.
sto usando questo script (totalmente fatto da me):
Codice: Seleziona tutto
using UnityEngine;
using System.Collections;
//0.125 gradi di rotazione equivalgono a 1 minuto. Una rotazione globale di 90 equivale a mezzogiorno, 270 equivale a mezzanotte. 0 gradi è l'alba, 360 è il tramonto.
public class DayLightCycle : MonoBehaviour
{
#region Components
//Componenti automaticamente ricavati all'esecuzione dello script.
public GameObject SunLight;
public Transform SunTransform;
public Light LightComponent;
#endregion
#region H/M
//Variabili per l'orologio globale
public int Hour;
public int Minutes;
#endregion
#region Rotation constraint
//costanti di rotazione
public Vector3 MidnightStartDay = new Vector3(0, 0, 0);
public Vector3 MidnightEndDay = new Vector3(360, 0, 0);
public const float GradForMinute = 0.125f; //non modificare, usare la variabile time constraint per velocizzare lo scorrere del tempo.
#endregion
//Componente vector3 da applicare in rotazione.
private Vector3 RotationComponent;
//costante per regolare la velocita del tempo.
public float TimeConstraint = 1;
void Start () {
LightComponent = SunLight.GetComponent<Light>();
SunTransform = SunLight.GetComponent<Transform>();
}
#region Rotation
void Update()
{
//Interpolazione percentuale per la rotazione al secondo.
float PI = 0;
if (PI <= 0)
{
//aggiungo il tempo passato dall'ultimo frame moltiplicato per la costante dello scorrere del tempo il tutto fratot 10 (se qualcuno ha un metodo migliore, ben venga)
PI += (Time.deltaTime * TimeConstraint)/10;
RotationComponent = Vector3.Lerp(MidnightStartDay, MidnightEndDay, PI);
}
SunTransform.Rotate(RotationComponent);
Hour = ((int)SunTransform.eulerAngles.x) / 15;
Debug.Log(SunTransform.eulerAngles.x);
}
#endregion
é un giorno che mi ci sbatto la testa.