[RESOLVIDO] Inverter o sprite para a direçao que o personagem anda.
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Inverter o sprite para a direçao que o personagem anda.
Ola a todos estou tentando fazer o Flip do sprite do NPC para que ele corresponda a direçao que caminha , o jogo em si é em 3d mas o personagem e outros elementos do jogo sao com sprites em 2d. Estou usando um script para que o NPC siga o alvo usando o NaveMeshAgent, tentei recorrer com ajuda da Luzia uma IA e nao consegui fazer funcionar. Um problema que notei é que o Debug.Log "Indo para a esquerda'' nao esta sendo chamado entao o problema esta nessa linha ''else if (direcaoAlvo.x < 0)'' Nao inverte o sprite. Nao sei como resolver. Se alguem puder me ajudar obrigado.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
[RequireComponent(typeof(NavMeshAgent))]
public class LadraoIrParaSaida : MonoBehaviour
{
public float distanciaMinima = 2;
public Transform alvo;
private NavMeshAgent navMeshAgent;
private SpriteRenderer spriteRenderer;
void Start()
{
navMeshAgent = GetComponent<NavMeshAgent>();
spriteRenderer = GetComponentInChildren<SpriteRenderer>();
}
void Update()
{
if (Vector3.Distance(transform.position, alvo.position) <= distanciaMinima)
return;
Vector3 direcaoAlvo = (alvo.position - transform.position).normalized;
if (direcaoAlvo.x > 0)
{
spriteRenderer.flipX = false; // Não inverte o sprite
Debug.Log("Indo para a direita");
}
else if (direcaoAlvo.x < 0) // AQUI ESTA O PROBLEMA. OU A ORIGEM EM OUTRA LINHA DE CODIGO.
{
spriteRenderer.flipX = true; // Inverte o sprite
Debug.Log("Indo para a esquerda");
}
navMeshAgent.SetDestination(alvo.position);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
[RequireComponent(typeof(NavMeshAgent))]
public class LadraoIrParaSaida : MonoBehaviour
{
public float distanciaMinima = 2;
public Transform alvo;
private NavMeshAgent navMeshAgent;
private SpriteRenderer spriteRenderer;
void Start()
{
navMeshAgent = GetComponent<NavMeshAgent>();
spriteRenderer = GetComponentInChildren<SpriteRenderer>();
}
void Update()
{
if (Vector3.Distance(transform.position, alvo.position) <= distanciaMinima)
return;
Vector3 direcaoAlvo = (alvo.position - transform.position).normalized;
if (direcaoAlvo.x > 0)
{
spriteRenderer.flipX = false; // Não inverte o sprite
Debug.Log("Indo para a direita");
}
else if (direcaoAlvo.x < 0) // AQUI ESTA O PROBLEMA. OU A ORIGEM EM OUTRA LINHA DE CODIGO.
{
spriteRenderer.flipX = true; // Inverte o sprite
Debug.Log("Indo para a esquerda");
}
navMeshAgent.SetDestination(alvo.position);
}
}
Robins Sandi- Iniciante
- PONTOS : 368
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Inverter o sprite para a direçao que o personagem anda.
Bom dia, esse código não estava fazendo o NPC flipar para a esquerda .Descobri o que causa isso mas não sei resolver. Como o piso é de dois andares e o NPC sobe por uma escada e o alvo está no segundo andar ocorre essa falha , eu mudei o Alvo para o primeiro andar e funcionou normalmente , também se eu movimentar o alvo pelo inspetor passando pra direção oposta do NPC durante o jogo quando o NPC ja estiver no segundo andar o Flip ocorre. Parece que esta tendo uma falha na verificação da posição do Alvo ou do NPC quando estao em andarem diferentes.
Robins Sandi- Iniciante
- PONTOS : 368
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Inverter o sprite para a direçao que o personagem anda.
Solucionei o problema , estava baseado na posiçao do alvo, entao o correto foi baseado na velocidade dai ele flipa. o codigo correto esta abaixo para ajudar os outros.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
[RequireComponent(typeof(NavMeshAgent))]
public class LadraoIrParaSaida : MonoBehaviour
{
public Transform alvo;
private NavMeshAgent navMeshAgent;
private SpriteRenderer spriteRenderer;
void Start()
{
navMeshAgent = GetComponent<NavMeshAgent>();
spriteRenderer = GetComponentInChildren<SpriteRenderer>();
}
void Update()
{
if (alvo != null)
{
// Movimentar o NPC até o alvo usando o NavMeshAgent
navMeshAgent.SetDestination(alvo.position);
// Obtém a direção e velocidade do NavMeshAgent
Vector3 velocity = navMeshAgent.velocity;
// Verifica a direção do movimento
if (velocity.x > 0)
{
// Aplica o flip do sprite para a direita
spriteRenderer.flipX = false;
}
else if (velocity.x < 0)
{
// Aplica o flip do sprite para a esquerda
spriteRenderer.flipX = true;
}
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
[RequireComponent(typeof(NavMeshAgent))]
public class LadraoIrParaSaida : MonoBehaviour
{
public Transform alvo;
private NavMeshAgent navMeshAgent;
private SpriteRenderer spriteRenderer;
void Start()
{
navMeshAgent = GetComponent<NavMeshAgent>();
spriteRenderer = GetComponentInChildren<SpriteRenderer>();
}
void Update()
{
if (alvo != null)
{
// Movimentar o NPC até o alvo usando o NavMeshAgent
navMeshAgent.SetDestination(alvo.position);
// Obtém a direção e velocidade do NavMeshAgent
Vector3 velocity = navMeshAgent.velocity;
// Verifica a direção do movimento
if (velocity.x > 0)
{
// Aplica o flip do sprite para a direita
spriteRenderer.flipX = false;
}
else if (velocity.x < 0)
{
// Aplica o flip do sprite para a esquerda
spriteRenderer.flipX = true;
}
}
}
}
Robins Sandi- Iniciante
- PONTOS : 368
REPUTAÇÃO : 1
Respeito as regras :
![-](https://2img.net/i/empty.gif)
» [RESOLVIDO] Rotacionar personagem suavemente na direção da câmera
» [RESOLVIDO] Rotacionar Personagem De Acordo Com a Direção Do Analógico
» [RESOLVIDO] Como faço para o personagem entrar e sair do carro?
» [Resolvido] Como usar o Multi Touch para movimentar um personagem ?
» [RESOLVIDO] Preciso de ajuda com joystic para personagem 2D
» [RESOLVIDO] Rotacionar Personagem De Acordo Com a Direção Do Analógico
» [RESOLVIDO] Como faço para o personagem entrar e sair do carro?
» [Resolvido] Como usar o Multi Touch para movimentar um personagem ?
» [RESOLVIDO] Preciso de ajuda com joystic para personagem 2D
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos