[RESOLVIDO] Travar o Objeto
3 participantes
Página 1 de 1
[RESOLVIDO] Travar o Objeto
Gostaria de saber como travar um objeto no lugar ao executar uma ação.
Estou implementando um script de um monstro, mas quando ele ataca e o Player sai de perto ele começa a andar para o lado do player, como faço para travar ele no lugar até terminar de executar a animação de ataque?
Estou implementando um script de um monstro, mas quando ele ataca e o Player sai de perto ele começa a andar para o lado do player, como faço para travar ele no lugar até terminar de executar a animação de ataque?
fernando14015- Iniciante
- PONTOS : 3494
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Travar o Objeto
vc está usando nav mesh??
mande o script do seu monstro (nao se esqueça de usar a caixa de códigos (botão SCRIPT acima da caixa de comentários))
mande o script do seu monstro (nao se esqueça de usar a caixa de códigos (botão SCRIPT acima da caixa de comentários))
JohnRambo- Moderador
- PONTOS : 5174
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: [RESOLVIDO] Travar o Objeto
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
public class Zumbi : MonoBehaviour {
public Transform Player;
private NavMeshAgent naveMesh;
private float DistanciaDoPlayer, DistanciaDoAIPoint;
public float DistanciaDePercepcao = 30,DistanciaDeSeguir = 20, DistanciaDeAtacar = 2, VelocidadeDePasseio = 3, VelocidadeDePerseguicao = 6,TempoPorAtaque = 1.5f, DanoDoInimigo = 40;
private bool VendoOPlayer;
public Transform[] DestinosAleatorios;
private int AIPointAtual;
private bool PerseguindoAlgo, contadorPerseguindoAlgo,atacandoAlgo;
private float cronometroDaPerseguicao,cronometroAtaque;
private Rigidbody corpoRigido;
private float cronometro;
private bool comecarContagem;
public GameObject Madeiras;
public GameObject[] localMadeiras;
public Animator Zumbi;
public int minMadeiras = 1, maxMadeiras = 5;
void Start (){
corpoRigido = GetComponent <Rigidbody> ();
corpoRigido.useGravity = true;
corpoRigido.isKinematic = true;
cronometro = 0;
comecarContagem = false;
corpoRigido.mass = 250;
AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
naveMesh = transform.GetComponent<NavMeshAgent> ();
}
void Update (){
DistanciaDoPlayer = Vector3.Distance(Player.transform.position,transform.position);
DistanciaDoAIPoint = Vector3.Distance(DestinosAleatorios[AIPointAtual].transform.position,transform.position);
RaycastHit hit;
Vector3 deOnde = transform.position;
Vector3 paraOnde = Player.transform.position;
Vector3 direction = paraOnde - deOnde;
if(Physics.Raycast (transform.position,direction,out hit,1000) && DistanciaDoPlayer < DistanciaDePercepcao ){
if(hit.collider.gameObject.CompareTag("Player")){
VendoOPlayer = true;
}else{
VendoOPlayer = false;
}
}
if(DistanciaDoPlayer > DistanciaDePercepcao){
Passear();
}
if (DistanciaDoPlayer <= DistanciaDePercepcao && DistanciaDoPlayer > DistanciaDeSeguir) {
if(VendoOPlayer == true){
Olhar ();
}else{
Passear();
Zumbi.Play ("walk");
}
}
if (DistanciaDoPlayer <= DistanciaDeSeguir && DistanciaDoPlayer > DistanciaDeAtacar) {
if(VendoOPlayer == true){
Perseguir();
PerseguindoAlgo = true;
}else{
Passear();
}
}
if (DistanciaDoPlayer <= DistanciaDeAtacar) {
Atacar();
}
if (DistanciaDoAIPoint <= 2) {
AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
Passear();
}
if (contadorPerseguindoAlgo == true) {
cronometroDaPerseguicao += Time.deltaTime;
}
if (cronometroDaPerseguicao >= 5 && VendoOPlayer == false) {
contadorPerseguindoAlgo = false;
cronometroDaPerseguicao = 0;
PerseguindoAlgo = false;
}
if (atacandoAlgo == true) {
cronometroAtaque += Time.deltaTime;
}
if (cronometroAtaque >= TempoPorAtaque && DistanciaDoPlayer <= DistanciaDeAtacar) {
atacandoAlgo = true;
cronometroAtaque = 0;
PLAYER.VIDA = PLAYER.VIDA - DanoDoInimigo;
Debug.Log ("recebeuAtaque");
} else if (cronometroAtaque >= TempoPorAtaque && DistanciaDoPlayer > DistanciaDeAtacar) {
atacandoAlgo = false;
cronometroAtaque = 0;
Debug.Log ("errou");
}
}
void Passear (){
if (PerseguindoAlgo == false) {
naveMesh.acceleration = 5;
naveMesh.speed = VelocidadeDePasseio;
naveMesh.destination = DestinosAleatorios [AIPointAtual].position;
} else if (PerseguindoAlgo == true) {
contadorPerseguindoAlgo = true;
}
}
void Olhar(){
naveMesh.speed = 0;
transform.LookAt (Player);
}
void Perseguir(){
naveMesh.acceleration = 8;
naveMesh.speed = VelocidadeDePerseguicao;
naveMesh.destination = Player.position;
Zumbi.Play ("walk");
}
void Atacar (){
atacandoAlgo = true;
Zumbi.Play ("attack");
}
}
Usei como base o código do Marcos.
Tem o código da vida do monstro, mas acho que isso não é relevante.
fernando14015- Iniciante
- PONTOS : 3494
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Travar o Objeto
basta deixar a speed da navMesh = 0 enquanto executa a animação, ou seja, a void atack
é o mesmo princípio da void "olhar"
é o mesmo princípio da void "olhar"
Re: [RESOLVIDO] Travar o Objeto
Poderia adicionar o código ao Script, fazendo um grande favor?
Eu tentei com o: "if(anim.GetCurrentAnimatorStateInfo(0).IsName("attack")".
Porém não deu certo.
Eu tentei com o: "if(anim.GetCurrentAnimatorStateInfo(0).IsName("attack")".
Porém não deu certo.
fernando14015- Iniciante
- PONTOS : 3494
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Travar o Objeto
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
public class Zumbi : MonoBehaviour {
public Transform Player;
private NavMeshAgent naveMesh;
private float DistanciaDoPlayer, DistanciaDoAIPoint;
public float DistanciaDePercepcao = 30,DistanciaDeSeguir = 20, DistanciaDeAtacar = 2, VelocidadeDePasseio = 3, VelocidadeDePerseguicao = 6,TempoPorAtaque = 1.5f, DanoDoInimigo = 40;
private bool VendoOPlayer;
public Transform[] DestinosAleatorios;
private int AIPointAtual;
private bool PerseguindoAlgo, contadorPerseguindoAlgo,atacandoAlgo;
private float cronometroDaPerseguicao,cronometroAtaque;
private Rigidbody corpoRigido;
private float cronometro;
private bool comecarContagem;
public GameObject Madeiras;
public GameObject[] localMadeiras;
public Animator Zumbi;
public int minMadeiras = 1, maxMadeiras = 5;
void Start (){
corpoRigido = GetComponent <Rigidbody> ();
corpoRigido.useGravity = true;
corpoRigido.isKinematic = true;
cronometro = 0;
comecarContagem = false;
corpoRigido.mass = 250;
AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
naveMesh = transform.GetComponent<NavMeshAgent> ();
}
void Update (){
DistanciaDoPlayer = Vector3.Distance(Player.transform.position,transform.position);
DistanciaDoAIPoint = Vector3.Distance(DestinosAleatorios[AIPointAtual].transform.position,transform.position);
RaycastHit hit;
Vector3 deOnde = transform.position;
Vector3 paraOnde = Player.transform.position;
Vector3 direction = paraOnde - deOnde;
if(Physics.Raycast (transform.position,direction,out hit,1000) && DistanciaDoPlayer < DistanciaDePercepcao ){
if(hit.collider.gameObject.CompareTag("Player")){
VendoOPlayer = true;
}else{
VendoOPlayer = false;
}
}
if(DistanciaDoPlayer > DistanciaDePercepcao){
Passear();
}
if (DistanciaDoPlayer <= DistanciaDePercepcao && DistanciaDoPlayer > DistanciaDeSeguir) {
if(VendoOPlayer == true){
Olhar ();
}else{
Passear();
Zumbi.Play ("walk");
}
}
if (DistanciaDoPlayer <= DistanciaDeSeguir && DistanciaDoPlayer > DistanciaDeAtacar) {
if(VendoOPlayer == true){
Perseguir();
PerseguindoAlgo = true;
}else{
Passear();
}
}
if (DistanciaDoPlayer <= DistanciaDeAtacar) {
Atacar();
}
if (DistanciaDoAIPoint <= 2) {
AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
Passear();
}
if (contadorPerseguindoAlgo == true) {
cronometroDaPerseguicao += Time.deltaTime;
}
if (cronometroDaPerseguicao >= 5 && VendoOPlayer == false) {
contadorPerseguindoAlgo = false;
cronometroDaPerseguicao = 0;
PerseguindoAlgo = false;
}
if (atacandoAlgo == true) {
cronometroAtaque += Time.deltaTime;
}
if (cronometroAtaque >= TempoPorAtaque && DistanciaDoPlayer <= DistanciaDeAtacar) {
atacandoAlgo = true;
cronometroAtaque = 0;
PLAYER.VIDA = PLAYER.VIDA - DanoDoInimigo;
Debug.Log ("recebeuAtaque");
} else if (cronometroAtaque >= TempoPorAtaque && DistanciaDoPlayer > DistanciaDeAtacar) {
atacandoAlgo = false;
cronometroAtaque = 0;
Debug.Log ("errou");
}
}
void Passear (){
if (PerseguindoAlgo == false) {
naveMesh.acceleration = 5;
naveMesh.speed = VelocidadeDePasseio;
naveMesh.destination = DestinosAleatorios [AIPointAtual].position;
} else if (PerseguindoAlgo == true) {
contadorPerseguindoAlgo = true;
}
}
void Olhar(){
naveMesh.speed = 0;
transform.LookAt (Player);
}
void Perseguir(){
naveMesh.acceleration = 8;
naveMesh.speed = VelocidadeDePerseguicao;
naveMesh.destination = Player.position;
Zumbi.Play ("walk");
}
void Atacar (){
atacandoAlgo = true;
naveMesh.speed = 0;
Zumbi.Play ("attack");
}
tenta com esse agora
JohnRambo- Moderador
- PONTOS : 5174
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: [RESOLVIDO] Travar o Objeto
- Código:
Agradeço pela grande ajuda, com alguns ajustes, vulgo, gambiarras, funcionou perfeitamente.(bugou o comentário kkkk)
fernando14015- Iniciante
- PONTOS : 3494
REPUTAÇÃO : 0
Respeito as regras :
JohnRambo- Moderador
- PONTOS : 5174
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 :
Tópicos semelhantes
» [RESOLVIDO] Como fazer um objeto 2D rotacionar em direção a outro objeto
» [RESOLVIDO] como fazer um objeto trocar de cor ao colidir com outro objeto
» [RESOLVIDO] Girar Objeto
» [RESOLVIDO] Rotação do objeto
» [RESOLVIDO]Empurra objeto
» [RESOLVIDO] como fazer um objeto trocar de cor ao colidir com outro objeto
» [RESOLVIDO] Girar Objeto
» [RESOLVIDO] Rotação do objeto
» [RESOLVIDO]Empurra objeto
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos