Respawn Random.Range
3 participantes
Página 1 de 1
Respawn Random.Range
Ola pessoa alguém poderia me ajudar com esse script(videojogos) para criar inimigos ? ele cria os inimigos a cada tempo que eu determinar, tipo na imagem a baixo esta configurado para 5, porem fica algo mecânico e repetitivo, tentei substituir o tempo fixo por um Random.Range(1,5); usando um IEnumerator porem não consegui, segue o código e a imagem do Inspetor:
- Código:
using UnityEngine;
public class EnemyManager : MonoBehaviour
{
public PlayerHealth playerHealth;
public GameObject enemy;
public float spawnTime;
public Transform[] spawnPoints;
void Start ()
{
InvokeRepeating ("Spawn", spawnTime, spawnTime);
}
void Spawn ()
{
if(playerHealth.currentHealth <= 0f)
{
return;
}
int spawnPointIndex = Random.Range (0, spawnPoints.Length);
Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
}
}
kalielson- ProgramadorMaster
- PONTOS : 3572
REPUTAÇÃO : 120
Idade : 40
Áreas de atuação : Mestrando em Computação
Respeito as regras :
Re: Respawn Random.Range
Tem como você postar o seu script "PlayerHealth"???
Preciso dele para conferir se funciona... mas a principio, a parte do spawn tem que ser refeita, seu usar o InvokeRepeat, pois ele deixará o tempo fixo.
Preciso dele para conferir se funciona... mas a principio, a parte do spawn tem que ser refeita, seu usar o InvokeRepeat, pois ele deixará o tempo fixo.
Re: Respawn Random.Range
- Código:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.SceneManagement;
public class PlayerHealth : MonoBehaviour
{
public int startingHealth = 100;
public int currentHealth;
public Slider healthSlider;
public Image damageImage;
public AudioClip deathClip;
public float flashSpeed = 5f;
public Color flashColour = new Color(1f, 0f, 0f, 0.1f);
Animator anim;
AudioSource playerAudio;
PlayerMovement playerMovement;
PlayerShooting playerShooting;
bool isDead;
bool damaged;
void Awake ()
{
anim = GetComponent <Animator> ();
playerAudio = GetComponent <AudioSource> ();
playerMovement = GetComponent <PlayerMovement> ();
playerShooting = GetComponentInChildren <PlayerShooting> ();
currentHealth = startingHealth;
}
void Update ()
{
if(damaged)
{
damageImage.color = flashColour;
}
else
{
damageImage.color = Color.Lerp (damageImage.color, Color.clear, flashSpeed * Time.deltaTime);
}
damaged = false;
}
public void TakeDamage (int amount)
{
damaged = true;
currentHealth -= amount;
healthSlider.value = currentHealth;
playerAudio.Play ();
if(currentHealth <= 0 && !isDead)
{
Death ();
}
}
void Death ()
{
isDead = true;
playerShooting.DisableEffects ();
anim.SetTrigger ("Die");
playerAudio.clip = deathClip;
playerAudio.Play ();
playerMovement.enabled = false;
playerShooting.enabled = false;
}
public void ScheduleRestartLevel ()
{
StartCoroutine (RestartLevel ());
}
IEnumerator RestartLevel ()
{
yield return new WaitForSeconds (4);
SceneManager.LoadScene (0);
}
}
Ai esta ! ele consulte este para saber a barra de vida do player se estiver morto não instanciar mais inimigos.
kalielson- ProgramadorMaster
- PONTOS : 3572
REPUTAÇÃO : 120
Idade : 40
Áreas de atuação : Mestrando em Computação
Respeito as regras :
Re: Respawn Random.Range
OK, tente substituir o seu EnemyManager por este:
- Código:
using UnityEngine;
using System.Collections;
public class EnemyManager : MonoBehaviour{
public PlayerHealth playerHealth;
public GameObject enemy;
public Transform[] spawnPoints;
void Start(){
StartCoroutine ("EsperarParaSpawn");
}
IEnumerator EsperarParaSpawn(){
float tempoAEsperar = Random.Range (1, 5);
yield return new WaitForSeconds (tempoAEsperar);
Spawn ();
StartCoroutine ("EsperarParaSpawn");
}
void Spawn (){
if(playerHealth.currentHealth <= 0f){
return;
}
int spawnPointIndex = Random.Range (0, spawnPoints.Length);
Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
}
}
Re: Respawn Random.Range
Show Marcos isso mesmo obrigado mais uma vez !
Me tira so mais uma duvida, o IEnumerator é chamando na void Start, então quer dizer que ele é executado apenas uma vez ?
Me tira so mais uma duvida, o IEnumerator é chamando na void Start, então quer dizer que ele é executado apenas uma vez ?
kalielson- ProgramadorMaster
- PONTOS : 3572
REPUTAÇÃO : 120
Idade : 40
Áreas de atuação : Mestrando em Computação
Respeito as regras :
Re: Respawn Random.Range
Seria se ele nao fosse chamado toda vez que termine, como foi feito na linha 18, onde é usado:
- Código:
StartCoroutine ("EsperarParaSpawn");
Re: Respawn Random.Range
:D Show mais uma aprendizagem !!!
kalielson- ProgramadorMaster
- PONTOS : 3572
REPUTAÇÃO : 120
Idade : 40
Áreas de atuação : Mestrando em Computação
Respeito as regras :
Tópicos semelhantes
» Salvar Random.Range
» [DUVIDA] Random.Range(1,4) inclui o 1 e o 4 Juntos?
» Dúvida de Respawn
» Ajuda no Respawn
» Respawn
» [DUVIDA] Random.Range(1,4) inclui o 1 e o 4 Juntos?
» Dúvida de Respawn
» Ajuda no Respawn
» Respawn
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos