duvida navmesh
2 participantes
Página 1 de 1
duvida navmesh
fala galera, seguinte de tanto esperar ajuda pra resolver meu problema, eu consegui achar um jeito que resolvesse, usando o navmesh no player, isso evita dele ficar quicando quando desce uma colina, e é simplesmente perfeito, desvia de obstáculos, não precisa ficar colocando boxcolider em tudo que existe, não tenho que resolver problema do player quicando também quando trisca nas coisas, tipo parede e talz, funciona lindamente, pra ser bem sincero eu acho que nos ensinaram de um jeito muito errado como fazer o player andar hehehe, o do jeito que fiz, ficou muito parecido com o que fejo em vários jogos inclusive wow ai então me veio uns problemas, (sempre tem) ainda não consegui fazer com que ele pulasse, com nenhum dos sistemas que usava antes, rigidbody, translate e talz, alguém sabe como resolver?
2ª duvida, com o navmesh ativo, quando o player chega na beira de uma encosta, esbarrancada, ele não cai ele trava ali mesmo no final do negocio que é criado com o navmesh, tem como contornar isso?
2ª duvida, com o navmesh ativo, quando o player chega na beira de uma encosta, esbarrancada, ele não cai ele trava ali mesmo no final do negocio que é criado com o navmesh, tem como contornar isso?
Édipo- MembroAvançado
- PONTOS : 3808
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Re: duvida navmesh
Eu postei antes falando que esse método que você está usando "resolve", mas causa outros problemas. Sugeri então uma solução que envolve o uso do Navmesh Link, mas ele não é dinâmico, ou seja, você precisa colocar em locais fixos e a animação entre as duas áreas não é legal, é feita usando uma espécie de arco com a velocidade constante, então fica bem ruim o resultado.
Depois eu fui olhar seus outros posts e vi que você mesmo sugeriu uma solução que encontrou em algum lugar na net, como imaginei que sua dificuldade fosse em implementar e adaptar isso ao seu Character controller, fiz a "solução" num script separado, que não precisa integrar no outro código, basta jogar no character controller e ajustar a altura do offset que ele vai respeitar as descidas e permanecer preso ao chão, sem dar os pulinhos.
Esse offset é uma distância entre a origem do objeto e onde deve ser o chão, no exemplo que estou enviando, usei uma capsula como player, por ter 2m de altura e a origem ser localizada no centro, o valor do offset que usei foi igual a 1. Então eu disparo um raycast pra baixo, pego a posição do hit e somo 1 no eixo Y, assim o personagem não afunda no chão.
Segue o projeto:
Projeto
O código é bem simples, pode ser melhorado com checagem do ângulo da descida e desativado no caso de um pulo, mas aí dependo do seu código pra saber como posso adaptar melhor.
usei a LateUpdate, pois nela o player já teve a posição alterada pelo Character controller, então basta mover pra posição do hit que resolve o problema.
Baixe o projeto e dê uma olhada.
Depois eu fui olhar seus outros posts e vi que você mesmo sugeriu uma solução que encontrou em algum lugar na net, como imaginei que sua dificuldade fosse em implementar e adaptar isso ao seu Character controller, fiz a "solução" num script separado, que não precisa integrar no outro código, basta jogar no character controller e ajustar a altura do offset que ele vai respeitar as descidas e permanecer preso ao chão, sem dar os pulinhos.
Esse offset é uma distância entre a origem do objeto e onde deve ser o chão, no exemplo que estou enviando, usei uma capsula como player, por ter 2m de altura e a origem ser localizada no centro, o valor do offset que usei foi igual a 1. Então eu disparo um raycast pra baixo, pego a posição do hit e somo 1 no eixo Y, assim o personagem não afunda no chão.
Segue o projeto:
Projeto
O código é bem simples, pode ser melhorado com checagem do ângulo da descida e desativado no caso de um pulo, mas aí dependo do seu código pra saber como posso adaptar melhor.
usei a LateUpdate, pois nela o player já teve a posição alterada pelo Character controller, então basta mover pra posição do hit que resolve o problema.
Baixe o projeto e dê uma olhada.
- Código:
using UnityEngine;
public class ControleSlope : MonoBehaviour
{
private Transform player;
public float offsetY = 1;
private void Start()
{
player = GetComponent<Transform>();
}
void LateUpdate()
{
Ray ray = new Ray(transform.position, -transform.up);
RaycastHit hit;
if(Physics.Raycast(ray, out hit, 2))
{
player.position = hit.point + transform.up * offsetY;
}
}
}
Fagner- Moderador
- PONTOS : 4242
REPUTAÇÃO : 665
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos