che sto cercando di fare il mio flash player quando viene colpito. Ho rilevato il rilevamento dei colpi. Attualmente cambia in rosso. Mi sto chiedendo come far accadere il lampeggio vero e proprio. Ecco un frammento che gestisce stato colpito:Fai Player Flash Quando Hit
if(otherObject.CompareTag("Minion")) //hit by minion
{
if(hitFromTop(otherObject.gameObject)) //if player jumped on enemy
{
otherObject.GetComponent<Minion>().setMoving(false); //stop moving
playSound(KillEnemySound); //play killing enemy sound
jump();
Destroy(otherObject.gameObject); //kill minion
}
else //otherwise, enemy hit player
{
if(canTakeDamage)
{
changeColor(Color.red);
loseHealth(1); //lose health
canTakeDamage=false;
yield return new WaitForSeconds(1.5f); //delay taking damage repeatedly
changeColor(Color.white);
canTakeDamage=true;
}
//indicate lost health somehow
}
Attualmente, il cambio al rosso è costante (non lampeggiante) e temporaneo, tramite il yield return new WaitForSeconds(1.5f);
. Potrei inserire un paio di queste chiamate, con cambiamenti di colore tra di loro, ma mi chiedevo se c'era un modo più ordinato. Non posso essere il primo a fare qualcosa in flash in un gioco.
EDIT: Ho aggiunto il codice Flash di heisenbug() come segue:
IEnumerator FlashPlayer(float time, float intervalTime)
{
canTakeDamage=false;
float elapsedTime = 0f;
int index = 0;
while(elapsedTime < time)
{
Debug.Log("Elapsed time = " + elapsedTime + " < time = " + time + " deltaTime " + Time.deltaTime);
mat.color = colors[index % 2];
elapsedTime += Time.deltaTime;
index++;
yield return new WaitForSeconds(intervalTime);
}
canTakeDamage=true;
}
e si chiama qui:
void loseHealth(int damage)
{
//irrelevant details omitted for brevity
//the "if" checks if the player has run out of health, should not affect the else because this method is called from OnTriggerEnter...see below...
else
{
StartCoroutine(FlashPlayer (1.5f, 0.5f));
}
}
e qui è dove che si chiama (in OnTriggerEnter):
if(otherObject.CompareTag("Minion")) //hit by minion
{
if(hitFromTop(otherObject.gameObject)) //if player jumped on enemy
{
//irrelevant to the problem
}
else //otherwise, enemy hit player
{
if(canTakeDamage)
{
loseHealth(1);
}
//indicate lost health somehow
}
}
il problema ora è che il Flash non si ferma mai. Dovrebbe interrompersi quando il tempo trascorso raggiunge 1.5f, come ho specificato, ma poiché è solo incrementato di piccole quantità (in Time.deltaTime) quindi non raggiunge 1.5f per un tempo molto lungo. C'è qualcosa che ho lasciato fuori che dovrebbe farlo arrivare a 1,5f più veloce, o c'è un altro numero che posso scegliere che posso usare con precisione per fungere da punto di arresto? I numeri per il tempo trascorso tendono ad essere: 0, 0,02, 0,03693, 0,054132, ecc. Molto piccoli, quindi non posso davvero scegliere da qui.
prendere in considerazione la pubblicazione di un SSCCE: http://sscce.org/. – Heisenbug
Scusa, non ho ancora avuto la possibilità di farlo. Ci proverò non appena ne avrò l'opportunità. – muttley91