[AJUDA] Aumentar velocidade de um objeto a cada rodada
3 participantes
Página 1 de 1
[AJUDA] Aumentar velocidade de um objeto a cada rodada
Olá pessoal!
eu estou tendo uma dúvida de um assunto um tanto complexo que é aumentar a velocidade de um objeto que é movido por NavMeshAgent. Vou explicar bem detalhado:
Estou fazendo um jogo no qual o objetivo é tão somente sobreviver ao máximo que conseguir. Neste jogo você começa na rodada 1. e na rodada 1 são spawnados 8 inimigos com velocidade 2... Quando voce mata todos os 8 inimigos vc avança pra rodada 2. na rodada 2 são spawnados 13 inimigos. E o que eu quero fazer é aumentar a velocidade de perseguição a cada rodada que se passa, pra ficar mais dificil! E eu tô desde ontem tentando fazer isso mas não to de jeito nehum conseguindo .
Aqui esta o script que controla os spawns e as rodadas:
E aqui está o script do inimigo:
Poderiam me ajudar com isto? :bounce: :bounce:
eu estou tendo uma dúvida de um assunto um tanto complexo que é aumentar a velocidade de um objeto que é movido por NavMeshAgent. Vou explicar bem detalhado:
Estou fazendo um jogo no qual o objetivo é tão somente sobreviver ao máximo que conseguir. Neste jogo você começa na rodada 1. e na rodada 1 são spawnados 8 inimigos com velocidade 2... Quando voce mata todos os 8 inimigos vc avança pra rodada 2. na rodada 2 são spawnados 13 inimigos. E o que eu quero fazer é aumentar a velocidade de perseguição a cada rodada que se passa, pra ficar mais dificil! E eu tô desde ontem tentando fazer isso mas não to de jeito nehum conseguindo .
Aqui esta o script que controla os spawns e as rodadas:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Instanciador : MonoBehaviour {
public Transform[] Destinos;
public GameObject[] Objetos;
private float cronometro;
public float tempoPorSpawn;
public static int rodada;
private float intervalo;
public int maximoPorRodada;
public int numeroDeInstanciados;
public bool limitePorRodada;
public Text hUDRodada;
public static int inimigosPresents;
void Start (){
rodada = 1;
intervalo = 0;
maximoPorRodada = 8;
numeroDeInstanciados = 0;
limitePorRodada = false;
inimigosPresents = 0;
}
void Update (){
cronometro += Time.deltaTime;
intervalo += Time.deltaTime;
if (cronometro >= tempoPorSpawn && intervalo >= 8 && numeroDeInstanciados <= maximoPorRodada && limitePorRodada == false) {
Instantiate (Objetos [Random.Range (0, Objetos.Length)], Destinos [Random.Range (0, Destinos.Length)].transform.position, transform.rotation);
cronometro = 0;
numeroDeInstanciados = numeroDeInstanciados + 1;
inimigosPresents = inimigosPresents + 1;
}
if (numeroDeInstanciados >= maximoPorRodada) {
limitePorRodada = true;
}
if (limitePorRodada == true && inimigosPresents == 0) {
rodada = rodada + 1;
maximoPorRodada = maximoPorRodada + 6;
limitePorRodada = false;
intervalo = 0;
numeroDeInstanciados = 0;
}
hUDRodada.text = " " + rodada;
}
}
E aqui está o script do inimigo:
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(NavMeshAgent))]
public class Zombie : MonoBehaviour {
private int health = 100;
private GameObject Player;
public NavMeshAgent naveMesh;
void Start () {
naveMesh = transform.GetComponent<NavMeshAgent> ();
Player = GameObject.FindWithTag ("Player");
naveMesh.acceleration = 2;
naveMesh.speed = 2;
}
void Update () {
naveMesh.destination = Player.transform.position;
}
public void DeductHealth(int dmg){
health -= dmg;
CheckHealth();
}
void CheckHealth(){
if (health <= 0) {
Destroy (gameObject);
Instanciador.inimigosPresents--;
}
}
}
Poderiam me ajudar com isto? :bounce: :bounce:
JohnRambo- Moderador
- PONTOS : 5172
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: [AJUDA] Aumentar velocidade de um objeto a cada rodada
Bom o que vc pode fazer e verifica se o total de numero De inimigos que vc tem em jogo e igual a 0 para conseguir começar a próxima rodada
ai vc pode procura pela classe Zombie e acessa a variável naveMesh e seta um novo valor
para isso a cada inimigo eliminado vc tem que decrementar 1 do total de inimigos esse e a forma simples
ou vc pode criar uma classe que não herde do monobehaviour e fazer os objetivos ex
Quando chegar ao fim da roda vc passa para próximo objetivo
ex:
Não esqueça de usar o Serializable na classe objetivo
entenda um pouco sobre o assunto
https://www.schultzgames.com/t1399-tutorial-variavel-de-instancia-classe?highlight=varaivel+de+instancia
so que no caso esse tipo não e de instância
então vc pode fazer os ajuste manualmente no inspector
OBS : Isso e so uma luz caso não tenha entendido diga ai pra min explicar :D
ai vc pode procura pela classe Zombie e acessa a variável naveMesh e seta um novo valor
para isso a cada inimigo eliminado vc tem que decrementar 1 do total de inimigos esse e a forma simples
ou vc pode criar uma classe que não herde do monobehaviour e fazer os objetivos ex
- Código:
[System.Serializable]
public class Objetivos {
public int totalDeInimigos;
public float tempoDejogo;
public float VelocidadeDoInimigo;
//e a sim vai
}
Quando chegar ao fim da roda vc passa para próximo objetivo
ex:
- Código:
public int indexObjetivoAtual;
public int totalDeInimigos;
public GameObject Objetos;
public Objetivos[] objetivos;
public Transform[] Destinos;
if(totalDeInimigos <= 0)
{
indexObjetivoAtual++;
for(int i = 0; i < Objetos.Length; i++)
{
Objetos[i].GetComponent<NavMeshAgent>().speed = objetivos[indexObjetivoAtual].VelocidadeDoInimigo;
}
while(totalDeInimigos < objetivos[indexObjetivoAtual].totalDeInimigos)
{
Instantiate (Objetos [Random.Range (0, Objetos.Length)], Destinos [Random.Range (0, Destinos.Length)].transform.position, transform.rotation);
totalDeInimigos++;
}
}
Não esqueça de usar o Serializable na classe objetivo
entenda um pouco sobre o assunto
https://www.schultzgames.com/t1399-tutorial-variavel-de-instancia-classe?highlight=varaivel+de+instancia
so que no caso esse tipo não e de instância
então vc pode fazer os ajuste manualmente no inspector
OBS : Isso e so uma luz caso não tenha entendido diga ai pra min explicar :D
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: [AJUDA] Aumentar velocidade de um objeto a cada rodada
A unica coisa que eu preciso é aumentar a velocidade do inimigo toda vez que a varivel rodada receber mais 1. Da uma explicada ai
[list=linenums]
[*] if (limitePorRodada == true && inimigosPresents == 0) {
[*] rodada = rodada + 1;
[*] maximoPorRodada = maximoPorRodada + 6;
[*] limitePorRodada = false;
[*] intervalo = 0;
[*] numeroDeInstanciados = 0;
[*] }
[/list]
tipo nesta parte eu acessaria o script do inimigo e aumentaria o valor da velocidade. Ja tentei de tudo no qual eu tenho conhecimento mas nao deu :pale:
(e eu tambem nao to conseguindo colocar os scripts na caixinha de codidos do forum sem que fique dando bug).
[list=linenums]
[*] if (limitePorRodada == true && inimigosPresents == 0) {
[*] rodada = rodada + 1;
[*] maximoPorRodada = maximoPorRodada + 6;
[*] limitePorRodada = false;
[*] intervalo = 0;
[*] numeroDeInstanciados = 0;
[*] }
[/list]
tipo nesta parte eu acessaria o script do inimigo e aumentaria o valor da velocidade. Ja tentei de tudo no qual eu tenho conhecimento mas nao deu :pale:
(e eu tambem nao to conseguindo colocar os scripts na caixinha de codidos do forum sem que fique dando bug).
JohnRambo- Moderador
- PONTOS : 5172
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: [AJUDA] Aumentar velocidade de um objeto a cada rodada
Troca o seu script "instanciar" por este:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Instanciador : MonoBehaviour {
public Transform[] Destinos;
public GameObject[] Objetos;
private float cronometro;
public float tempoPorSpawn;
public static int rodada;
private float intervalo;
public float aumentoVelRodada = 1;
public int maximoPorRodada;
public int numeroDeInstanciados;
public bool limitePorRodada;
public Text hUDRodada;
public static int inimigosPresents;
void Start (){
rodada = 1;
intervalo = 0;
maximoPorRodada = 8;
numeroDeInstanciados = 0;
limitePorRodada = false;
inimigosPresents = 0;
}
void Update (){
cronometro += Time.deltaTime;
intervalo += Time.deltaTime;
if (cronometro >= tempoPorSpawn && intervalo >= 8 && numeroDeInstanciados <= maximoPorRodada && limitePorRodada == false) {
GameObject inimigo = Instantiate (Objetos [Random.Range (0, Objetos.Length)], Destinos [Random.Range (0, Destinos.Length)].transform.position, transform.rotation)as GameObject;
inimigo.GetComponent<NavMeshAgent> ().speed = ((inimigo.GetComponent<NavMeshAgent> ().speed) + (rodada*aumentoVelRodada));
cronometro = 0;
numeroDeInstanciados = numeroDeInstanciados + 1;
inimigosPresents = inimigosPresents + 1;
}
if (numeroDeInstanciados >= maximoPorRodada) {
limitePorRodada = true;
}
if (limitePorRodada == true && inimigosPresents == 0) {
rodada = rodada + 1;
maximoPorRodada = maximoPorRodada + 6;
limitePorRodada = false;
intervalo = 0;
numeroDeInstanciados = 0;
}
hUDRodada.text = " " + rodada;
}
}
Re: [AJUDA] Aumentar velocidade de um objeto a cada rodada
ta ai
para que a logica funciona vc não pode destruir o inimigo basta desativá-lo
OBS: Fiz no bloco de notas Pois estou sem o Unity Então Pode ou não funcionar :D
@Edit1 : Tirei o erro do script
para que a logica funciona vc não pode destruir o inimigo basta desativá-lo
OBS: Fiz no bloco de notas Pois estou sem o Unity Então Pode ou não funcionar :D
- Código:
using UnityEngine;
using System.Collections.Generic;
using System.Collections;
public class Teste : MonoBehaviour
{
[System.Serializable]
public class ObjectiveRound
{
public int amountEnemyRound;
public float tempRound;
public float speedEnemy;
//inplementar algo se For Preciso
}
public Transform[] destiny;
public GameObject[] enemy;
public ObjectiveRound[] objectiveRound;
public float tempSpawn;
public float tempRound;
private float currentTempToSpawn;
private int amountEnemyInGame;
private int maxEnemyInGame;
private float currentTempRound;
private int round;
private List<Zoobie> enemiesInGame;
void Start()
{
enemiesInGame = new List<Zoobie>();
Instance();
}
void Update()
{
currentTempRound += Time.deltaTime;
currentTempToSpawn += Time.deltaTime;
if(currentTempToSpawn >= tempSpawn)
{
Spawn();
currentTempToSpawn = 0;
}
if(currentTempRound >= tempRound || amountEnemyInGame <= 0)
{
amountEnemyInGame = 0;
NextRound();
Instance();
currentTempRound = 0;
}
}
private void NextRound()
{
round++;
maxEnemyInGame = objectiveRound[round].amountEnemyRound;
tempRound = objectiveRound[round].tempRound;
NewVelocityZoobie();
}
private void Instance()
{
int amountEnemyCount = enemiesInGame.Count;
for(int amountEnemyList = enemiesInGame.Count; amountEnemyList < maxEnemyInGame; amountEnemyList++)
{
amountEnemyCount++;
GameObject tempEnemy = Instantiate(enemy[Random.Range (0, enemy.Length)]) as GameObject;
tempEnemy.transform.SetParent (transform);
tempEnemy.SetActive(false);
Zoobie tempZoobie = tempEnemy.GetComponent<Zoobie>();
enemiesInGame.Add(tempZoobie);
}
amountEnemyInGame = amountEnemyCount;
}
private void Spawn()
{
foreach(Zoobie zoobie in enemiesInGame)
{
if(!zoobie.gameObject.activeSelf)
{
zoobie.gameObject.SetActive(true);
zoobie.gameObject.transform.position = destiny[Random.Range(0, destiny.Length)].position;
Debug.Log ("Spawn");
break;
}
}
}
private void NewVelocityZoobie()
{
foreach (var zoobie in enemiesInGame)
{
zoobie.naveMesh.speed = objectiveRound [round].speedEnemy;
}
}
}
@Edit1 : Tirei o erro do script
Última edição por weslleyFx em Sex maio 20, 2016 8:03 pm, editado 2 vez(es) (Motivo da edição : mudança no Spawn e tirando o erros pq fiz sem o unity pelo bloco de notas '-')
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: [AJUDA] Aumentar velocidade de um objeto a cada rodada
Ainda assim não deu certo :/
vc tem skype?
vc tem skype?
JohnRambo- Moderador
- PONTOS : 5172
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: [AJUDA] Aumentar velocidade de um objeto a cada rodada
tenho
weslley.fx
weslley.fx
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Tópicos semelhantes
» Como fazer um objeto aumentar sua variável a cada segundo?
» Aumentar e diminuir velocidade de uma animação
» PowerUp para aumentar velocidade do personagem
» Como mover personagem com rigidbody sem aumentar a velocidade
» Como criar um script capaz de detectar a velocidade de queda de um objeto no Unity 5 ?
» Aumentar e diminuir velocidade de uma animação
» PowerUp para aumentar velocidade do personagem
» Como mover personagem com rigidbody sem aumentar a velocidade
» Como criar um script capaz de detectar a velocidade de queda de um objeto no Unity 5 ?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos