[Resolvido]Problema com player e animação
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[Resolvido]Problema com player e animação
Boa noite, recentemente fiz as animações para meu jogo, hoje fui coloca-las pra teste e tive um problema. Acontece que meu player não se move, ele fica tocando a animação em loop e se eu tentar andar ele não sai do lugar.
Quando eu desativo a animação ele anda normalmente, mais quando ela está ativada ele simplesmente não sai do lugar.
Quem tiver alguma dica de como fazer a animação ficar tocando em loop e mesmo assim eu consiga mover o player pode falar que vai ajudar bastante.
Atenciosamente.
Quando eu desativo a animação ele anda normalmente, mais quando ela está ativada ele simplesmente não sai do lugar.
- Script da Movimentação:
- Código:
using UnityEngine;
using System.Collections;
public class Movimentacao : MonoBehaviour {
public float speed;
public float rotaçao;
public GameObject rastro, posicaorastro;
void Update() {
// if(Input.GetKey (KeyCode.LeftShift))
{ //ele esta calculando a speed vezes 2 por segundo fazendo com que fique muito rapido.
// speed = speed * 2 * Time.deltaTime;
}
if(Input.GetKey (KeyCode.W))
{
//transform.Translate (0.0f, 0.0f, 1.0f*speed*Time.deltaTime);
Instantiate(rastro, posicaorastro.transform.position, posicaorastro.transform.rotation);
GetComponent<Rigidbody>().AddForce(transform.forward * speed * Time.deltaTime);
}
//if(Input.GetKey (KeyCode.S))
// {
//transform.Translate (0.0f, 0.0f, -1.0f*speed*Time.deltaTime);
// GetComponent<Rigidbody>().AddForce(Vector3.back * speed * Time.deltaTime);
// }
if(Input.GetKey (KeyCode.D))
{
transform.Rotate (0.0f, 0.5f*rotaçao, 0.0f);
}
if(Input.GetKey (KeyCode.A))
{
transform.Rotate (0.0f, -0.5f*rotaçao, 0.0f);
}
}
}
Quem tiver alguma dica de como fazer a animação ficar tocando em loop e mesmo assim eu consiga mover o player pode falar que vai ajudar bastante.
Atenciosamente.
Re: [Resolvido]Problema com player e animação
Refiz tudo e o script de movimentação está perfeito, só que quando a animção está tocando ele simplesmente não anda, a position dele fica travada e ele não vai pra lugar nenhum.iagokennedyy escreveu:O script de movimento n tá na void update...
- Código:
using UnityEngine;
using System.Collections;
public class Movimentacao : MonoBehaviour {
public float speed;
public float rotaçao;
public GameObject rastro, posicaorastro;
void Update() {
if(Input.GetKey (KeyCode.W))
{
Instantiate(rastro, posicaorastro.transform.position, posicaorastro.transform.rotation);
GetComponent<Rigidbody>().AddForce(transform.forward * speed * Time.deltaTime);
}
if(Input.GetKey (KeyCode.D))
{
transform.Rotate (0.0f, 0.5f*rotaçao, 0.0f);
}
if(Input.GetKey (KeyCode.A))
{
transform.Rotate (0.0f, -0.5f*rotaçao, 0.0f);
}
}
}
Já assisti o vídeo do Marcos, do Bruno games indie e até alguns outros gringos e mesmo assim não consegui resolver.
Re: [Resolvido]Problema com player e animação
Depois de algumas horas quebrando a cabeça consegui fazer uma gambiarra que resolveu, pode não ser a forma mais elegante de se fazer, mais foi a única que deu certo.
1ª Criei um GameObject1 Vazio, depois coloquei o script de movimentação nele junto com um rigidbody, coloquei a câmera como filho desse primeiro GameObject1 pra evitar que ela fique tremendo com o movimento do barco.
2ªCriei outro GameObject2 (filho do gameobject1)nele eu coloquei o barco com as animações, assim sempre que eu ando com o GameObject1 o barco vai realizando as animações e se movendo.
Não sei se ficou confuso de entender mais é isso ai, sono e vontade de tomar um café que não fica pronto nunca não é uma boa combinação...
1ª Criei um GameObject1 Vazio, depois coloquei o script de movimentação nele junto com um rigidbody, coloquei a câmera como filho desse primeiro GameObject1 pra evitar que ela fique tremendo com o movimento do barco.
2ªCriei outro GameObject2 (filho do gameobject1)nele eu coloquei o barco com as animações, assim sempre que eu ando com o GameObject1 o barco vai realizando as animações e se movendo.
Não sei se ficou confuso de entender mais é isso ai, sono e vontade de tomar um café que não fica pronto nunca não é uma boa combinação...
Re: [Resolvido]Problema com player e animação
Mas não tem um script para as animações, as vezes os dois Scripts estão em conflito, tenta juntar os dois... Mas só se quiser já que vc resolveu de uma outra forma haushaHau
Re: [Resolvido]Problema com player e animação
Se quiser pode colocar esse tópico como resolvido.
PS: tenho outra dúvida, devo criar outro tópico ou dar continuidade a esse?
----------------------------------------------------------------------------
Boa noite, Gostaria de tirar outra dúvida referente a animação dos inimigos, Basicamente eu tenho 1 inimigo e fiz várias Duplicatas dele. O problema é que a animação está tocando em todos os inimigos(copias), Ex inimigo 1 morreu, todos os outros inimigo fazem a animação de morrer. Gostaria de saber uma maneira de corrigir esse problema?
Grato.
PS: tenho outra dúvida, devo criar outro tópico ou dar continuidade a esse?
----------------------------------------------------------------------------
Boa noite, Gostaria de tirar outra dúvida referente a animação dos inimigos, Basicamente eu tenho 1 inimigo e fiz várias Duplicatas dele. O problema é que a animação está tocando em todos os inimigos(copias), Ex inimigo 1 morreu, todos os outros inimigo fazem a animação de morrer. Gostaria de saber uma maneira de corrigir esse problema?
Grato.
Re: [Resolvido]Problema com player e animação
Coloque o script que você fez para a animação ativar...
Re: [Resolvido]Problema com player e animação
Com a IA do inimigo ele aciona o Bool que vai ser verificado no script de animação:
IA:
Script de Animação:
PS: não liguem pros comentários, eu faço isso pois estou aprendendo e as vezes passo algum tempo sem mexer no projeto e esqueço algumas coisas, dai o comentário me ajuda a lembrar. :lol!:
IA:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class IA_Inimigo : MonoBehaviour
{
public int VidaTotal, VidaAtual, Dano;
public GameObject Alvo, BarraDeVida,Eu; //Alvo que vai ser seguido
public float VelocidadeMovimentos; //velocidade que vai seguir o alvo
static public bool InimigoMorreu;
void Start()
{
VidaTotal = 100;
VidaAtual = VidaTotal;
InimigoMorreu = false;
}
void Update()
{
float Distancia = Vector3.Distance(Eu.transform.position, Alvo.transform.position); //Recebe a posicao do alvo
if (Distancia < 7 & Distancia > 0.7) //posicao menor que 20 e maior que 0,9 ele faz o if
{
transform.LookAt(Alvo.transform); //new Vector3(Alvo.transform.position.x,transform.position.y, Alvo.transform.position.z)
transform.position = Vector3.Lerp (transform.position, Alvo.transform.position, VelocidadeMovimentos * Time.deltaTime); //segue o alvo
AnimacaoInimigo.Andando = true; //ativa animacao de andar na hora de seguir
if (Distancia < 1) //se a distancia for menor que 1 ele já muda pra começar animacao de atacar
{
AnimacaoInimigo.Andando = false;
AnimacaoInimigo.Atacando = true;
}
else if (Distancia > 1)
{
AnimacaoInimigo.Atacando = false; //se não for menor que 1 ele retorna pra fazer tudo de novo
AnimacaoInimigo.Andando = true;
}
}
else if (Distancia > 20) //se a distancia for maior que 20 ele fica na animacao de parado
{
AnimacaoInimigo.Andando = false;
AnimacaoInimigo.Atacando = false;
AnimacaoInimigo.AndandoAtacando = false;
}
if (BarraDeVida.transform.localScale.x <= 0)
{
BarraDeVida.transform.localScale = new Vector3(0,0,0);
}
if (VidaAtual <= 0)
{
InimigoMorreu = true;
Debug.Log("Matouuuu");
AnimacaoInimigo.Andando = false;
AnimacaoInimigo.Atacando = false;
AnimacaoInimigo.AndandoAtacando = false;
StartCoroutine("Morte");
}
}
void OnTriggerEnter(Collider Player)
{
if (Player.gameObject.tag == "EspadaPlayer")
{
VidaAtual -= Dano;
BarraDeVida.transform.localScale += new Vector3(-0.1f, 0, 0);
print("Sofreu Dano Inimigo");
}
}
IEnumerator Morte()
{
yield return new WaitForSeconds(3);
Destroy(gameObject);
}
}
Script de Animação:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AnimacaoInimigo : MonoBehaviour {
static public bool Andando, Atacando, AndandoAtacando;
//public Animator InimigoAnin;
void Start ()
{
//InimigoAnin = GetComponent<Animator>();
}
void Update ()
{
if (Andando == true)
{
GetComponent<Animator>().SetBool("Andando", true);
}
else if (Atacando == true)
{
GetComponent<Animator>().SetBool("Andando", false);
GetComponent<Animator>().SetBool("Atacando", true);
}
else if (AndandoAtacando == true)
{
GetComponent<Animator>().SetBool("Andando", false);
GetComponent<Animator>().SetBool("Atacando", false);
GetComponent<Animator>().SetBool("AndandoAtacando", true);
}
else if (IA_Inimigo.InimigoMorreu == true)
{
GetComponent<Animator>().SetBool("InimigoMorreu", true);
}
}
}
PS: não liguem pros comentários, eu faço isso pois estou aprendendo e as vezes passo algum tempo sem mexer no projeto e esqueço algumas coisas, dai o comentário me ajuda a lembrar. :lol!:
Re: [Resolvido]Problema com player e animação
A bool não pode ser static... você poderia usar uma variavel ou um GetComponent para chamar a bool...
Exemplo:
pelo GetComponent
deve existir outros métodos também...
Exemplo:
- Código:
public class Script : MonoBehaviour
{
public bool ativar;
}
- Código:
public class ScriptChamador : MonoBehaviour
{
public Script ativador;
void Start ()
{
ativador.ativar = true;
}
}
pelo GetComponent
- Código:
public class ScriptChamador : MonoBehaviour
{
void Start ()
{
GetComponent<Script>().ativar = true;
}
}
// Obs nesse caso o "Script" deveria estar no mesmo GameObject que o ScriptChamador...
deve existir outros métodos também...
Re: [Resolvido]Problema com player e animação
Obrigado Paulo, Resolveu =D
Eu segui o conselho de usar o GetComponent e apaguei o Script "AnimaçaoInimigo", com isso joguei tudo dentro do script de IA do inimigo, como pode ver no script a baixo:
Vou dar uma melhorada nele depois, pode fechar o tópico.
Eu segui o conselho de usar o GetComponent e apaguei o Script "AnimaçaoInimigo", com isso joguei tudo dentro do script de IA do inimigo, como pode ver no script a baixo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class IA_Inimigo : MonoBehaviour
{
public int VidaTotal, VidaAtual, Dano;
public GameObject Alvo, BarraDeVida,Eu; //Alvo que vai ser seguido
public float VelocidadeMovimentos; //velocidade que vai seguir o alvo
public Animator Inimigo;
private bool InimigoMorreu;
private bool Andando, Atacando, AndandoAtacando;
void Start()
{
VidaTotal = 100;
VidaAtual = VidaTotal;
InimigoMorreu = false;
}
void Update()
{
float Distancia = Vector3.Distance(Eu.transform.position, Alvo.transform.position); //Recebe a posicao do alvo
if (Distancia < 7 & Distancia > 0.7) //posicao menor que 20 e maior que 0,9 ele faz o if
{
transform.LookAt(Alvo.transform); //new Vector3(Alvo.transform.position.x,transform.position.y, Alvo.transform.position.z)
transform.position = Vector3.Lerp (transform.position, Alvo.transform.position, VelocidadeMovimentos * Time.deltaTime); //segue o alvo
Inimigo.GetComponent<Animator>().SetBool("Andando", true);//ativa animacao de andar na hora de seguir
if (Distancia < 1) //se a distancia for menor que 1 ele já muda pra começar animacao de atacar
{
Inimigo.GetComponent<Animator>().SetBool("Andando", false);
Inimigo.GetComponent<Animator>().SetBool("Atacando", true);
}
else if (Distancia > 1)
{
Inimigo.GetComponent<Animator>().SetBool("Andando", true);
Inimigo.GetComponent<Animator>().SetBool("Atacando", false);
//Inimigo.GetComponent<Animator>().SetBool("AndandoAtacando", true);
}
}
else if (Distancia > 20) //se a distancia for maior que 20 ele fica na animacao de parado
{
Inimigo.GetComponent<Animator>().SetBool("Andando", false);
Inimigo.GetComponent<Animator>().SetBool("Atacando", false);
Inimigo.GetComponent<Animator>().SetBool("AndandoAtacando", false);
}
if (BarraDeVida.transform.localScale.x <= 0)
{
BarraDeVida.transform.localScale = new Vector3(0,0,0);
}
if (VidaAtual <= 0)
{
Inimigo.GetComponent<Animator>().SetBool("InimigoMorreu", true);
Debug.Log("Matouuuu");
Inimigo.GetComponent<Animator>().SetBool("Andando", false);
Inimigo.GetComponent<Animator>().SetBool("Atacando", false);
Inimigo.GetComponent<Animator>().SetBool("AndandoAtacando", false);
StartCoroutine("Morte");
}
}
void OnTriggerEnter(Collider Player)
{
if (Player.gameObject.tag == "EspadaPlayer")
{
VidaAtual -= Dano;
BarraDeVida.transform.localScale += new Vector3(-0.1f, 0, 0);
print("Sofreu Dano Inimigo");
}
}
IEnumerator Morte()
{
yield return new WaitForSeconds(3);
Destroy(gameObject);
}
}
Vou dar uma melhorada nele depois, pode fechar o tópico.
Tópicos semelhantes
» [RESOLVIDO] Player Sair Da animaçao
» [RESOLVIDO] Estou com um problema no script de animação
» [RESOLVIDO] Player correndo e animação quando estiver colidindo
» [RESOLVIDO]Script de movimentação, problema para trocar de animação
» [RESOLVIDO] Detectar quando a animação do animator acaba para dar dano no player
» [RESOLVIDO] Estou com um problema no script de animação
» [RESOLVIDO] Player correndo e animação quando estiver colidindo
» [RESOLVIDO]Script de movimentação, problema para trocar de animação
» [RESOLVIDO] Detectar quando a animação do animator acaba para dar dano no player
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos