Unity 3D Animazione di un esagono

Stato
Discussione chiusa ad ulteriori risposte.
Ok ho fatto una cosa del genere
C#:
if (cRot == 0 || cRot == -360)
            finelivello.instance.onExagonComplete ();
     
        if (cRot == -60)
            finelivello.instance.onExagonBreak ();
l'ho inserito in SmoothRotation perché in IEnumerator se ruotavo velocemente prima che si concludesse la rotazione non assegnava i punti, nonostante questo però i punti non li assegna sempre, nel senso che la maggior parte delle volte appena la rotazione arriva a 0 aumenta un punto, ma a volte capita che uno o due esagoni, non appena arrivano a rotazione 0 non assegna il punto non capisco perchè, poi però se faccio ruotare di nuovo lo stesso fino a 0 lo assegna (anche se non sempre, a volte devo ripeterlo più di una volta). Ho impostato che gli esagoni partino sempre da una rotazione diversa da 0 in modo da non togliere punti erroneamente.
Prova a mettere anche un +360 gradi, a volte unity e' un po stro***:
C#:
if (cRot == 0 || cRot == -360 || cRot == 360)
            finelivello.instance.onExagonComplete ();
Pero' ti faccio notare che se a cRot assegni la rotazione iniziale dell'esagono salvo pochi casi, le 3 condizioni dell if non si verificheranno mai.
Ad esempio se cRot = 1, il giro completo sara' a 0+1, -360+1, 360+1.

Un altra cosa che ti consiglio di fare e' aggiungere un bool tipo:
C#:
bool hasAddedPoint = false;

//...
if ((cRot == 0 || cRot == -360 || cRot == 360 )&&!hasAddedPoint) // evita di aggiungere due volte lo stesso punto
{ 
       finelivello.instance.onExagonComplete ();
       hasAddedPoint = true;
}

//...

if(hasAddedPoint && /*condizione che fa annulare il completamento dell'esagono*/) // togli il punto solo se e' stato aggiunto in precedenza
{
       finelivello.instance.onExagonBreak ();
       hasAddedPoint = false;
}
 
Ok ho provato aggiungendo 360 ma il problema è lo stesso inoltre ho messo un Debug.Log di ExagonsCompleted e ho notato che quando non aggiunge il punto a rotazione 0 non lo toglie nemmeno a rotazione -60
 
Ok ho trovato il problema praticamente ho fatto in modo che la rotazione iniziale fosse un multiplo di 60 in modo casuale, per renderlo più vario l'ho moltiplicato per un numero primo, il problema è che quando quel numero è troppo alto mi ritrovo con un cRot uguale a 2040 o cose del genere e arrivando a rotazione 0 in realtà non è 0 né 360 ma numeri molto più alti. C'è un modo per mettere nell'if invece di cRot == 360\720 ecc qualcosa come k360?
 
Ok ho trovato il problema praticamente ho fatto in modo che la rotazione iniziale fosse un multiplo di 60 in modo casuale, per renderlo più vario l'ho moltiplicato per un numero primo, il problema è che quando quel numero è troppo alto mi ritrovo con un cRot uguale a 2040 o cose del genere e arrivando a rotazione 0 in realtà non è 0 né 360 ma numeri molto più alti. C'è un modo per mettere nell'if invece di cRot == 360\720 ecc qualcosa come k360?
Ti sei risposto da solo, basta che salvi da qualche parte il numero per cui hai moltiplicato all'inizio e poi:
C#:
if(/*bla bla bla*/ &&cRot == 360 * moltiplicatore )
 
Pensavo più a una costante tipo un numero qualsiasi dell'insieme N, perché dovrei inserire nello stesso script 360 * ognuno dei numeri che corrispondono al numero di esagoni presenti e alla lunga crea un casino.
 
Pensavo più a una costante tipo un numero qualsiasi dell'insieme N, perché dovrei inserire nello stesso script 360 * ognuno dei numeri che corrispondono al numero di esagoni presenti e alla lunga crea un casino.
allora prova con:
C#:
if(cRot % 360 == 0)
Significa che cRot e' un multiplo di 360 perche il resto della divisione tra cRot e 360 e' 0
 
Stato
Discussione chiusa ad ulteriori risposte.