Ataque indo em direção do personagem mudando a velocidade
2 participantes
Página 1 de 1
Ataque indo em direção do personagem mudando a velocidade
o "TIRO" vai em direção ao personagem na velocidade certa, mas quando coloco ele para nascer em um respaw a cada x segundo , quando ele nasce a velocidade muda
public class seguir : MonoBehaviour
{
private Vector2 posicaoDoJogador;
private Rigidbody2D corpoRigido;
public float forcaDoTiro;
public float tempoDeVida = 4f;
// Start is called before the first frame update
void Start()
{
corpoRigido = GetComponent<Rigidbody2D>();
posicaoDoJogador = GameObject.FindGameObjectWithTag("MD").transform.position;
Vector2 direcaoDoTiro = posicaoDoJogador - (Vector2)transform.position;
corpoRigido.velocity = direcaoDoTiro.normalized * forcaDoTiro * Time.deltaTime;
Destroy(gameObject, tempoDeVida);
}
public class seguir : MonoBehaviour
{
private Vector2 posicaoDoJogador;
private Rigidbody2D corpoRigido;
public float forcaDoTiro;
public float tempoDeVida = 4f;
// Start is called before the first frame update
void Start()
{
corpoRigido = GetComponent<Rigidbody2D>();
posicaoDoJogador = GameObject.FindGameObjectWithTag("MD").transform.position;
Vector2 direcaoDoTiro = posicaoDoJogador - (Vector2)transform.position;
corpoRigido.velocity = direcaoDoTiro.normalized * forcaDoTiro * Time.deltaTime;
Destroy(gameObject, tempoDeVida);
}
Andrewkeny- Iniciante
- PONTOS : 1140
REPUTAÇÃO : 0
Respeito as regras :
Re: Ataque indo em direção do personagem mudando a velocidade
Tá tudo correto nesse script, direção correta, normalização... Seria bom você postar o script do spawn.
O que eu mudaria é ao invés de deixar esse código na Start(), eu deixaria num método publico chamado Atirar();
Aí no script do spawn, após instanciar o objeto, primeiro eu moveria o objeto pra posição do spawn e só depois eu acessaria essa Classe "Seguir" e chamaria o Atirar();
Com isso eu evitaria problemas com a ordem de execução e me certificaria de que o vetor2 direcaoDoTiro está sendo calculado a partir da posição correta.
O que eu mudaria é ao invés de deixar esse código na Start(), eu deixaria num método publico chamado Atirar();
Aí no script do spawn, após instanciar o objeto, primeiro eu moveria o objeto pra posição do spawn e só depois eu acessaria essa Classe "Seguir" e chamaria o Atirar();
Com isso eu evitaria problemas com a ordem de execução e me certificaria de que o vetor2 direcaoDoTiro está sendo calculado a partir da posição correta.
SteveRogers- Instrutor
- PONTOS : 2675
REPUTAÇÃO : 156
Respeito as regras :
Re: Ataque indo em direção do personagem mudando a velocidade
esse é o do Spawn
public class SpawnController : MonoBehaviour
{
public GameObject MosquitoPrefab;
public float rateSpawn;
public float currentTime;
// Start is called before the first frame update
void Start()
{
currentTime = 0;
}
// Update is called once per frame
void Update()
{
currentTime += Time.deltaTime;
if(currentTime >= rateSpawn)
{
currentTime = 0;
GameObject tempPrefab = Instantiate(MosquitoPrefab) as GameObject;
}
}
}
public class SpawnController : MonoBehaviour
{
public GameObject MosquitoPrefab;
public float rateSpawn;
public float currentTime;
// Start is called before the first frame update
void Start()
{
currentTime = 0;
}
// Update is called once per frame
void Update()
{
currentTime += Time.deltaTime;
if(currentTime >= rateSpawn)
{
currentTime = 0;
GameObject tempPrefab = Instantiate(MosquitoPrefab) as GameObject;
}
}
}
Andrewkeny- Iniciante
- PONTOS : 1140
REPUTAÇÃO : 0
Respeito as regras :
Re: Ataque indo em direção do personagem mudando a velocidade
Então, você não tá passando a posição do spawn pro objeto instanciado.
Eu fiz umas alterações, faço cache do jogador no SpawnController e passo a posição dele pro mosquito quando for atirar, evita ficar procurando o player por tag toda vez.
Também passo a posição do spawn pro mosquito antes de calcular a direção que ele vai se mover, pelo menos agora dá pra ter certeza que a direção tá correta.
Eu fiz umas alterações, faço cache do jogador no SpawnController e passo a posição dele pro mosquito quando for atirar, evita ficar procurando o player por tag toda vez.
Também passo a posição do spawn pro mosquito antes de calcular a direção que ele vai se mover, pelo menos agora dá pra ter certeza que a direção tá correta.
- Código:
using UnityEngine;
public class SpawnController : MonoBehaviour
{
public GameObject MosquitoPrefab;
public float rateSpawn;
public float currentTime;
public GameObject jogador;
// Start is called before the first frame update
void Start()
{
currentTime = 0;
jogador = GameObject.FindGameObjectWithTag("MD");
}
// Update is called once per frame
void Update()
{
currentTime += Time.deltaTime;
if (currentTime >= rateSpawn)
{
currentTime = 0;
GameObject tempPrefab = Instantiate(MosquitoPrefab);
tempPrefab.transform.position = transform.position; //Move o mosquito pro spawn;
seguir mosquito = tempPrefab.GetComponent<seguir>(); //Pega o script do mosquito;
mosquito.Atirar(jogador.transform.position); //Atira ele no jogador;
}
}
}
- Código:
using UnityEngine;
public class seguir : MonoBehaviour
{
private Rigidbody2D corpoRigido;
public float forcaDoTiro;
public float tempoDeVida = 4f;
public void Atirar(Vector2 posicaoJogador)
{
corpoRigido = GetComponent<Rigidbody2D>();
Vector2 direcaoDoTiro = posicaoJogador - (Vector2)transform.position;
corpoRigido.velocity = direcaoDoTiro.normalized * forcaDoTiro * Time.deltaTime;
Destroy(gameObject, tempoDeVida);
}
}
SteveRogers- Instrutor
- PONTOS : 2675
REPUTAÇÃO : 156
Respeito as regras :
Re: Ataque indo em direção do personagem mudando a velocidade
obrigado deu boa e consegui entender melhor,
E quando eu abro o teste do jogo com o Maximize On Play ativado fica mais devagar tbm oque poderia ser?
E quando eu abro o teste do jogo com o Maximize On Play ativado fica mais devagar tbm oque poderia ser?
Andrewkeny- Iniciante
- PONTOS : 1140
REPUTAÇÃO : 0
Respeito as regras :
Re: Ataque indo em direção do personagem mudando a velocidade
no SpawnController coloquei no Fixed update e deu boa
- Código:
void FixedUpdate()
{
currentTime += Time.fixedDeltaTime;
if(currentTime >= rateSpawn)
{
currentTime = 0;
GameObject tempPrefab = Instantiate(MosquitoPrefab);
tempPrefab.transform.position = transform.position;
seguir mosquito = tempPrefab.GetComponent<seguir>();
mosquito.Atirar(jogador.transform.position);
}
}
Andrewkeny- Iniciante
- PONTOS : 1140
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» [Duvida] Prefab instanciado não esta indo na direção correta
» [Dúvida] Como fazer um corpo rígido receber velocidade em direção ao mouse.
» [RESOLVIDO] Como criar uma Barra de Ataque speed para um personagem
» PowerUp para aumentar velocidade do personagem
» Direção da animação do personagem parado usando blend trees
» [Dúvida] Como fazer um corpo rígido receber velocidade em direção ao mouse.
» [RESOLVIDO] Como criar uma Barra de Ataque speed para um personagem
» PowerUp para aumentar velocidade do personagem
» Direção da animação do personagem parado usando blend trees
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos