SchultzGames
Para tirar dúvidas, crie um tópico especifico na área "Dúvidas em Geral" e aguarde ser respondido. Evite comentar em tópicos não relacionados a sua dúvida :D
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
Pulo Na Unity projeto 3d
Como faço para atirar a bola na mesma direção que aponta a seta direcional?
Simulador de Controle de Tráfego Aéreo
Tenho um jogo disponivel na steam
Erro unity - textMeshPro
Transição de cenas
Como funciona o " sistema base" do game?
R$: Orçamento para um jogo 2D
Alguém manja de iluminação na unity?
Armadilha do Super Meat Boy
Tiro continuar em linha reta depois de chegar ao "alvo"
Toogle, é possível carregar estado de um PlayerPrefs?
Jogo de Terror em Desenvolvimento, preciso de programador.
Problema do Animator Unity3D
UNITY REMOTE NÃO FUNCIONA O QUE FAZER?
Como pego um valor exato da rotação no transform?
[TUTORIAL] Shader de renderização baseada em física
Carregar personagem + scripts na nova cena
Itens coletados reaparecem na cena ao retornar para a fase
Como fazer player ir do chão pro teto e do teto pro chão (2D game)
[TUTORIAL] Sistema de tiro com RAYCAST (várias armas, mira laser, munição, dano, etc, etc)
Queria ajuda para fazer um sistema de rastro no personagen
[TUTORIAL] Fazer objeto se mover em pontos diferentes (Serve para 2D e 3D).
Qual a melhor forma de fazer um efeito parecido com um launchpad[UNITY]?
dúvida para fazer sistema de som de passos em terreno
Movimentação de BoardGame
Produção de um Roteiro - Arquétipos.
Como gerenciar o Sorting Layer de varios objetos em cena
Como colocar um boneco pra andar pelo mapa?
Não tá dando mais Bake. O que pode ser?Não aparece mais as áreas em azul em
Como fazer um corredor ''infinito'' na unity?
Livro de Unity2D
Como posso saber quanto de memória o meu projeto está pesando?
Boas E velhas sombras alguem resolve??
Qual seria a maneira correta de fazer a rotação de um obj
Importar arquivos externo para dentro do unity em tempo de execução
Layouts de interface para Unity3D
Erro no meu jogo de plataforma 2D
Rapper Simulator (demo) mobile
Reduzir tamanho da textura
Unity + Photon 2
Game view incorreto
DUVIDA DO SISTEMA DE CORPO A CORPO
Erro no WebGl
Jogo 2D Multiplayer é trabalhoso?
Sistema completo de FPS, (by u/KFriske)
Preciso De Um Programador! Para Um Game Fps!
MOD MINECRAFT JAVA (Formação de Equipe).
2 Artistas procuram Programador experiente em UNITY 2D
OPORTUNIDADE DE FREELANCE
Busco alguem pra fazer algumas programações basicas (PAGO EM DINHEIRO)
[TUTORIAL] MENU PRINCIPAL - UNITY 5 (5.3 ou superior) (Com UI)
Alguém precisando de um artists pixel?
[TUTORIAL] Unity 2019.4 ou superior - PRESETS
[RESOLVIDO] Unity - Dúvida
A unity não abre o projeto!!
[Dúvida] Script retorna erro apenas quando não esta selecionado
[RESOLVIDO] Jogo 2D unity - trocar sprite ao apertar botão
WaitForSeconds não funciona
ToString(); não funciona
o meu terrain ficou branco como poss resolver?
Lançar Granada
Criação de um jogo de sobrevivência
[ASSET] UDost Jump Projeto
[TUTORIAL] Lanterna
[TUTORIAL] Sistema de Grappling Hook / Corda e Gancho
Não consigo interagir com o objeto no app
[RESOLVIDO] Criar textura com fundo transparente
Meu Projeto mobile 2D (RYB 2DASH)
como fazer meu personagem correr sozinho?
[_____CRONOGRAMA DO CANAL_____]
[ASSET] Script Arma Completo Incluso Recuo. Incluso outros Scripts
[RESOLVIDO] ALGUEM ME AJUDA COM A MUSICA NA UNITY
Por que a rotação do Box Collider não está certa?
Caminhar do inimigo!!
[RESOLVIDO] Animação não funciona - Unity 3D
Contratação de freelancer em programação para unity
build settings parou de funcionar!!!
[TUTORIAL] Sistema de fome, sede, barra de vida, barra de estamina, itens e dano por queda
Como acelerar uma uma animação por script?
Jogo se conectando ao play games toda vez que inicia o menu.
procuro modeladores e artista para projeto de Moba
Criar tutorial antes do jogo
Parallax no Menu
[TUTORIAL] Como fazer um TELEPORTE
[Dúvida] comunicação de multiplas linguagens c/ o xml/json desempenho
Ajuda com INT
[RESOLVIDO] Clicar em um botão e o personagem se mover por uma distância.
Script de pegar um item/coletável pressionando a tecla ''E''
alterar Transform via script
Como usar um personagem low poly como personagem jogavel
Loja de roupa para personagem 2D
Fazer imagem piscar uma vez depois de um determinado tempo
O QUE FAZER PARA O PERSONAGEM DETECTAR O TERRAIN ?
[RESOLVIDO] Não acho o fps controller da unity
SOU MODELADOR SE TIVER ALGUEM PRECISANDO AI ME CONTATE
Projeto Quiz Ajuda
Outline 2d em cena 3d
é possivel criar uma animação para multiplos objetos?
Ontem à(s) 10:58 pm
Ontem à(s) 8:36 pm
Ontem à(s) 2:11 pm
Ontem à(s) 1:17 pm
Ontem à(s) 12:01 pm
Seg Out 19, 2020 9:09 pm
Seg Out 19, 2020 9:01 pm
Seg Out 19, 2020 3:34 pm
Seg Out 19, 2020 2:22 pm
Seg Out 19, 2020 1:51 pm
Dom Out 18, 2020 11:33 pm
Dom Out 18, 2020 9:54 pm
Dom Out 18, 2020 8:52 pm
Dom Out 18, 2020 8:02 pm
Dom Out 18, 2020 3:19 pm
Dom Out 18, 2020 1:26 pm
Dom Out 18, 2020 1:17 am
Sab Out 17, 2020 10:37 pm
Sab Out 17, 2020 10:01 pm
Sab Out 17, 2020 9:46 pm
Sab Out 17, 2020 8:56 pm
Sex Out 16, 2020 10:24 pm
Sex Out 16, 2020 9:56 pm
Sex Out 16, 2020 8:54 pm
Sex Out 16, 2020 1:24 pm
Sex Out 16, 2020 11:41 am
Sex Out 16, 2020 11:08 am
Sex Out 16, 2020 2:48 am
Qui Out 15, 2020 11:45 pm
Qui Out 15, 2020 9:58 pm
Qui Out 15, 2020 2:55 pm
Qui Out 15, 2020 2:49 pm
Qui Out 15, 2020 12:56 pm
Qui Out 15, 2020 10:32 am
Qui Out 15, 2020 4:20 am
Qui Out 15, 2020 12:00 am
Qua Out 14, 2020 11:42 pm
Qua Out 14, 2020 10:03 pm
Qua Out 14, 2020 9:29 pm
Qua Out 14, 2020 7:34 pm
Qua Out 14, 2020 7:31 pm
Qua Out 14, 2020 7:25 pm
Qua Out 14, 2020 7:15 pm
Qua Out 14, 2020 7:09 pm
Ter Out 13, 2020 11:15 pm
Ter Out 13, 2020 7:14 pm
Ter Out 13, 2020 1:58 pm
Ter Out 13, 2020 1:55 pm
Ter Out 13, 2020 1:53 pm
Ter Out 13, 2020 1:52 pm
Ter Out 13, 2020 1:51 pm
Ter Out 13, 2020 11:37 am
Ter Out 13, 2020 1:07 am
Seg Out 12, 2020 10:47 am
Dom Out 11, 2020 10:52 pm
Dom Out 11, 2020 7:53 pm
Dom Out 11, 2020 7:50 pm
Dom Out 11, 2020 7:45 pm
Dom Out 11, 2020 7:21 pm
Dom Out 11, 2020 4:26 pm
Dom Out 11, 2020 8:07 am
Sab Out 10, 2020 11:10 am
Sex Out 09, 2020 9:18 pm
Sex Out 09, 2020 3:42 pm
Sex Out 09, 2020 2:21 pm
Sex Out 09, 2020 1:10 pm
Sex Out 09, 2020 11:39 am
Sex Out 09, 2020 2:06 am
Qui Out 08, 2020 8:21 pm
Qui Out 08, 2020 5:14 pm
Qui Out 08, 2020 5:07 pm
Qui Out 08, 2020 10:33 am
Qua Out 07, 2020 4:50 pm
Qua Out 07, 2020 8:48 am
Seg Out 05, 2020 10:19 pm
Seg Out 05, 2020 10:13 am
Seg Out 05, 2020 10:00 am
Seg Out 05, 2020 6:52 am
Seg Out 05, 2020 5:09 am
Dom Out 04, 2020 9:35 pm
Dom Out 04, 2020 6:23 pm
Dom Out 04, 2020 4:13 pm
Dom Out 04, 2020 12:37 am
Dom Out 04, 2020 12:35 am
Dom Out 04, 2020 12:29 am
Dom Out 04, 2020 12:27 am
Sab Out 03, 2020 11:54 pm
Sab Out 03, 2020 8:15 am
Sex Out 02, 2020 7:08 pm
Sex Out 02, 2020 5:33 pm
Sex Out 02, 2020 3:43 pm
Sex Out 02, 2020 2:30 pm
Sex Out 02, 2020 2:18 pm
Sex Out 02, 2020 1:02 pm
Qui Out 01, 2020 4:35 pm
Qui Out 01, 2020 1:26 pm
Qui Out 01, 2020 1:06 pm
Qui Out 01, 2020 12:34 pm
Qui Out 01, 2020 10:27 am
TDM Corp
Wily
joz
diegopds
orph
Micco
Micco
Ki
glauco
Wily
Shidote
MarcosSchultz
thales.ulisses
darkrj
NKKF
Liherbert
NKKF
TDM Corp
Fagner
nvndx
TDM Corp
Arturzeraa
ecorrea
TioUV
Franttyck
Fagner
cosmoplay
drewhonshu
leandrabr
RodrigoPrivilegium
cafezinho71
leandrabr
glauco
rondon2014
Fagner
Evertonslv
Evertonslv
El Marquitoos
Callyde Jr
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
Markimg22
leandrabr
Ki
Ki
Ki
Ki
Ki
ViniciusTKH
Pancakemix
MarcosSchultz
Hiyuzo
MarcosSchultz
MarcosSchultz
deathmasterxz
MarcosSchultz
NKKF
LUCASkkk
marx478
PacienteZERO
FelipeSouza11
Toxic
cafezinho71
NKKF
Evertonslv
TioUV
MarcosSchultz
MarcosSchultz
cafezinho71
SauloeArthur
glauco
Callyde Jr
PedrinHFS
orph
SauloeArthur
cafezinho71
JulioWinchester
pratesgamedev
Valakinhas
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
Markimg22
AmazingDeliciano
Fagner
Fagner
Markimg22
Markimg22
Markimg22
BatataBugada54321
Chilinger
Chilinger
Th2y
PauloFR

Jogo Pacman-problemas com os fantasmas

Ir em baixo

DÚVIDA Jogo Pacman-problemas com os fantasmas

Mensagem por lucaspoiob em Qui Jul 16, 2020 9:47 pm

Alguém me ajuda com um problema que não estou conseguindo resolver, por favor! Irei colocar um link para o vídeo mostrando o problema, basicamente é que os 3 fantasmas que estão dentro do negocio não seguem certinho o waypoints eles saem passando por tudo e vão embora e deveria ser igual o do fantasma vermelho mas com outros caminhos, deveria seguir os waypoints certinhos deles e quando tiver perto do pacman seguir ele, e com o estado de animação em right sem parar, irei mandar os códigos que estão implementados nele e mostro no começo do vídeo como está implementado os códigos em cada!

[url= https://youtu.be/ADlxPra_1-k]https://youtu.be/ADlxPra_1-k[/url]

AI----------------------------------------
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class AI : MonoBehaviour
{
  public Transform target;
  private List<TileManager.Tile> tiles = new List<TileManager.Tile>();
  private TileManager manager;
  public GhostMove ghost;
  public TileManager.Tile nextTile = null;
  public TileManager.Tile targetTile;
  TileManager.Tile currentTile;
  void Awake()
  {
    manager = GameObject.Find("Game Manager").GetComponent<TileManager>();
    tiles = manager.tiles;
  }
  public void AILogic()
  {
    Vector3 currentPos = new Vector3(transform.position.x + 0.499f, transform.position.y + 0.499f);
    currentTile = tiles[manager.Index((int)currentPos.x, (int)currentPos.y)];
    targetTile = GetTargetTilePerGhost();
    if (ghost.direction.x > 0) nextTile = tiles[manager.Index((int)(currentPos.x + 1), (int)currentPos.y)];
    if (ghost.direction.x < 0) nextTile = tiles[manager.Index((int)(currentPos.x - 1), (int)currentPos.y)];
    if (ghost.direction.y > 0) nextTile = tiles[manager.Index((int)currentPos.x, (int)(currentPos.y + 1))];
    if (ghost.direction.y < 0) nextTile = tiles[manager.Index((int)currentPos.x, (int)(currentPos.y - 1))];
    if (nextTile.occupied || currentTile.isIntersection)
    {
      if (nextTile.occupied && !currentTile.isIntersection)
      {
        if (ghost.direction.x != 0)
        {
          if (currentTile.down == null) ghost.direction = Vector3.up;
          else ghost.direction = Vector3.down;
        }
        else if (ghost.direction.y != 0)
        {
          if (currentTile.left == null) ghost.direction = Vector3.right;
          else ghost.direction = Vector3.left;
        }
      }
      if (currentTile.isIntersection)
      {
        float dist1, dist2, dist3, dist4;
        dist1 = dist2 = dist3 = dist4 = 999999f;
        if (currentTile.up != null && !currentTile.up.occupied && !(ghost.direction.y < 0)) dist1 = manager.distance(currentTile.up, targetTile);
        if (currentTile.down != null && !currentTile.down.occupied && !(ghost.direction.y > 0)) dist2 = manager.distance(currentTile.down, targetTile);
        if (currentTile.left != null && !currentTile.left.occupied && !(ghost.direction.x > 0)) dist3 = manager.distance(currentTile.left, targetTile);
        if (currentTile.right != null && !currentTile.right.occupied && !(ghost.direction.x < 0)) dist4 = manager.distance(currentTile.right, targetTile);
        float min = Mathf.Min(dist1, dist2, dist3, dist4);
        if (min == dist1) ghost.direction = Vector3.up;
        if (min == dist2) ghost.direction = Vector3.down;
        if (min == dist3) ghost.direction = Vector3.left;
        if (min == dist4) ghost.direction = Vector3.right;
      }
    }
    else
    {
      ghost.direction = ghost.direction;
    }
  }
  public void RunLogic()
  {
    Vector3 currentPos = new Vector3(transform.position.x + 0.499f, transform.position.y + 0.499f);
    currentTile = tiles[manager.Index((int)currentPos.x, (int)currentPos.y)];
    if (ghost.direction.x > 0) nextTile = tiles[manager.Index((int)(currentPos.x + 1), (int)currentPos.y)];
    if (ghost.direction.x < 0) nextTile = tiles[manager.Index((int)(currentPos.x - 1), (int)currentPos.y)];
    if (ghost.direction.y > 0) nextTile = tiles[manager.Index((int)currentPos.x, (int)(currentPos.y + 1))];
    if (ghost.direction.y < 0) nextTile = tiles[manager.Index((int)currentPos.x, (int)(currentPos.y - 1))];
    if (nextTile.occupied || currentTile.isIntersection)
    {
      if (nextTile.occupied && !currentTile.isIntersection)
      {
        if (ghost.direction.x != 0)
        {
          if (currentTile.down == null) ghost.direction = Vector3.up;
          else ghost.direction = Vector3.down;
        }
        else if (ghost.direction.y != 0)
        {
          if (currentTile.left == null) ghost.direction = Vector3.right;
          else ghost.direction = Vector3.left;
        }
      }
      if (currentTile.isIntersection)
      {
        List<TileManager.Tile> availableTiles = new List<TileManager.Tile>();
        TileManager.Tile chosenTile;
        if (currentTile.up != null && !currentTile.up.occupied && !(ghost.direction.y < 0)) availableTiles.Add(currentTile.up);
        if (currentTile.down != null && !currentTile.down.occupied && !(ghost.direction.y > 0)) availableTiles.Add(currentTile.down);
        if (currentTile.left != null && !currentTile.left.occupied && !(ghost.direction.x > 0)) availableTiles.Add(currentTile.left);
        if (currentTile.right != null && !currentTile.right.occupied && !(ghost.direction.x < 0)) availableTiles.Add(currentTile.right);
        int rand = Random.Range(0, availableTiles.Count);
        chosenTile = availableTiles[rand];
        ghost.direction = Vector3.Normalize(new Vector3(chosenTile.x - currentTile.x, chosenTile.y - currentTile.y, 0));
      }
    }
    else
    {
      ghost.direction = ghost.direction;
    }
  }
  TileManager.Tile GetTargetTilePerGhost()
  {
    Vector3 targetPos;
    TileManager.Tile targetTile;
    Vector3 dir;
    switch (name)
    {
      case "blinky":
        targetPos = new Vector3(target.position.x + 0.499f, target.position.y + 0.499f);
        targetTile = tiles[manager.Index((int)targetPos.x, (int)targetPos.y)];
        break;
      case "pinky":
        dir = target.GetComponent<PlayerController>().getDir();
        targetPos = new Vector3(target.position.x + 0.499f, target.position.y + 0.499f) + 4 * dir;
        if (dir == Vector3.up) targetPos -= new Vector3(4, 0, 0);
        targetTile = tiles[manager.Index((int)targetPos.x, (int)targetPos.y)];
        break;
      case "inky":
        dir = target.GetComponent<PlayerController>().getDir();
        Vector3 blinkyPos = GameObject.Find("blinky").transform.position;
        Vector3 ambushVector = target.position + 2 * dir - blinkyPos;
        targetPos = new Vector3(target.position.x + 0.499f, target.position.y + 0.499f) + 2 * dir + ambushVector;
        targetTile = tiles[manager.Index((int)targetPos.x, (int)targetPos.y)];
        break;
      case "clyde":
        targetPos = new Vector3(target.position.x + 0.499f, target.position.y + 0.499f);
        targetTile = tiles[manager.Index((int)targetPos.x, (int)targetPos.y)];
        if (manager.distance(targetTile, currentTile) < 9)
        targetTile = tiles[manager.Index(0, 2)];
        break;
      default:
        targetTile = null;
        break;
    }
    return targetTile;
  }
}



GhostMove--------------------------------------------------------
using System;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

public class GhostMove : MonoBehaviour
{
  private Vector3 waypoint;
  private Queue<Vector3> waypoints;
  public Vector3 _direction;
  public Vector3 direction
  {
    get
    {
      return _direction;
    }
    set
    {
      _direction = value;
      Vector3 pos = new Vector3((int)transform.position.x, (int)transform.position.y, (int)transform.position.z);
      waypoint = pos + _direction;
    }
  }
  public float speed = 0.3f;
  public float scatterLength = 5f;
  public float waitLength = 0.0f;
  private float timeToEndScatter;
  private float timeToEndWait;
  enum State { Wait, Init, Scatter, Chase, Run };
  State state;
  private Vector3 _startPos;
  private float _timeToWhite;
  private float _timeToToggleWhite;
  private float _toggleInterval;
  private bool isWhite = false;
  public GameGUINavigation GUINav;
  public PlayerController pacman;
  private GameManager _gm;
  void Start()
  {
    _gm = GameObject.Find("Game Manager").GetComponent<GameManager>();
    _toggleInterval = _gm.scareLength * 0.33f * 0.20f;
    InitializeGhost();
  }
  public float DISTANCE;
  void FixedUpdate()
  {
    DISTANCE = Vector3.Distance(transform.position, waypoint);
    if (GameManager.gameState == GameManager.GameState.Game)
    {
      animate();
      switch (state)
      {
        case State.Wait:
          Wait();
          break;
        case State.Init:
          Init();
          break;
        case State.Scatter:
          Scatter();
          break;
        case State.Chase:
          ChaseAI();
          break;
        case State.Run:
          RunAway();
          break;
      }
    }
  }
  //Iniciar os fantasmas no labirinto
  public void InitializeGhost()
  {
    _startPos = getStartPosAccordingToName();
    waypoint = transform.position;
    state = State.Wait;
    timeToEndWait = Time.time + waitLength + GUINav.initialDelay;
    InitializeWaypoints(state);
  }
  public void InitializeGhost(Vector3 pos)
  {
    transform.position = pos;
    waypoint = transform.position;
    state = State.Wait;
    timeToEndWait = Time.time + waitLength + GUINav.initialDelay;
    InitializeWaypoints(state);
  }
  private void InitializeWaypoints(State st)
  {
    string data = "";
    switch (name)
    {
      case "blinky":
        data = @"22 20
22 26

27 26
27 30
22 30
22 26";
        break;
      case "pinky":
        data = @"14.5 17
14 17

7 26
7 30
2 30
2 26";
        break;
      case "inky":
        data = @"16.5 17
15 17

16 2
27 2
27 5
22 5";
        break;
      case "clyde":
        data = @"12.5 17
14 17

13 2
13 5
10 5
10 8";
        break;

    }
    string line;
    waypoints = new Queue<Vector3>();
    Vector3 wp;
    if (st == State.Init)
    {
      using (StringReader reader = new StringReader(data))
      {
        while ((line = reader.ReadLine()) != null)
        {
          if (line.Length == 0) break;
          string[] values = line.Split(' ');
          float x = float.Parse(values[0]);
          float y = float.Parse(values[1]);
          wp = new Vector3(x, y, 0);
          waypoints.Enqueue(wp);
        }
      }
    }
    if (st == State.Scatter)
    {
      bool scatterWps = false;
      using (StringReader reader = new StringReader(data))
      {
        while ((line = reader.ReadLine()) != null)
        {
          if (line.Length == 0)
          {
            scatterWps = true;
            continue;
          }
          if (scatterWps)
          {
            string[] values = line.Split(' ');
            int x = Int32.Parse(values[0]);
            int y = Int32.Parse(values[1]);
            wp = new Vector3(x, y, 0);
            waypoints.Enqueue(wp);
          }
        }
      }
    }
    if (st == State.Wait)
    {
      Vector3 pos = transform.position;
      if (transform.name == "inky" || transform.name == "clyde")
      {
        waypoints.Enqueue(new Vector3(pos.x, pos.y - 0.5f, 0f));
        waypoints.Enqueue(new Vector3(pos.x, pos.y + 0.5f, 0f));
      }
      else
      {
        waypoints.Enqueue(new Vector3(pos.x, pos.y + 0.5f, 0f));
        waypoints.Enqueue(new Vector3(pos.x, pos.y - 0.5f, 0f));
      }
    }
  }
  private Vector3 getStartPosAccordingToName()
  {
    switch (gameObject.name)
    {
      case "blinky":
        return new Vector3(15f, 20f, 0f);
      case "pinky":
        return new Vector3(14.5f, 17f, 0f);
      case "inky":
        return new Vector3(16.5f, 17f, 0f);
      case "clyde":
        return new Vector3(12.5f, 17f, 0f);
    }
    return new Vector3();
  }
  void animate()
  {
    Vector3 dir = waypoint - transform.position;
    GetComponent<Animator>().SetFloat("DirX", dir.x);
    GetComponent<Animator>().SetFloat("DirY", dir.y);
    GetComponent<Animator>().SetBool("Run", false);
  }
  void OnTriggerEnter2D(Collider2D other)
  {
    if (other.name == "pacman")
    {
      if (state == State.Run)
      {
        Calm();
        InitializeGhost(_startPos);
        pacman.UpdateScore();
      }
      else
      {
        _gm.LoseLife();
      }
    }
  }
  void Wait()
  {
    if (Time.time >= timeToEndWait)
    {
      state = State.Init;
      waypoints.Clear();
      InitializeWaypoints(state);
    }
    MoveToWaypoint(true);
  }
  void Init()
  {
    _timeToWhite = 0;
    if (waypoints.Count == 0)
    {
      state = State.Scatter;
      string name = GetComponent<SpriteRenderer>().sprite.name;
      if (name[name.Length - 1] == '0' || name[name.Length - 1] == '1') direction = Vector3.right;
      if (name[name.Length - 1] == '2' || name[name.Length - 1] == '3') direction = Vector3.left;
      if (name[name.Length - 1] == '4' || name[name.Length - 1] == '5') direction = Vector3.up;
      if (name[name.Length - 1] == '6' || name[name.Length - 1] == '7') direction = Vector3.down;
      InitializeWaypoints(state);
      timeToEndScatter = Time.time + scatterLength;
      return;
    }
    MoveToWaypoint();
  }
  // Espalhar os fantasmas pelo labirinto
  void Scatter()
  {
    if (Time.time >= timeToEndScatter)
    {
      waypoints.Clear();
      state = State.Chase;
      return;
    }
    MoveToWaypoint(true);
  }
  void ChaseAI()
  {
    if (Vector3.Distance(transform.position, waypoint) > 0.000000000001)
    {
      Vector2 p = Vector2.MoveTowards(transform.position, waypoint, speed);
      GetComponent<Rigidbody2D>().MovePosition(p);
    }
    else GetComponent<AI>().AILogic();
  }
  // Pacman correndo atras dos fantasmas para comer
  void RunAway()
  {
    GetComponent<Animator>().SetBool("Run", true);
    if (Time.time >= _timeToWhite && Time.time >= _timeToToggleWhite) ToggleBlueWhite();
    if (Vector3.Distance(transform.position, waypoint) > 0.000000000001)
    {
      Vector2 p = Vector2.MoveTowards(transform.position, waypoint, speed);
      GetComponent<Rigidbody2D>().MovePosition(p);
    }
    else GetComponent<AI>().RunLogic();
  }
  // Movimentação pelos caminhos do waypoints
  void MoveToWaypoint(bool loop = false)
  {
    waypoint = waypoints.Peek();
    if (Vector3.Distance(transform.position, waypoint) > 0.000000000001)
    {                                         // move towards it
      _direction = Vector3.Normalize(waypoint - transform.position);
      Vector2 p = Vector2.MoveTowards(transform.position, waypoint, speed);
      GetComponent<Rigidbody2D>().MovePosition(p);
    }
    else
    {
      if (loop) waypoints.Enqueue(waypoints.Dequeue());
      else waypoints.Dequeue();
    }
  }
  // Modo assustar do fantasma movimentar
  public void Frighten()
  {
    state = State.Run;
    _direction *= -1;
    _timeToWhite = Time.time + _gm.scareLength * 0.66f;
    _timeToToggleWhite = _timeToWhite;
    GetComponent<Animator>().SetBool("Run_White", false);
  }
  // Modo normal do fantasma movimentar
  public void Calm()
  {
    if (state != State.Run) return;
    waypoints.Clear();
    state = State.Chase;
    _timeToToggleWhite = 0;
    _timeToWhite = 0;
    GetComponent<Animator>().SetBool("Run_White", false);
    GetComponent<Animator>().SetBool("Run", false);
  }
  // Alterar para azul e branco que o pacman consegue comer
  public void ToggleBlueWhite()
  {
    isWhite = !isWhite;
    GetComponent<Animator>().SetBool("Run_White", isWhite);
    _timeToToggleWhite = Time.time + _toggleInterval;
  }
}

lucaspoiob
Membro
Membro

PONTOS : 1359
REPUTAÇÃO : 0
Respeito as regras : Jogo Pacman-problemas com os fantasmas WvDYdlf

Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum