[RESOLVIDO] IA em jogo top-down 2D
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] IA em jogo top-down 2D
Estou trabalhando em uma IA para uma atualização do meu projeto, a ideia é basicamente ela patrulhar a região (feito) e se o player entrasse no raio de visão dele que seria de 160 graus ou 180, ele chamaria ajuda ou atacaria o jogador. Bem ai que se encontra o problema, não consigo fazer o raio de visão da maneira que fique bom, principalmente que é um jogo stealth.
Ele patrulha a região, mas o raycast não se vira junto com inimigo, então mesmo quando ele tá olhando para direita ou para cima o raio vai na mesma direção (para baixo). Fora que também que ele apenas lança um raio, então se ele ficar na diagonal ele não é visto, mesmo estando na frente do inimigo.
Obs: É algo no estilo da IA do metal gear do msx.
Obs: É um jogo top-down.
Desde já agradeço a ajuda.
Ele patrulha a região, mas o raycast não se vira junto com inimigo, então mesmo quando ele tá olhando para direita ou para cima o raio vai na mesma direção (para baixo). Fora que também que ele apenas lança um raio, então se ele ficar na diagonal ele não é visto, mesmo estando na frente do inimigo.
Obs: É algo no estilo da IA do metal gear do msx.
Obs: É um jogo top-down.
Desde já agradeço a ajuda.
Última edição por dstaroski em Ter Jul 03, 2018 6:10 pm, editado 1 vez(es) (Motivo da edição : Resolvido)
Priste_Hell- Avançado
- PONTOS : 2978
REPUTAÇÃO : 17
Idade : 23
Áreas de atuação : Programador e roteirista.
Respeito as regras :
Re: [RESOLVIDO] IA em jogo top-down 2D
Bom dia brow! em relação a desenhar a visão do inimigo, talvez esse tuto que eu fiz te ajude em algo:Priste_Hell escreveu:Estou trabalhando em uma IA para uma atualização do meu projeto, a ideia é basicamente ela patrulhar a região (feito) e se o player entrasse no raio de visão dele que seria de 160 graus ou 180, ele chamaria ajuda ou atacaria o jogador. Bem ai que se encontra o problema, não consigo fazer o raio de visão da maneira que fique bom, principalmente que é um jogo stealth.
Ele patrulha a região, mas o raycast não se vira junto com inimigo, então mesmo quando ele tá olhando para direita ou para cima o raio vai na mesma direção (para baixo). Fora que também que ele apenas lança um raio, então se ele ficar na diagonal ele não é visto, mesmo estando na frente do inimigo.
Obs: É algo no estilo da IA do metal gear do msx.
Obs: É um jogo top-down.
Desde já agradeço a ajuda.
Abraço!
Re: [RESOLVIDO] IA em jogo top-down 2D
Ótimo vídeo... Passei alguns dias buscando a solução para meu dilema e acabei por achar algo, porém suas aplicações eram em 3D, tentei converter para 2D, entretanto ocorre alguns bugues.
https://imgur.com/MHorF2K
Assim que ele ficar com o eixo z no 0.
https://imgur.com/GZxOJ0f
E por fim ele fica assim com afastamento no eixo z.
https://imgur.com/Bn54Mz4
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class FieldOfView : MonoBehaviour
{
public float viewRadius;
[Range(0, 360)]
public float viewAngle;
public LayerMask targetMask;
public LayerMask obstacleMask;
[HideInInspector]
public List<Transform> visibleTargets = new List<Transform>();
void Start()
{
StartCoroutine("FindTargetsWithDelay", .2f);
}
IEnumerator FindTargetsWithDelay(float delay)
{
while (true)
{
yield return new WaitForSeconds(delay);
FindVisibleTargets();
}
}
void FindVisibleTargets()
{
visibleTargets.Clear();
Collider2D[] targetsInViewRadius = Physics2D.OverlapCircleAll(transform.position, viewRadius, targetMask);
for (int i = 0; i < targetsInViewRadius.Length; i++)
{
Transform target = targetsInViewRadius[i].transform;
Vector3 dirToTarget = (target.position - transform.position).normalized;
if (Vector3.Angle(transform.forward, dirToTarget) < viewAngle / 2)
{
float dstToTarget = Vector2.Distance(transform.position, target.position);
if (!Physics2D.Raycast(transform.position, dirToTarget, dstToTarget, obstacleMask))
{
visibleTargets.Add(target);
}
}
}
}
public Vector2 DirFromAngle(float angleInDegrees, bool angleIsGlobal)
{
if (!angleIsGlobal)
{
angleInDegrees -= transform.eulerAngles.z;
}
return new Vector2(Mathf.Sin(angleInDegrees * Mathf.Deg2Rad), Mathf.Cos(angleInDegrees * Mathf.Deg2Rad));
}
}
https://imgur.com/MHorF2K
Assim que ele ficar com o eixo z no 0.
https://imgur.com/GZxOJ0f
E por fim ele fica assim com afastamento no eixo z.
https://imgur.com/Bn54Mz4
Priste_Hell- Avançado
- PONTOS : 2978
REPUTAÇÃO : 17
Idade : 23
Áreas de atuação : Programador e roteirista.
Respeito as regras :
Re: [RESOLVIDO] IA em jogo top-down 2D
Resolvi o problema.
Para aqueles que quiserem usar, apenas alterem a linha:
para:
Caso queiram posto o codigo do editor.
Para aqueles que quiserem usar, apenas alterem a linha:
- Código:
if (Vector3.Angle(transform.forward, dirToTarget) < viewAngle / 2)
para:
- Código:
if (Vector3.Angle(transform.up, dirToTarget) < viewAngle / 2)
Caso queiram posto o codigo do editor.
Priste_Hell- Avançado
- PONTOS : 2978
REPUTAÇÃO : 17
Idade : 23
Áreas de atuação : Programador e roteirista.
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] IA para jogo 2d
» [RESOLVIDO] Otimização do jogo
» [RESOLVIDO] Objetivo do jogo
» [RESOLVIDO] Pausar o Jogo
» [RESOLVIDO] Salvar Nível de jogo!!
» [RESOLVIDO] Otimização do jogo
» [RESOLVIDO] Objetivo do jogo
» [RESOLVIDO] Pausar o Jogo
» [RESOLVIDO] Salvar Nível de jogo!!
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos