//Ajuda com animação//
4 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
//Ajuda com animação//
Boa trade a todos, seguinte galera to batendo cabeça aqui to com uma animação em um personagem que fica deitado e quando entro em um collider ele executa a animação de se levantar porém quando se levanta atravessa o chão a metade do corpo e depois de ficar em pé volta ao normal, então gostaria de saber como resolver este problema por favor.
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: //Ajuda com animação//
Alguem Porfavor me ajuda...
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: //Ajuda com animação//
Você já pegou a animação pronta ou foi você quem fez?
Não sei se entendi bem. Ele deita ao bater em um collider e depois levanta, é isso?
Já reparou se quando ele levanta, o collider do personagem não está abaixo de outro collider ou, se a posição Y dele na animação está sendo alterada?
É que é um pouco difícil entender sem saber como a animação é e sem um trecho do script que controla a animação.
Abraços!
Não sei se entendi bem. Ele deita ao bater em um collider e depois levanta, é isso?
Já reparou se quando ele levanta, o collider do personagem não está abaixo de outro collider ou, se a posição Y dele na animação está sendo alterada?
É que é um pouco difícil entender sem saber como a animação é e sem um trecho do script que controla a animação.
Abraços!
Re: //Ajuda com animação//
ola amigo baixei a animacao no mixamo e ela comeca com ele deitadon e assim que entro no colliderenter pra fazer a animacao no meio da animacao ele fica com metade do corpo abaixo do chao
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: //Ajuda com animação//
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(NavMeshAgent))]
public class Inimigo : MonoBehaviour {
public float vida = 100;
bool chamouMorte = false;
public GameObject Jogador;
private NavMeshAgent nav;
public bool podeatacar;
Animator anim;
public Transform target;
public float Distancia;
void Start () {
podeatacar=true;
anim = GetComponent<Animator>();
Jogador = GameObject.FindWithTag("Player");
nav = GetComponent<NavMeshAgent>();
}
void Update () {
if (vida <= 0) {
vida = 0;
if (chamouMorte == false) {
chamouMorte = true;
StartCoroutine ("Morrer");
}
}
//if(Distancia<{
//GetComponent //}else{
//GetComponent<Advanced_AI>().enabled = true;
//}
Distancia = Vector3.Distance(transform.position,Jogador.transform.position);
if(Distancia>7){
GetComponent<NavMeshAgent>().speed = 0;
anim.SetBool("parado",true);
}
if(Distancia<7){
anim.SetBool("parado",true);
GetComponent Olhar();
}
if(Distancia<5){
anim.SetBool("andando",true);
GetComponent Seguir();
}else{
anim.SetBool("andando",false);
Olhar();
}
if(Distancia<1.2f){
anim.SetBool("andando",false);
anim.SetBool("atacando",true);
Atacar();
GetComponent
}else{
anim.SetBool("atacando",false);
//GetComponent<NavMeshAgent>().speed = 0.5f;
http://anim.SetBool("andando",true);
}
}
void Atacar(){
if(podeatacar==true){
StartCoroutine("TempoAtaque");
StartCoroutine("Tempovida");
}
}
IEnumerator TempoAtaque(){
podeatacar = false;
yield return new WaitForSeconds(2);
podeatacar = true;
}
IEnumerator Tempovida(){
if(podeatacar==false){
yield return new WaitForSeconds(3.5f);
Jogador.GetComponent<Vida>().Vida_ -=20;
}
}
void Olhar(){
Quaternion targetRotation;
targetRotation = Quaternion.LookRotation(target.transform.position - transform.position);
targetRotation = Quaternion.Euler(new Vector3(transform.eulerAngles.x , targetRotation.eulerAngles.y, transform.eulerAngles.z));
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, 4 * Time.deltaTime);
}
void Seguir(){
nav.destination = Jogador.transform.position;
}
IEnumerator Morrer(){
//GetComponent<MeshRenderer> ().material.color = Color.red;
anim.SetBool("atacando",false);
anim.SetBool("andando",false);
anim.SetBool("parado",false);
anim.SetBool("morrendo",true);
GetComponent<NavMeshAgent>().enabled = false;
yield return new WaitForSeconds (2);
GetComponent<Inimigo>().enabled = false;
yield return new WaitForSeconds (;
//Destroy (gameObject);
}
}
using System.Collections;
[RequireComponent(typeof(NavMeshAgent))]
public class Inimigo : MonoBehaviour {
public float vida = 100;
bool chamouMorte = false;
public GameObject Jogador;
private NavMeshAgent nav;
public bool podeatacar;
Animator anim;
public Transform target;
public float Distancia;
void Start () {
podeatacar=true;
anim = GetComponent<Animator>();
Jogador = GameObject.FindWithTag("Player");
nav = GetComponent<NavMeshAgent>();
}
void Update () {
if (vida <= 0) {
vida = 0;
if (chamouMorte == false) {
chamouMorte = true;
StartCoroutine ("Morrer");
}
}
//if(Distancia<{
//GetComponent
//GetComponent<Advanced_AI>().enabled = true;
//}
Distancia = Vector3.Distance(transform.position,Jogador.transform.position);
if(Distancia>7){
GetComponent<NavMeshAgent>().speed = 0;
anim.SetBool("parado",true);
}
if(Distancia<7){
anim.SetBool("parado",true);
GetComponent
}
if(Distancia<5){
anim.SetBool("andando",true);
GetComponent
}else{
anim.SetBool("andando",false);
Olhar();
}
if(Distancia<1.2f){
anim.SetBool("andando",false);
anim.SetBool("atacando",true);
Atacar();
GetComponent
}else{
anim.SetBool("atacando",false);
//GetComponent<NavMeshAgent>().speed = 0.5f;
http://anim.SetBool("andando",true);
}
}
void Atacar(){
if(podeatacar==true){
StartCoroutine("TempoAtaque");
StartCoroutine("Tempovida");
}
}
IEnumerator TempoAtaque(){
podeatacar = false;
yield return new WaitForSeconds(2);
podeatacar = true;
}
IEnumerator Tempovida(){
if(podeatacar==false){
yield return new WaitForSeconds(3.5f);
Jogador.GetComponent<Vida>().Vida_ -=20;
}
}
void Olhar(){
Quaternion targetRotation;
targetRotation = Quaternion.LookRotation(target.transform.position - transform.position);
targetRotation = Quaternion.Euler(new Vector3(transform.eulerAngles.x , targetRotation.eulerAngles.y, transform.eulerAngles.z));
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, 4 * Time.deltaTime);
}
void Seguir(){
nav.destination = Jogador.transform.position;
}
IEnumerator Morrer(){
//GetComponent<MeshRenderer> ().material.color = Color.red;
anim.SetBool("atacando",false);
anim.SetBool("andando",false);
anim.SetBool("parado",false);
anim.SetBool("morrendo",true);
GetComponent<NavMeshAgent>().enabled = false;
yield return new WaitForSeconds (2);
GetComponent<Inimigo>().enabled = false;
yield return new WaitForSeconds (;
//Destroy (gameObject);
}
}
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: //Ajuda com animação//
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(NavMeshAgent))]
public class Inimigo : MonoBehaviour {
public float vida = 100;
bool chamouMorte = false;
public GameObject Jogador;
private NavMeshAgent nav;
public bool podeatacar;
Animator anim;
public Transform target;
public float Distancia;
void Start () {
podeatacar=true;
anim = GetComponent<Animator>();
Jogador = GameObject.FindWithTag("Player");
nav = GetComponent<NavMeshAgent>();
}
void Update () {
if (vida <= 0) {
vida = 0;
if (chamouMorte == false) {
chamouMorte = true;
StartCoroutine ("Morrer");
}
}
//if(Distancia<8){
//GetComponent<Advanced_AI>().enabled = false;
//}else{
//GetComponent<Advanced_AI>().enabled = true;
//}
Distancia = Vector3.Distance(transform.position,Jogador.transform.position);
if(Distancia>7){
GetComponent<NavMeshAgent>().speed = 0;
anim.SetBool("parado",true);
}
if(Distancia<7){
anim.SetBool("parado",true);
GetComponent<NavMeshAgent>().speed = 0;
Olhar();
}
if(Distancia<5){
anim.SetBool("andando",true);
GetComponent<NavMeshAgent>().speed = 0.5f;
Seguir();
}else{
anim.SetBool("andando",false);
Olhar();
}
if(Distancia<1.2f){
anim.SetBool("andando",false);
anim.SetBool("atacando",true);
Atacar();
GetComponent<NavMeshAgent>().speed = 0;
}else{
anim.SetBool("atacando",false);
//GetComponent<NavMeshAgent>().speed = 0.5f;
//anim.SetBool("andando",true);
}
}
void Atacar(){
if(podeatacar==true){
StartCoroutine("TempoAtaque");
StartCoroutine("Tempovida");
}
}
IEnumerator TempoAtaque(){
podeatacar = false;
yield return new WaitForSeconds(2);
podeatacar = true;
}
IEnumerator Tempovida(){
if(podeatacar==false){
yield return new WaitForSeconds(3.5f);
Jogador.GetComponent<Vida>().Vida_ -=20;
}
}
void Olhar(){
Quaternion targetRotation;
targetRotation = Quaternion.LookRotation(target.transform.position - transform.position);
targetRotation = Quaternion.Euler(new Vector3(transform.eulerAngles.x , targetRotation.eulerAngles.y, transform.eulerAngles.z));
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, 4 * Time.deltaTime);
}
void Seguir(){
nav.destination = Jogador.transform.position;
}
IEnumerator Morrer(){
//GetComponent<MeshRenderer> ().material.color = Color.red;
anim.SetBool("atacando",false);
anim.SetBool("andando",false);
anim.SetBool("parado",false);
anim.SetBool("morrendo",true);
GetComponent<NavMeshAgent>().enabled = false;
yield return new WaitForSeconds (2);
GetComponent<Inimigo>().enabled = false;
yield return new WaitForSeconds (8);
//Destroy (gameObject);
}
}
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: //Ajuda com animação//
https://www.mixamo.com/store/#/search?query=lying
Seria esta animação Getting Up
Seria esta animação Getting Up
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: //Ajuda com animação//
Script Errado o Certo
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(NavMeshAgent))]
[RequireComponent(typeof(AudioSource))]
public class Zombie_2 : MonoBehaviour {
Animator anim;
bool podeatacar;
bool chamouMorte = false;
NavMeshAgent nav;
float Distancia, Velocidade = 0.2f;
public Transform target;
public GameObject Jogador;
public float vida = 100;
void Start () {
podeatacar=true;
anim = GetComponent<Animator>();
nav = GetComponent<NavMeshAgent>();
}
void OnTriggerEnter(){
anim.SetBool("levantado",true);
Destroy(GetComponent<BoxCollider>(),8);
}
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: //Ajuda com animação//
Isto acontece por que a animação em si não detecta colisões... ela não tem estados de física, apenas pequenos teleportes, que feitos continuamente, dão a impressão de movimento.
O que você pode fazer é um movimento suave para cima enquanto a animação acontece... pode fazer isto utilizando o Translate, Rigidbody.Velocity, characterController.Move, etc, etc... depende do que o seu jogador tem.
O que você pode fazer é um movimento suave para cima enquanto a animação acontece... pode fazer isto utilizando o Translate, Rigidbody.Velocity, characterController.Move, etc, etc... depende do que o seu jogador tem.
Re: //Ajuda com animação//
eu já tiver esse problema, eu resolvi usando o collisor(que pegue o player em pé) e um rigidbody, e configurei o rigidbody assim, observe também os eixos do seu player, antes e durante as animações.
isso resolver meu problema espero que te ajude!
isso resolver meu problema espero que te ajude!
sabbath- MembroAvançado
- PONTOS : 3363
REPUTAÇÃO : 24
Respeito as regras :
Re: //Ajuda com animação//
Walew galera vou tentar aqui, obrigado.
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Tópicos semelhantes
» Ajuda Urgente como chamo a animação no script alguém poderia dar uma ajuda???
» (Ajuda) Animação
» Ajuda animação
» (ajuda ) animação
» Ajuda com animação
» (Ajuda) Animação
» Ajuda animação
» (ajuda ) animação
» Ajuda com animação
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos