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:
Como evitar que personagem se levante onde não há espaço suficiente?
Som falhando no Android
Resolução Nativa Fixa
Como anular uma das teclas no Unity
Botão UI que troca a cor dos objetos
Ativar um objeto quando desativar outro e vice-versa (Unity)
Objeto não continua associado
Necessário Level Designer para criar uma cidade
Como criar um Sistema de Trein na Unity.
[TUTORIAL] Agachar, correr e sistema de estamina ( C# )
FPSController travado no lugar após animações usando seu transform
OnTriggerEnter
Unity - Áudios deixam a Scene pesada pra abrir
[RESOLVIDO] URP QUE NÃO RENDERIZA. UNITY 2020.3.18 ARQUIVO DAE DO SKetchfab
Criar input mobile depois do jogo "quase pronto" vale a pena ?
Mudar a densidade da grama pelo script de outra cena
Como Pegar DesseObjeto.GetComponent<ScriptName.Boolean>
Como pausar a renderização do Blender
Como trocar todas as SpritesSheets do animator no Unity2D?
Como Fazer Espelho perfeito fácil na Unity, Apenas 4 linhas de código
[TUTORIAL] AI Enemy 2.0 + animações ( Jogos de terror )
app para aquaristas
Serializar Dictionary no Scriptable Object
Camera gira errada no eixo z ao entrar no carro!!
Referencias entre objetos pai e filho
Quem aqui tem jogos publicados no Steam?
Erro ao criar "Truck Trailer" Realisti Car Controller RCC
Unity - O jogo não roda no Celular
Reviver o Car Town EX
[TUTORIAL] Criando Menu Modular na Unity
QUAL MELHOR LOCAL OU CURSO PARA APRENDER PROGRAMAÇÃO DO 0?
Meu script de movimentação não funciona, alguém pode me ajudar?
Como faço para fazer 'Objeto' piscar Aleatoriamente
Duvida boba sobre UI
FORMAÇAO DE EQUIPE PARA GAME PARKOUR
Colisão Seletiva
Unity 2021.3.4f1 - Adicionar script em um gameObject por código
[Curso Grátis para iniciantes] Um Ótimo Lugar para aprender Unity
Erro de ArgumentNullException no WebGL da Unity
como desativar um text depois de 10 segundos?
Como eu faria o inimigo reagir a um tiro ?
player empurrando o outro
Vida do player e variaveis static
Contagem de GameObjects presentes em um Scene
Stamina/Sede - Movimentação
Pegar objeto e rotacionar
Efeito Smoke na Asa do Ace Combat
Passar informações de um script pro outro
PROCURA-SE PARCEIRO PARA LEVEL DESIGN - SIMULADOR DE COMBATE
como verificar se um objeto com um nome especifico nao esta na cena
Jogo fecha do nada
Meus jogos publicados no google play
preciso de um programador que entenda de Photon pago via Pix pela ajuda!!
Blender Faces Transparentes
Unity - Aba Game Preta no Display1. No Display2 fica normal
Duvida sobre bool na transição de animações
Tem Como Fazer um Shader com o Shader Graph que Deixa a Escala Infinita?
Câmera Com Render Texture Para HUD
[RESOLVIDO] Destroy object quando toca no chao
Inimigo Com Movimento de Ondas(ZigZag)
Movimentação para todas as direções em um jogo multiplayer online
DKG - Dynamic Kit Generator
Emissão de luz em objeto não estático.
Gerenciar carregamento de texturas
Texturas rosas ao extrair materiais do objeto, com modelo .dae
Modelador (Personagem + Roupa) com Direito a Remuneração
Pegar material especifico do objeto
ERRO AO UPAR NA GOOGLE PLAY STORE
[RESOLVIDO] Navegation Unity 3D
JOGO "CHALLENGE" FINALIZADO E DISPONÍVEL PARA BAIXAR.
[RESOLVIDO] Desativar e ativar objeto com o mesmo botão
Objetos da Unity com cores erradas.
[RESOLVIDO] Botão não está desativando pelo GetComponent
Adição de um Bone à outra Armature no Blender não funciona na Unity
Posição local do pixel de um quad
Shader Graph UI
Rotacionar objeto em apenas um eixo
[ASSET] Sistema completo de Auto Save para Editor
Criar uma aplicação tipo controle remoto bluetooth.
Easy Road 3d - Preciso de Ajuda
Alguem ai Entende de Multiplayer?
alguem pode me ajudar com essa adição de item numa lista?
APK para Android 12 não executa aplicação, Help Please
[TUTORIAL] Sprites Animados
REMOVER RESOLUÇOES
Unity > Editor > Any Android Device bugado!
Erro de Referência
terminei meu jogo, mas algo deu errado.
Erro ao iniciar jogo após a build
Posição Invertida No Multiplayer
Unity 5 - Invalid serialized file header
Character Controller Slide
Sombras desaparecem qnd o bake das luzes termina
Blender - Programa ou site que faça o Rig da face do Personagem
Meu PC deu pro mundo! e agora?
[RESOLVIDO] Player atravessa Parede mesmo com os Colliders
Movimentação 3D
[RESOLVIDO] - Blender - Erro deixa objeto Transparente
[ASSET] Criar TerrainLayer utilizando textura selecionada
Ontem à(s) 9:55 pm
Ontem à(s) 10:48 am
Ter Ago 16, 2022 7:07 pm
Ter Ago 16, 2022 2:45 am
Seg Ago 15, 2022 9:06 pm
Seg Ago 15, 2022 5:38 pm
Seg Ago 15, 2022 4:41 pm
Dom Ago 14, 2022 10:26 pm
Dom Ago 14, 2022 3:54 pm
Sab Ago 13, 2022 11:16 am
Qua Ago 10, 2022 3:13 pm
Ter Ago 09, 2022 8:26 pm
Seg Ago 08, 2022 4:00 pm
Sex Ago 05, 2022 8:48 pm
Sex Ago 05, 2022 12:39 pm
Qui Ago 04, 2022 4:18 pm
Qua Ago 03, 2022 11:36 am
Seg Ago 01, 2022 5:04 pm
Seg Ago 01, 2022 1:29 pm
Dom Jul 31, 2022 12:06 am
Sab Jul 30, 2022 11:39 pm
Sab Jul 30, 2022 11:24 am
Sab Jul 30, 2022 10:41 am
Sex Jul 29, 2022 8:46 pm
Qui Jul 28, 2022 6:02 pm
Qui Jul 28, 2022 12:44 pm
Qua Jul 27, 2022 11:39 pm
Qua Jul 27, 2022 10:04 pm
Qua Jul 27, 2022 4:41 pm
Qua Jul 27, 2022 11:01 am
Qua Jul 27, 2022 9:44 am
Ter Jul 26, 2022 4:38 pm
Ter Jul 26, 2022 4:23 pm
Seg Jul 25, 2022 9:40 pm
Seg Jul 25, 2022 6:45 pm
Dom Jul 24, 2022 4:27 pm
Sex Jul 22, 2022 8:55 pm
Sex Jul 22, 2022 4:08 pm
Sex Jul 22, 2022 12:11 pm
Sex Jul 22, 2022 11:43 am
Qui Jul 21, 2022 8:36 pm
Seg Jul 18, 2022 10:04 pm
Seg Jul 18, 2022 2:24 pm
Dom Jul 17, 2022 6:48 pm
Dom Jul 17, 2022 11:48 am
Sab Jul 16, 2022 7:02 pm
Sab Jul 16, 2022 11:21 am
Qua Jul 13, 2022 5:55 pm
Qua Jul 13, 2022 9:59 am
Ter Jul 12, 2022 11:43 pm
Sab Jul 09, 2022 4:09 pm
Sex Jul 08, 2022 10:41 pm
Sex Jul 08, 2022 10:26 pm
Sex Jul 08, 2022 7:06 am
Qui Jul 07, 2022 8:23 pm
Qui Jul 07, 2022 8:16 am
Qua Jul 06, 2022 8:48 pm
Qua Jul 06, 2022 6:03 pm
Seg Jul 04, 2022 9:30 am
Qua Jun 29, 2022 12:52 am
Ter Jun 28, 2022 7:44 pm
Ter Jun 28, 2022 4:16 pm
Dom Jun 26, 2022 6:03 pm
Sab Jun 25, 2022 3:03 pm
Qua Jun 22, 2022 6:21 pm
Qua Jun 22, 2022 1:28 am
Ter Jun 21, 2022 11:42 pm
Ter Jun 21, 2022 2:27 pm
Seg Jun 20, 2022 4:08 pm
Dom Jun 12, 2022 12:52 pm
Ter Jun 07, 2022 7:47 pm
Ter Jun 07, 2022 5:20 pm
Seg Jun 06, 2022 10:16 pm
Dom Jun 05, 2022 4:44 pm
Dom Jun 05, 2022 10:45 am
Dom Jun 05, 2022 9:59 am
Sab Jun 04, 2022 11:24 pm
Sab Jun 04, 2022 4:18 pm
Sab Jun 04, 2022 3:21 pm
Sab Jun 04, 2022 2:24 pm
Sab Jun 04, 2022 2:15 pm
Sex Jun 03, 2022 4:28 pm
Sex Jun 03, 2022 4:11 pm
Qui Jun 02, 2022 8:48 pm
Dom Maio 29, 2022 6:00 pm
Sex Maio 27, 2022 11:32 pm
Sex Maio 27, 2022 3:50 pm
Sex Maio 27, 2022 8:38 am
Qui Maio 26, 2022 6:47 pm
Ter Maio 24, 2022 4:28 pm
Ter Maio 24, 2022 11:01 am
Dom Maio 22, 2022 1:43 pm
Dom Maio 22, 2022 1:38 pm
Dom Maio 22, 2022 11:21 am
Sab Maio 21, 2022 8:01 am
Sex Maio 20, 2022 10:30 pm
Sex Maio 20, 2022 3:36 pm
Sex Maio 20, 2022 3:16 pm
Qui Maio 19, 2022 10:06 pm
dutrabr100
mama2401
juraulh
SteveRogers
AGAMENOM
eleganceu
SteveRogers
EricknhYT
NoctisDregon
Édipo
Rangel Oblivion
dutrabr100
Magnatah
marciosilva
SteveRogers
jeancvo3
dutrabr100
Alex Jun
tecnoato
Yuri Heinz
Yuri Heinz
Édipo
gabrimo
SteveRogers
Pokedlg
thales.ulisses
EricknhYT
WLCS22
fragas42
MayLeone
Magnatah
EmmaFriboi
lovuxd
Tomas Turbando
SeTk
Rangel Oblivion
dutrabr100
dutrabr100
Atho
dutrabr100
MRX
dutrabr100
Pokedlg
Nimue
dutrabr100
SpartanoLeonidas300
Eris
thiagograssi
Eris
SteveRogers
claudiano2020
claudiano2020
claudiano2020
Eris
WLCS22
Rangel Oblivion
MarcosSchultz
Eris
stratengine
MarcosSchultz
kessisdiones
gabrimo
cyborggp
MarcosSchultz
MarcosSchultz
EricknhYT
SteveRogers
SteveRogers
Mozinhas2
lauderson
BlesseD
Emerson Beaver
kessisdiones
WLCS22
gabrimo
Eris
SteveRogers
AnderGames
Diomaker
EricknhYT
claudiano2020
Pokedlg
SteveRogers
lauderson
lauderson
WLCS22
Arcebispo
JoSanInk
Rangel Oblivion
claudiano2020
erickfabio366
Rangel Oblivion
Crash Psycho
WLCS22
Callyde Jr
Pedro1saac
dutrabr100
dutrabr100
AnderGames

Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

2 participantes

Página 1 de 2 1, 2  Seguinte

Ir para baixo

DÚVIDA Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Seg Jan 18, 2021 4:42 pm

Olá 
Estou com dificuldade de mudar o sprite do player sempre que arrasto um objecto para o lista de items ao clicar no play ele ler os movimentos ele muda me sempre para o ultimo sprite adicionado e eu queria que ele só mudasse quando a condição fosse chamada mas eu não sei como fazer isso. Já tentei de algumas maneiras mas não consegui. A função changeSprite é onde ele carrega o sprite e na função rotateSpritePlayer é onde ela é chamada e também adiciona uma posição a lista de movimentos para que seja feita a mudança do sprite.
O código é o seguinte:
Código:
public void startMoviments()
 {
 StartCoroutine(moveWave());
 }

 // Recria os varios movimentos na lista
 IEnumerator moveWave()
 {
 while (counter < movimentsList.Count)
 {
 yield return new WaitForSeconds(respawnTime);

 StartCoroutine (MovePlayer (movimentsList[countMoviments]));
 
 movimentsList.Remove (movimentsList [countMoviments]);

 counter++;
 }
 }

 public void rotateSpritePlayer(){
 
 for (int i = 0; i < player.itemsList.Count; i++) {
 if (player.itemsList [i].name.Contains ("rotateUp")) {
 changeSprite(ImagePlayerRotateUp);
 movimentsList.Add (Vector3.zero);
 }  
 
 if (player.itemsList [i].name.Contains ("rotateDown")) {
 changeSprite(ImagePlayerRotateDown);
 movimentsList.Add (Vector3.zero);
 }

 if (player.itemsList [i].name.Contains ("rotateLeft")) {
 changeSprite(ImagePlayerRotateLeft);
 movimentsList.Add (Vector3.zero);
 }
 
 if (player.itemsList [i].name.Contains ("rotateRight")) {
 changeSprite(ImagePlayerRotateRight);
 movimentsList.Add (Vector3.zero);
 }  
    }
 }

 public void movimentsPlayer(){
 for (int i = 0; i < player.itemsList.Count; i++) {

 if (player.itemsList [i].name.Contains ("moveUp")) {
 movimentsList.Add (Vector3.up);

 } else if (player.itemsList [i].name.Contains ("moveDown")) {
 movimentsList.Add (Vector3.down);

 } else if (player.itemsList [i].name.Contains ("moveLeft")) {
 movimentsList.Add (Vector3.left);

 } else if (player.itemsList [i].name.Contains ("moveRight")) {
 movimentsList.Add (Vector3.right);
 }

 }      
 }
 
 public IEnumerator MovePlayer(Vector3 direction) // função que enumera as direções do teclado
 {
 isMoving = true;
 float elapsedTime = 0;
 origPos = transform.position;
 targetPos = origPos + direction;

 while (elapsedTime < timeToMove) {

 transform.position = Vector3.Lerp (origPos, targetPos, (elapsedTime / timeToMove));//modifica as posições interpolando linearmente entre dois vectores
 elapsedTime += Time.deltaTime;
 yield return null;
 }
 transform.position = targetPos;
 isMoving = false;
 
 }

 public void changeSprite(Sprite sprite){
 spritePlayerRenderer = GetComponent<SpriteRenderer> ();
 spritePlayerRenderer.sprite = sprite ;
 }

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 12:02 am

Nao entendi muito bem, que condição seria essa? E onde está este sprite, no changeSprite?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 12:27 am

Pokedlg escreveu:Nao entendi muito bem, que condição seria essa? E onde está este sprite, no changeSprite?
Sim. ou seja eu declarei os sprites em cima ou seja sao 4 sprites um para virar para cima outro para o lado esquerdo outro para o lado direito e outro para baixo. essa função muda o estado deles o problema é quando ele verifica dentro da lista player.itemsList ele actualiza sempre para o ultimo. Ou seja tenho a lista de movimentos e como só da para adicionar Vectores eu nao sei como fazer esse sprite só ser atualizado quando for chamado. o que esta acontecer é que ele como nao guarda o sprite em nenhuma lista ele muda sempre que o sprite é chamado. e e eu queriq por exemplo: quando arrastar as setas para o inventario e desse play ele fizesse isto:

lista de items:|        0               |             1              |            2            |            3           |
                     roda para direita + seta para a direita + roda para baixo + seta para baixo     (quando clicar no botão play faz esta sequencia)

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 12:45 am

Xremix30 escreveu:
Pokedlg escreveu:Nao entendi muito bem, que condição seria essa? E onde está este sprite, no changeSprite?
Sim. ou seja eu declarei os sprites em cima ou seja sao 4 sprites um para virar para cima outro para o lado esquerdo outro para o lado direito e outro para baixo. essa função muda o estado deles o problema é quando ele verifica dentro da lista player.itemsList ele actualiza sempre para o ultimo. Ou seja tenho a lista de movimentos e como só da para adicionar Vectores eu nao sei como fazer esse sprite só ser atualizado quando for chamado. o que esta acontecer é que ele como nao guarda o sprite em nenhuma lista ele muda sempre que o sprite é chamado. e e eu queriq por exemplo: quando arrastar as setas para o inventario e desse play ele fizesse isto:

lista de items:|        0               |             1              |            2            |            3           |
                     roda para direita + seta para a direita + roda para baixo + seta para baixo     (quando clicar no botão play faz esta sequencia)


Voce quer colocar os sprites em uma lista? E como voce quer chamar eles? Atraves de teclas do teclado?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 12:57 am

Pokedlg escreveu:
Xremix30 escreveu:
Pokedlg escreveu:Nao entendi muito bem, que condição seria essa? E onde está este sprite, no changeSprite?
Sim. ou seja eu declarei os sprites em cima ou seja sao 4 sprites um para virar para cima outro para o lado esquerdo outro para o lado direito e outro para baixo. essa função muda o estado deles o problema é quando ele verifica dentro da lista player.itemsList ele actualiza sempre para o ultimo. Ou seja tenho a lista de movimentos e como só da para adicionar Vectores eu nao sei como fazer esse sprite só ser atualizado quando for chamado. o que esta acontecer é que ele como nao guarda o sprite em nenhuma lista ele muda sempre que o sprite é chamado. e e eu queriq por exemplo: quando arrastar as setas para o inventario e desse play ele fizesse isto:

lista de items:|        0               |             1              |            2            |            3           |
                     roda para direita + seta para a direita + roda para baixo + seta para baixo     (quando clicar no botão play faz esta sequencia)


Voce quer colocar os vetores em uma lista? E como voce quer chamar eles? Atraves de teclas do teclado?
Não. Eu tenho um inventário que já tem as imagens com uma tag associada. Quando arrasto para o segundo ele guarda essa imagem associada com a tag e depois neste código ele compara a tag se o item que tiver dentro da lista tiver a tag correspondente por ex:moveUp quando clicar no play ele vai fazer com que o robo ande no senario. É tipo um drag and drop é do género do jogo light bot que está no Google play em que se arrasta items para o robo andar

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 1:07 am

Xremix30 escreveu:
Pokedlg escreveu:
Xremix30 escreveu:
Pokedlg escreveu:Nao entendi muito bem, que condição seria essa? E onde está este sprite, no changeSprite?
Sim. ou seja eu declarei os sprites em cima ou seja sao 4 sprites um para virar para cima outro para o lado esquerdo outro para o lado direito e outro para baixo. essa função muda o estado deles o problema é quando ele verifica dentro da lista player.itemsList ele actualiza sempre para o ultimo. Ou seja tenho a lista de movimentos e como só da para adicionar Vectores eu nao sei como fazer esse sprite só ser atualizado quando for chamado. o que esta acontecer é que ele como nao guarda o sprite em nenhuma lista ele muda sempre que o sprite é chamado. e e eu queriq por exemplo: quando arrastar as setas para o inventario e desse play ele fizesse isto:

lista de items:|        0               |             1              |            2            |            3           |
                     roda para direita + seta para a direita + roda para baixo + seta para baixo     (quando clicar no botão play faz esta sequencia)


Voce quer colocar os vetores em uma lista? E como voce quer chamar eles? Atraves de teclas do teclado?
Não. Eu tenho um inventário que já tem as imagens com uma tag associada. Quando arrasto para o segundo ele guarda essa imagem associada com a tag e depois neste código ele compara a tag se o item que tiver dentro da lista tiver a tag correspondente por ex:moveUp quando clicar no play ele vai fazer com que o robo ande no senario. É tipo um drag and drop é do género do jogo light bot que está no Google play em que se arrasta items para o robo andar

Ok, e em qual lista o sprite está? E o que estas seuquencias irao fazer? desculpe, nao estou entendendo
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 1:27 am

Pokedlg escreveu:
Xremix30 escreveu:
Pokedlg escreveu:
Xremix30 escreveu:
Pokedlg escreveu:Nao entendi muito bem, que condição seria essa? E onde está este sprite, no changeSprite?
Sim. ou seja eu declarei os sprites em cima ou seja sao 4 sprites um para virar para cima outro para o lado esquerdo outro para o lado direito e outro para baixo. essa função muda o estado deles o problema é quando ele verifica dentro da lista player.itemsList ele actualiza sempre para o ultimo. Ou seja tenho a lista de movimentos e como só da para adicionar Vectores eu nao sei como fazer esse sprite só ser atualizado quando for chamado. o que esta acontecer é que ele como nao guarda o sprite em nenhuma lista ele muda sempre que o sprite é chamado. e e eu queriq por exemplo: quando arrastar as setas para o inventario e desse play ele fizesse isto:

lista de items:|        0               |             1              |            2            |            3           |
                     roda para direita + seta para a direita + roda para baixo + seta para baixo     (quando clicar no botão play faz esta sequencia)


Voce quer colocar os vetores em uma lista? E como voce quer chamar eles? Atraves de teclas do teclado?
Não. Eu tenho um inventário que já tem as imagens com uma tag associada. Quando arrasto para o segundo ele guarda essa imagem associada com a tag e depois neste código ele compara a tag se o item que tiver dentro da lista tiver a tag correspondente por ex:moveUp quando clicar no play ele vai fazer com que o robo ande no senario. É tipo um drag and drop é do género do jogo light bot que está no Google play em que se arrasta items para o robo andar

Ok, e em qual lista o sprite está? E o que estas seuquencias irao fazer? desculpe, nao estou entendendo
Este é o jogo que estou a desenvolver:
imagem do jogo

Este é o script completo:
Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class PlayerMoviment : MonoBehaviour {
   public bool isMoving, isSprite;
   public Vector3 origPos, targetPos;
   private float timeToMove = 0.2f;
   // Tempo entre cada chamada de um movimento
   public float respawnTime = 3.0f;
   public Player player;
   public List<Vector3> movimentsList;
   public Sprite ImagePlayerRotateUp;
   public Sprite ImagePlayerRotateDown;
   public Sprite ImagePlayerRotateLeft;
   public Sprite ImagePlayerRotateRight;
   private SpriteRenderer spritePlayerRenderer;
   int counter, countMoviments;

   // Use this for initialization
   void Start () {
      countMoviments = 0;
      player = GameObject.Find("Player").GetComponent<Player> ();

      //addMovimentsList();
   
   }

   // Método a chamar na opção do botão Play
   public void startMoviments()
   {
      //Primeira chamada do moveWave

      StartCoroutine(moveWave());
      //rotateSpritePlayer ();
   }

   // Recria os varios movimentos na lista
   IEnumerator moveWave()
   {
      //rotateSpriteList.Reverse (0, rotateSpriteList.Count);
      // Enquanto a lista (lista) tiver movimentos ...");
   
      while (counter < movimentsList.Count)
      {
         yield return new WaitForSeconds(respawnTime);
         // Faz um movimento do jogador
      
      
         // Chama a sua função (ex: movePlayer()) para o movimento
         StartCoroutine (MovePlayer (movimentsList[countMoviments]));
   
            movimentsList.Remove (movimentsList [countMoviments]);

         counter++;
      }
   }

   public void rotateSpritePlayer(){
      
      foreach(GameObject rotateSprite in player.itemsList){
         if (rotateSprite.name.Contains ("rotateUp")) {
            changeSprite(ImagePlayerRotateUp);
            movimentsList.Add (Vector3.zero);
            } 
            
         if (rotateSprite.name.Contains ("rotateDown")) {
            changeSprite(ImagePlayerRotateDown);
            movimentsList.Add (Vector3.zero);
         }

         if (rotateSprite.name.Contains ("rotateLeft")) {
            changeSprite(ImagePlayerRotateLeft);
            movimentsList.Add (Vector3.zero);
         }
            
         if (rotateSprite.name.Contains ("rotateRight")) {
            changeSprite(ImagePlayerRotateRight);
            movimentsList.Add (Vector3.zero);
         } 
       }
   }

   public void movimentsPlayer(){
      foreach (GameObject moviment in player.itemsList) {

         if (moviment.name.Contains ("moveUp")) {
            movimentsList.Add (Vector3.up);

         } else if (moviment.name.Contains ("moveDown")) {
            movimentsList.Add (Vector3.down);

         } else if (moviment.name.Contains ("moveLeft")) {
            movimentsList.Add (Vector3.left);

         } else if (moviment.name.Contains ("moveRight")) {
            movimentsList.Add (Vector3.right);
         }

      
         //countMoviments++;
      }        
   }
   
   public void handleCatchItems(){
      foreach(GameObject handle in player.itemsList){
         if (handle.name.Contains ("handleCatch")) {
            movimentsList.Add (Vector3.zero);
            Debug.Log ("Hello");
         }
      }
   }

      
   public IEnumerator MovePlayer(Vector3 direction) // função que enumera as direções do teclado
   {
      isMoving = true;
      float elapsedTime = 0;
      origPos = transform.position;
      targetPos = origPos + direction;

      while (elapsedTime < timeToMove) {

         transform.position = Vector3.Lerp (origPos, targetPos, (elapsedTime / timeToMove));//modifica as posições interpolando linearmente entre dois vectores
         elapsedTime += Time.deltaTime;
         yield return null;
      }
      transform.position = targetPos;
      isMoving = false;
      if (FuelBar.Fuel > 0) {
         
         FuelBar.Fuel -= 1.0f;
         transform.position = targetPos;
      } else {
         SceneManager.LoadScene (1);

      }
   }

   public void changeSprite(Sprite sprite){
      spritePlayerRenderer = GetComponent<SpriteRenderer> ();
      spritePlayerRenderer.sprite = sprite ;
   }
Neste caso o  sprite nao esta a ser guardado na lista o que eu estava a tentar fazer era se na função rotateSpritePlayer tivesse na la lista player.itemsList adicionado uma imagem ele percorria a lista e mudava de sprite.

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 12:04 pm

Mas o player.itemsList é uma lista de sprites? E quando a void starMoviments e rotateSpritePlayer é chamada? Pelo que eu vi vc colocou um // atrás de quando ela é chamada
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 12:14 pm

Pokedlg escreveu:Mas o player.itemsList é uma lista de sprites?
Não. O que essa lista faz é só armazenar as imagens que tem associado uma tag. O que depois faz o boneco movimentar é a lista que se chama movinentList ou seja o qie acontesse é eu percorro a lista itemList e tenho condições a verificar se a lista conter a tag da imagem por ex: moveUp ou rotateUp depende do item que arrastar ele adiciona na lista movinentList os movimentos e quando dou play ele lê toda a lista com os movimentos que foram associados ao longo do jogo

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 12:22 pm

Ok, acho que entendi, se voce arrastar uma imagem com a tag: "Move Up" ele vai adicionar a movimentList,que vai ser lida e associada ao jogo, é isso? 

E como voce chama a void starMoviments e rotateSpritePlayerPelo que eu vi vc colocou um // atrás de quando ela é chamada. E o seu problema, é na void rotateSprite, que sempre muda para o ultimo sprite adicionado é isso?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 12:41 pm

Pokedlg escreveu:Ok, acho que entendi, se voce arrastar uma imagem com a tag: "Move Up" ele vai adicionar a movimentList,que vai ser lida e associada ao jogo, é isso? 

E como voce chama a void starMoviments e rotateSpritePlayerPelo que eu vi vc colocou um // atrás de quando ela é chamada. E o seu problema, é na void rotateSprite, que sempre muda para o ultimo sprite adicionado é isso?
Sim. E eu não sei como resolver isso. Eu queria que ele mudasse quando por ex: o sprite está na segunda posição da lista era nessa posição que devia ler o sprite ou seja só quero que mude de posição quando ao percorrer a lista esteja naquela posição e não passar para o último sprite sempre uwqyque for adicionado

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 12:53 pm

No caso ele está mudando para a rotateRight? Ou nao tem nenhum sprite ainda e vc adicona depois?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 1:09 pm

Eu ja entendi o seu problema, isso está acontecendo porque voce coloca if conter a tag X muda o  sprite se conter e por isso muda semre para o ultimo pois sempre está contendo a tag X. Me tira uma duvida, essas setas e rodas da sequencia que voce me falo, são setas do teclado ou sao sprites ou outra coisa? 

E nessa sequencia que voce quer chamar o sprite a ser mudado?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 1:27 pm

Pokedlg escreveu:Eu ja entendi o seu problema, isso está acontecendo porque voce coloca if conter a tag X muda o  sprite se conter e por isso muda semre para o ultimo pois sempre está contendo a tag X. Me tira uma duvida, essas setas e rodas da sequencia que voce me falo, são setas do teclado ou sao sprites ou outra coisa? 

E nessa sequencia que voce quer chamar o sprite a ser mudado?
Esta é uma sequencia como na imagem;
imagem do inventario
neste caso ja dei play para mostrar qual a posição que apanha que é sempre a ultima.

O que faz mover o boneco é a função MovePlayer(Vector direction) depois só adiciono o vector a lista movimentList que quero ex:
movimentList.Add(Vector.up) depois lê essa lista dentro de uma corroutina dentro do while e o robo move-se na direçao que eu quero

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 1:37 pm

Ok entao quer dizer, que quando voce coloca o sprite nesta sequencia ele muda, é isso? Tipo, voce mando a imagem  do robo virado para baixo, portanto o primeiro Sprite é do robo virado para a direita, só que quando voce da play e continua virado para baixo, é isso?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 1:51 pm

Pokedlg escreveu:Ok entao quer dizer, que quando voce coloca o sprite nesta sequencia ele muda, é isso? Tipo, voce mando a imagem  do robo virado para baixo, portanto o primeiro Sprite é do robo virado para a direita, só que quando voce da play e continua virado para baixo, é isso?
Sim. Ou seja sempre que adicionar o sprite novo ele vai sempre mostrar o último sprite colocado podia ser down Left Right Up ele iria substituir

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 1:53 pm

Xremix30 escreveu:
Pokedlg escreveu:Ok entao quer dizer, que quando voce coloca o sprite nesta sequencia ele muda, é isso? Tipo, voce mando a imagem  do robo virado para baixo, portanto o primeiro Sprite é do robo virado para a direita, só que quando voce da play e continua virado para baixo, é isso?
Sim. Ou seja sempre que adicionar o sprite novo ele vai sempre mostrar o último sprite colocado podia ser down Left Right Up ele iria substituir

Entendi
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 1:57 pm

A movimentação funciona corretamente né?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 2:02 pm

Pokedlg escreveu:A movimentação funciona corretamente né?
Sim. o problema é mesmo os sprites

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 2:07 pm

Ok, irei fazer alguns testes e tentar algumas soluções.
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 2:17 pm

Durante o jogo, como voce adiciona essas casas, para que ele possa realizar as funções, arrastando? Tem um script para isso, que serve para colocar na sequencia?

Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista HxmgB0r
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 2:26 pm

Pokedlg escreveu:Durante o jogo, como voce adiciona essas casas, para que ele possa realizar as funções, arrastando? Tem um script para isso, que serve para colocar na sequencia?

Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista HxmgB0r
Sim que é o drop slot mas o que ele faz unicamente é quando a imagem é arrastada para este inventário guarda na lista itemList as imagens com a tag correspondente. Este script é que é o principal.

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 2:39 pm

É este script que voce mandou? Ou é outro? Se for outro, voce poderia mandar o outro?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 2:47 pm

Pokedlg escreveu:É este script que voce mandou? Ou é outro? Se for outro, voce poderia mandar o outro?
O problema esta neste script. O outro script simplesmente guarda na listaItems do player a sequencia de imagens com a tag sempre que é arrastado uma nova imagem para o inventário não faz mais nada. Este que enviei no inicio é o Principal que faz o robo movimentar se e rodar.

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 2:54 pm

Ok, mas voce tem certeza que nao da pra fazer o sprite obedecer a sequencia com aquele script?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 3:00 pm

Pokedlg escreveu:Ok, mas voce tem certeza que nao da pra fazer o sprite obedecer a sequencia com aquele script?
Não sei eu penso que não.
O outro script é este:
que armazena na lista as imagens

Código:
public class DropSlot : MonoBehaviour, IDropHandler {
   //declaração da classe em modo publico
   public Player player;

   //Força a declaração do metodo privado do objecto pai
   [SerializeField] private GameObject parent;

   //declaração do objecto item em modo privado
   private GameObject item;

   // Use this for initialization
   void start(){
      player = GameObject.FindGameObjectWithTag("Player").GetComponent<Player> ();
   }

   //função que adicona o item ao inventario que recebe as instruções
public void OnDrop(PointerEventData eventData){
      int count = 1;
         foreach(Transform subChild in parent.transform){
         if (!item && subChild != null && subChild.childCount < 1) {
            item = DragHandeler.itemDragging;
            item.transform.SetParent (transform);
            item.transform.position = transform.position;
            player.itemsList.Add (item.gameObject);
         }else if(subChild.childCount >= 1 && item) {
            DestroyObject(item.gameObject);
            player.itemsList.Remove (item.gameObject);
            }
         

      }
   }
   
   // Update is called once per frame
   void Update () {
      if (item != null && item.transform.parent != transform) {
         item = null;
      }
   }
}

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 3:27 pm

Vou ver oque consigo fazer
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 3:29 pm

Pokedlg escreveu:Vou ver oque consigo fazer
Obrigado. Pokedlg

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Ter Jan 19, 2021 8:43 pm

Denada Laughing. O negócio é complicado, to fazendo diversos teste e só voltei aqui para avisar que to quase conseguindo resolver  Curti isso
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Ter Jan 19, 2021 10:01 pm

Pokedlg escreveu:Denada Laughing. O negócio é complicado, to fazendo diversos teste e só voltei aqui para avisar que to quase conseguindo resolver  Curti isso
Muito Obrigado mais uma vez. Pokedlg

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 12:12 am

Bom, depois de horas de tentar resolver isso, eu finalmente consegui chegar a um resultado. Porém eu nao sei se irá funcionar, eu fiz o teste e funcionou perfeitamente, porém eu percebi no seu script que algumas voids e Rotina que parecem que são declaradas, mas nunca são chamadas, uma delas é o startMoviments, mas se a movimentação está funcionando acredito que voce deve chamar ela em algum outro script. Emfim eu fiz varias tentativas e no final descobri na verdade que era algo facil, era só chamar o foreach dentro do update para sempre atualizar o sprite, com uma booleana para o sprite mudar e associar as posições da movimentação.

Troque aquele primeiro script por esse e tente se isso irá funcionar, pois nao utilizei seu script para o teste eu criei um baseado no seu e depois que consegui resolver o problema, eu tentei modificar o seu para que fique com o mesmo resultado:

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class PlayerMoviment : MonoBehaviour {
   public bool isMoving, isSprite;
   public bool readyToChangeSprite = true;
   public Vector3 origPos, targetPos, currentPos;
   private float timeToMove = 0.2f;
   // Tempo entre cada chamada de um movimento
   public float respawnTime = 3.0f;
   public Player player;
   public List<Vector3> movimentsList;
   public Sprite ImagePlayerRotateUp;
   public Sprite ImagePlayerRotateDown;
   public Sprite ImagePlayerRotateLeft;
   public Sprite ImagePlayerRotateRight;
   private SpriteRenderer spritePlayerRenderer;
   int counter, countMoviments;

   // Use this for initialization
   void Start () {
      countMoviments = 0;
      player = GameObject.Find("Player").GetComponent<Player> ();

      //addMovimentsList();
  
   }

   void Update()
   {
       currentPos = transform.position;
       if(currentPos != targetPos)
            {
                isMoving = true;
                readyToChangeSprite = false;
            }
            else if (currentPos == targetPos)
            {
                isMoving = false;
                readyToChangeSprite = true;

            foreach (GameObject rotateSprite in player.itemList)
            {
                if (rotateSprite.name.Contains ("rotateUp")) {changeSprite(ImagePlayerRotateUp);}  
                
                if (rotateSprite.name.Contains ("rotateDown")) {changeSprite(ImagePlayerRotateDown);}
                
                if (rotateSprite.name.Contains ("rotateLeft")) {changeSprite(ImagePlayerRotateLeft);}
                
                if (rotateSprite.name.Contains ("rotateRight")) {changeSprite(ImagePlayerRotateRight);}
        }
        }
   }
   // Método a chamar na opção do botão Play
   public void startMoviments()
   {
      //Primeira chamada do moveWave

      StartCoroutine(moveWave());
      //rotateSpritePlayer ();
   }

   // Recria os varios movimentos na lista
   IEnumerator moveWave()
   {
      //rotateSpriteList.Reverse (0, rotateSpriteList.Count);
      // Enquanto a lista (lista) tiver movimentos ...");
  
      while (counter < movimentsList.Count)
      {
         yield return new WaitForSeconds(respawnTime);
         // Faz um movimento do jogador
      
      
         // Chama a sua função (ex: movePlayer()) para o movimento
         StartCoroutine (MovePlayer (movimentsList[countMoviments]));
  
            movimentsList.Remove (movimentsList [countMoviments]);

         counter++;
      }
   }

   public void rotateSpritePlayer(){
      
      foreach(GameObject rotateSprite in player.itemsList){
         if (rotateSprite.name.Contains ("rotateUp")) {
            changeSprite(ImagePlayerRotateUp);
            movimentsList.Add (Vector3.zero);
            }  
            
         if (rotateSprite.name.Contains ("rotateDown")) {
            changeSprite(ImagePlayerRotateDown);
            movimentsList.Add (Vector3.zero);
         }

         if (rotateSprite.name.Contains ("rotateLeft")) {
            changeSprite(ImagePlayerRotateLeft);
            movimentsList.Add (Vector3.zero);
         }
            
         if (rotateSprite.name.Contains ("rotateRight")) {
            changeSprite(ImagePlayerRotateRight);
            movimentsList.Add (Vector3.zero);
         }  
       }
   }

   public void movimentsPlayer(){
      foreach (GameObject moviment in player.itemsList) {

         if (moviment.name.Contains ("moveUp")) {
            movimentsList.Add (Vector3.up);

         } else if (moviment.name.Contains ("moveDown")) {
            movimentsList.Add (Vector3.down);

         } else if (moviment.name.Contains ("moveLeft")) {
            movimentsList.Add (Vector3.left);

         } else if (moviment.name.Contains ("moveRight")) {
            movimentsList.Add (Vector3.right);
         }

      
         //countMoviments++;
      }        
   }
  
   public void handleCatchItems(){
      foreach(GameObject handle in player.itemsList){
         if (handle.name.Contains ("handleCatch")) {
            movimentsList.Add (Vector3.zero);
            Debug.Log ("Hello");
         }
      }
   }

      
   public IEnumerator MovePlayer(Vector3 direction) // função que enumera as direções do teclado
   {
      isMoving = true;
      float elapsedTime = 0;
      origPos = transform.position;
      targetPos = origPos + direction;

      while (elapsedTime < timeToMove) {

         transform.position = Vector3.MoveTowards (origPos, targetPos, (elapsedTime / timeToMove));//modifica as posições interpolando linearmente entre dois vectores
         elapsedTime += Time.deltaTime;
         yield return null;
      }
      transform.position = targetPos;
      isMoving = false;
      if (FuelBar.Fuel > 0) {
        
         FuelBar.Fuel -= 1.0f;
         transform.position = targetPos;
      } else {
         SceneManager.LoadScene (1);

      }
   }

   public void changeSprite(Sprite sprite){
      spritePlayerRenderer = GetComponent<SpriteRenderer> ();
      if (readyToChangeSprite == true)
      {
      spritePlayerRenderer.sprite = sprite ;
      }
   }

Voce verá que eu criei um novo Vector3 o currentPos, que ele sempre atualizará constantemente a posição atual do seu player, e quando o targetPos muda, e a posição atual (currentPos) for diferente do trajeto, o isMoving será true e quando o isMoving é true, o readyToChangeSprite é false e quando o readyToChangeSprite, ele nao poderá mudar de sprite, até que a posição atual corresponda ao trajeto e quando isso acontecer, isMoving será false e readyToChangeSprite será true, o que consequentemente, irá chamar o foreach novamente atualizando assim para o ultimo sprite Smile.

E também troquei o Vector3.Lerp pelo Vector3.MoveTowards (Ele é mais preciso)

Como eu disse, talvez nao funcione, vai que eu esqueci algo, se nao funcionar iremos tentar resolver de novo. Mas teoricamente era para funcionar.
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 1:24 am

Funcionou?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Qua Jan 20, 2021 1:37 am

Pokedlg escreveu:Funcionou?
Antes de mais quero lhe agrade de me estar a ajudar. Ainda não funcionou ainda mostra o último sprite será que é por causa do script que tenho o botão e quando clico. Eu lá tenho pela seguinte ordem a chamar as funcoes:
startMoviments
MovimentsPlayer 
rotateSpritePlayer

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 1:43 am

Quando voce clica o botao voce chama essas tres voids?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Qua Jan 20, 2021 1:48 am

Pokedlg escreveu:Quando voce clica o botao voce chama essas tres voids?
Sim.

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Qua Jan 20, 2021 1:53 am

Xremix30 escreveu:
Pokedlg escreveu:Quando voce clica o botao voce chama essas tres voids?
Sim.
Elas estão dentro da função onclick() { playerMoviment.startMovinents()
playerMoviment.movinentsPlayer() 
player Moviment.rotateSpritePlayer()}
Quando clico em play ele faz o qie está dentro dessas funcoes

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 1:58 am

Acho que descobri, como eu tinha dito, como eu nao usei seu script para fazer o teste, eu acabei de  perceber que esqueci duas linhas de código. Bom veja se isso agora da certo:

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class PlayerMoviment : MonoBehaviour {
  public bool isMoving, isSprite;
  public bool readyToChangeSprite = true;
  public Vector3 origPos, targetPos, currentPos;
  private float timeToMove = 0.2f;
  // Tempo entre cada chamada de um movimento
  public float respawnTime = 3.0f;
  public Player player;
  public List<Vector3> movimentsList;
  public Sprite ImagePlayerRotateUp;
  public Sprite ImagePlayerRotateDown;
  public Sprite ImagePlayerRotateLeft;
  public Sprite ImagePlayerRotateRight;
  private SpriteRenderer spritePlayerRenderer;
  int counter, countMoviments;

  // Use this for initialization
  void Start () {
      countMoviments = 0;
      player = GameObject.Find("Player").GetComponent<Player> ();

      //addMovimentsList();
 
  }

  void Update()
  {
      currentPos = transform.position;
      if(currentPos != targetPos)
            {
                readyToChangeSprite = false;
            }
            else if (currentPos == targetPos)
            {
                isMoving = false;
                readyToChangeSprite = true;

            foreach (GameObject rotateSprite in player.itemList)
            {
                if (rotateSprite.name.Contains ("rotateUp")) {changeSprite(ImagePlayerRotateUp);} 
               
                if (rotateSprite.name.Contains ("rotateDown")) {changeSprite(ImagePlayerRotateDown);}
               
                if (rotateSprite.name.Contains ("rotateLeft")) {changeSprite(ImagePlayerRotateLeft);}
               
                if (rotateSprite.name.Contains ("rotateRight")) {changeSprite(ImagePlayerRotateRight);}
        }
        }
  }
  // Método a chamar na opção do botão Play
  public void startMoviments()
  {
      //Primeira chamada do moveWave

      StartCoroutine(moveWave());
      //rotateSpritePlayer ();
  }

  // Recria os varios movimentos na lista
  IEnumerator moveWave()
  {
      http://rotateSpriteList.Reverse (0, rotateSpriteList.Count);
      // Enquanto a lista (lista) tiver movimentos ...");
 
      while (counter < movimentsList.Count)
      {
        yield return new WaitForSeconds(respawnTime);
        // Faz um movimento do jogador
     
     
        // Chama a sua função (ex: movePlayer()) para o movimento
        StartCoroutine (MovePlayer (movimentsList[countMoviments]));
 
            movimentsList.Remove (movimentsList [countMoviments]);

        counter++;
      }
  }

  public void rotateSpritePlayer(){
     
      foreach(GameObject rotateSprite in player.itemsList){
        if (rotateSprite.name.Contains ("rotateUp")) {
            changeSprite(ImagePlayerRotateUp);
            movimentsList.Add (Vector3.zero);
            } 
           
        if (rotateSprite.name.Contains ("rotateDown")) {
            changeSprite(ImagePlayerRotateDown);
            movimentsList.Add (Vector3.zero);
        }

        if (rotateSprite.name.Contains ("rotateLeft")) {
            changeSprite(ImagePlayerRotateLeft);
            movimentsList.Add (Vector3.zero);
        }
           
        if (rotateSprite.name.Contains ("rotateRight")) {
            changeSprite(ImagePlayerRotateRight);
            movimentsList.Add (Vector3.zero);
        } 
      }
  }

  public void movimentsPlayer(){
      foreach (GameObject moviment in player.itemsList) {

        if (moviment.name.Contains ("moveUp")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.up);

        } else if (moviment.name.Contains ("moveDown")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.down);

        } else if (moviment.name.Contains ("moveLeft")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.left);

        } else if (moviment.name.Contains ("moveRight")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.right);
        }

     
        //countMoviments++;
      }       
  }
 
  public void handleCatchItems(){
      foreach(GameObject handle in player.itemsList){
        if (handle.name.Contains ("handleCatch")) {
            movimentsList.Add (Vector3.zero);
            Debug.Log ("Hello");
        }
      }
  }

     
  public IEnumerator MovePlayer(Vector3 direction) // função que enumera as direções do teclado
  {
      isMoving = true;
      float elapsedTime = 0;
      origPos = transform.position;
      targetPos = origPos + direction;

      while (elapsedTime < timeToMove) {

        transform.position = Vector3.Lerp (origPos, targetPos, (elapsedTime / timeToMove));//modifica as posições interpolando linearmente entre dois vectores
        elapsedTime += Time.deltaTime;
        yield return null;
      }
      transform.position = targetPos;
      isMoving = false;
      if (FuelBar.Fuel > 0) {
       
        FuelBar.Fuel -= 1.0f;
        transform.position = targetPos;
      } else {
        SceneManager.LoadScene (1);

      }
  }

  public void changeSprite(Sprite sprite){
      spritePlayerRenderer = GetComponent<SpriteRenderer> ();
      if (readyToChangeSprite == true)
      {
      spritePlayerRenderer.sprite = sprite ;
      }
  }
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Qua Jan 20, 2021 2:12 am

Pokedlg escreveu:Acho que descobri, como eu tinha dito, como eu nao usei seu script para fazer o teste, eu acabei de  perceber que esqueci duas linhas de código. Bom veja se isso agora da certo:

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class PlayerMoviment : MonoBehaviour {
   public bool isMoving, isSprite;
   public bool readyToChangeSprite = true;
   public Vector3 origPos, targetPos, currentPos;
   private float timeToMove = 0.2f;
   // Tempo entre cada chamada de um movimento
   public float respawnTime = 3.0f;
   public Player player;
   public List<Vector3> movimentsList;
   public Sprite ImagePlayerRotateUp;
   public Sprite ImagePlayerRotateDown;
   public Sprite ImagePlayerRotateLeft;
   public Sprite ImagePlayerRotateRight;
   private SpriteRenderer spritePlayerRenderer;
   int counter, countMoviments;

   // Use this for initialization
   void Start () {
      countMoviments = 0;
      player = GameObject.Find("Player").GetComponent<Player> ();

      //addMovimentsList();
  
   }

   void Update()
   {
       currentPos = transform.position;
       if(currentPos != targetPos)
            {
                readyToChangeSprite = false;
            }
            else if (currentPos == targetPos)
            {
                isMoving = false;
                readyToChangeSprite = true;

            foreach (GameObject rotateSprite in player.itemList)
            {
                if (rotateSprite.name.Contains ("rotateUp")) {changeSprite(ImagePlayerRotateUp);}  
                
                if (rotateSprite.name.Contains ("rotateDown")) {changeSprite(ImagePlayerRotateDown);}
                
                if (rotateSprite.name.Contains ("rotateLeft")) {changeSprite(ImagePlayerRotateLeft);}
                
                if (rotateSprite.name.Contains ("rotateRight")) {changeSprite(ImagePlayerRotateRight);}
        }
        }
   }
   // Método a chamar na opção do botão Play
   public void startMoviments()
   {
      //Primeira chamada do moveWave

      StartCoroutine(moveWave());
      //rotateSpritePlayer ();
   }

   // Recria os varios movimentos na lista
   IEnumerator moveWave()
   {
      //rotateSpriteList.Reverse (0, rotateSpriteList.Count);
      // Enquanto a lista (lista) tiver movimentos ...");
  
      while (counter < movimentsList.Count)
      {
         yield return new WaitForSeconds(respawnTime);
         // Faz um movimento do jogador
      
      
         // Chama a sua função (ex: movePlayer()) para o movimento
         StartCoroutine (MovePlayer (movimentsList[countMoviments]));
  
            movimentsList.Remove (movimentsList [countMoviments]);

         counter++;
      }
   }

   public void rotateSpritePlayer(){
      
      foreach(GameObject rotateSprite in player.itemsList){
         if (rotateSprite.name.Contains ("rotateUp")) {
            changeSprite(ImagePlayerRotateUp);
            movimentsList.Add (Vector3.zero);
            }  
            
         if (rotateSprite.name.Contains ("rotateDown")) {
            changeSprite(ImagePlayerRotateDown);
            movimentsList.Add (Vector3.zero);
         }

         if (rotateSprite.name.Contains ("rotateLeft")) {
            changeSprite(ImagePlayerRotateLeft);
            movimentsList.Add (Vector3.zero);
         }
            
         if (rotateSprite.name.Contains ("rotateRight")) {
            changeSprite(ImagePlayerRotateRight);
            movimentsList.Add (Vector3.zero);
         }  
       }
   }

   public void movimentsPlayer(){
      foreach (GameObject moviment in player.itemsList) {

         if (moviment.name.Contains ("moveUp")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.up);

         } else if (moviment.name.Contains ("moveDown")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.down);

         } else if (moviment.name.Contains ("moveLeft")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.left);

         } else if (moviment.name.Contains ("moveRight")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.right);
         }

      
         //countMoviments++;
      }        
   }
  
   public void handleCatchItems(){
      foreach(GameObject handle in player.itemsList){
         if (handle.name.Contains ("handleCatch")) {
            movimentsList.Add (Vector3.zero);
            Debug.Log ("Hello");
         }
      }
   }

      
   public IEnumerator MovePlayer(Vector3 direction) // função que enumera as direções do teclado
   {
      isMoving = true;
      float elapsedTime = 0;
      origPos = transform.position;
      targetPos = origPos + direction;

      while (elapsedTime < timeToMove) {

         transform.position = Vector3.Lerp (origPos, targetPos, (elapsedTime / timeToMove));//modifica as posições interpolando linearmente entre dois vectores
         elapsedTime += Time.deltaTime;
         yield return null;
      }
      transform.position = targetPos;
      isMoving = false;
      if (FuelBar.Fuel > 0) {
        
         FuelBar.Fuel -= 1.0f;
         transform.position = targetPos;
      } else {
         SceneManager.LoadScene (1);

      }
   }

   public void changeSprite(Sprite sprite){
      spritePlayerRenderer = GetComponent<SpriteRenderer> ();
      if (readyToChangeSprite == true)
      {
      spritePlayerRenderer.sprite = sprite ;
      }
   }
Continua a mostrar só a ultima sprite por ex: se meter ele a rodar para direita + seta da direita 4x + rodar para baixo + seta para baixo ele muda logo no inicio para o ultimo sprite que inseri

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Qua Jan 20, 2021 2:18 am

Xremix30 escreveu:
Pokedlg escreveu:Acho que descobri, como eu tinha dito, como eu nao usei seu script para fazer o teste, eu acabei de  perceber que esqueci duas linhas de código. Bom veja se isso agora da certo:

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class PlayerMoviment : MonoBehaviour {
   public bool isMoving, isSprite;
   public bool readyToChangeSprite = true;
   public Vector3 origPos, targetPos, currentPos;
   private float timeToMove = 0.2f;
   // Tempo entre cada chamada de um movimento
   public float respawnTime = 3.0f;
   public Player player;
   public List<Vector3> movimentsList;
   public Sprite ImagePlayerRotateUp;
   public Sprite ImagePlayerRotateDown;
   public Sprite ImagePlayerRotateLeft;
   public Sprite ImagePlayerRotateRight;
   private SpriteRenderer spritePlayerRenderer;
   int counter, countMoviments;

   // Use this for initialization
   void Start () {
      countMoviments = 0;
      player = GameObject.Find("Player").GetComponent<Player> ();

      //addMovimentsList();
  
   }

   void Update()
   {
       currentPos = transform.position;
       if(currentPos != targetPos)
            {
                readyToChangeSprite = false;
            }
            else if (currentPos == targetPos)
            {
                isMoving = false;
                readyToChangeSprite = true;

            foreach (GameObject rotateSprite in player.itemList)
            {
                if (rotateSprite.name.Contains ("rotateUp")) {changeSprite(ImagePlayerRotateUp);}  
                
                if (rotateSprite.name.Contains ("rotateDown")) {changeSprite(ImagePlayerRotateDown);}
                
                if (rotateSprite.name.Contains ("rotateLeft")) {changeSprite(ImagePlayerRotateLeft);}
                
                if (rotateSprite.name.Contains ("rotateRight")) {changeSprite(ImagePlayerRotateRight);}
        }
        }
   }
   // Método a chamar na opção do botão Play
   public void startMoviments()
   {
      //Primeira chamada do moveWave

      StartCoroutine(moveWave());
      //rotateSpritePlayer ();
   }

   // Recria os varios movimentos na lista
   IEnumerator moveWave()
   {
      //rotateSpriteList.Reverse (0, rotateSpriteList.Count);
      // Enquanto a lista (lista) tiver movimentos ...");
  
      while (counter < movimentsList.Count)
      {
         yield return new WaitForSeconds(respawnTime);
         // Faz um movimento do jogador
      
      
         // Chama a sua função (ex: movePlayer()) para o movimento
         StartCoroutine (MovePlayer (movimentsList[countMoviments]));
  
            movimentsList.Remove (movimentsList [countMoviments]);

         counter++;
      }
   }

   public void rotateSpritePlayer(){
      
      foreach(GameObject rotateSprite in player.itemsList){
         if (rotateSprite.name.Contains ("rotateUp")) {
            changeSprite(ImagePlayerRotateUp);
            movimentsList.Add (Vector3.zero);
            }  
            
         if (rotateSprite.name.Contains ("rotateDown")) {
            changeSprite(ImagePlayerRotateDown);
            movimentsList.Add (Vector3.zero);
         }

         if (rotateSprite.name.Contains ("rotateLeft")) {
            changeSprite(ImagePlayerRotateLeft);
            movimentsList.Add (Vector3.zero);
         }
            
         if (rotateSprite.name.Contains ("rotateRight")) {
            changeSprite(ImagePlayerRotateRight);
            movimentsList.Add (Vector3.zero);
         }  
       }
   }

   public void movimentsPlayer(){
      foreach (GameObject moviment in player.itemsList) {

         if (moviment.name.Contains ("moveUp")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.up);

         } else if (moviment.name.Contains ("moveDown")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.down);

         } else if (moviment.name.Contains ("moveLeft")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.left);

         } else if (moviment.name.Contains ("moveRight")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.right);
         }

      
         //countMoviments++;
      }        
   }
  
   public void handleCatchItems(){
      foreach(GameObject handle in player.itemsList){
         if (handle.name.Contains ("handleCatch")) {
            movimentsList.Add (Vector3.zero);
            Debug.Log ("Hello");
         }
      }
   }

      
   public IEnumerator MovePlayer(Vector3 direction) // função que enumera as direções do teclado
   {
      isMoving = true;
      float elapsedTime = 0;
      origPos = transform.position;
      targetPos = origPos + direction;

      while (elapsedTime < timeToMove) {

         transform.position = Vector3.Lerp (origPos, targetPos, (elapsedTime / timeToMove));//modifica as posições interpolando linearmente entre dois vectores
         elapsedTime += Time.deltaTime;
         yield return null;
      }
      transform.position = targetPos;
      isMoving = false;
      if (FuelBar.Fuel > 0) {
        
         FuelBar.Fuel -= 1.0f;
         transform.position = targetPos;
      } else {
         SceneManager.LoadScene (1);

      }
   }

   public void changeSprite(Sprite sprite){
      spritePlayerRenderer = GetComponent<SpriteRenderer> ();
      if (readyToChangeSprite == true)
      {
      spritePlayerRenderer.sprite = sprite ;
      }
   }
Continua a mostrar só a ultima sprite por ex: se meter ele a rodar para direita + seta da direita 4x + rodar para baixo + seta para baixo ele muda logo no inicio para o ultimo sprite que inseri
Ele está a mudar para o ultimo sprite sempre que anda a primeira vez para a frente

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 10:14 am

Desculpa demorar. Então ele só muda depois de se movimentar uma vez?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Qua Jan 20, 2021 10:22 am

Pokedlg escreveu:Desculpa demorar. Então ele só muda depois de se movimentar uma vez?
Não faz mal. Sim o que eu acho um bocado estranho.

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 10:26 am

Pelo menos ja conseguimos fazer ele respeitar uma sequencia de movimento, acredito que isso aconteça por causa que quando ele termina uma movimentação currentPos se torna igual a targetPos, acredito que teremos que somar todas as direções que possui na lista, e definir o resultado como trajeto final. Acho que isso daria certo.
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 10:34 am

Bom irei tentar alguns testes e ja volto para dizer se desse jeito irá funcionar.
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 11:01 am

Tente fazer o teste agora:

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class PlayerMoviment : MonoBehaviour {
  public bool isMoving, isSprite;
  public bool readyToChangeSprite = true;
  public Vector3 origPos, targetPos, currentPos, finalTarget;
  private float timeToMove = 0.2f;
  // Tempo entre cada chamada de um movimento
  public float respawnTime = 3.0f;
  public Player player;
  public List<Vector3> movimentsList;
  public Sprite ImagePlayerRotateUp;
  public Sprite ImagePlayerRotateDown;
  public Sprite ImagePlayerRotateLeft;
  public Sprite ImagePlayerRotateRight;
  private SpriteRenderer spritePlayerRenderer;
  int counter, countMoviments;

  // Use this for initialization
  void Start () {
      countMoviments = 0;
      player = GameObject.Find("Player").GetComponent<Player> ();
      //addMovimentsList();
 
  }

  void Update()
  {
      currentPos = transform.position;
      if(currentPos != finalTarget)
            {
                readyToChangeSprite = false;
            }
            else if (currentPos == finalTarget)
            {
                isMoving = false;
                readyToChangeSprite = true;

            foreach (GameObject rotateSprite in player.itemList)
            {
                if (rotateSprite.name.Contains ("rotateUp")) {changeSprite(ImagePlayerRotateUp);} 
               
                if (rotateSprite.name.Contains ("rotateDown")) {changeSprite(ImagePlayerRotateDown);}
               
                if (rotateSprite.name.Contains ("rotateLeft")) {changeSprite(ImagePlayerRotateLeft);}
               
                if (rotateSprite.name.Contains ("rotateRight")) {changeSprite(ImagePlayerRotateRight);}
        }
        }
  }
  // Método a chamar na opção do botão Play
  public void startMoviments()
  {
      //Primeira chamada do moveWave

      StartCoroutine(moveWave());
      //rotateSpritePlayer ();
  }

  // Recria os varios movimentos na lista
  IEnumerator moveWave()
  {
      http://rotateSpriteList.Reverse (0, rotateSpriteList.Count);
      // Enquanto a lista (lista) tiver movimentos ...");
 
      while (counter < movimentsList.Count)
      {
        yield return new WaitForSeconds(respawnTime);
        // Faz um movimento do jogador
     
     
        // Chama a sua função (ex: movePlayer()) para o movimento
        StartCoroutine (MovePlayer (movimentsList[countMoviments]));
 
            movimentsList.Remove (movimentsList [countMoviments]);

        counter++;
      }
  }

  public void rotateSpritePlayer(){
     
      foreach(GameObject rotateSprite in player.itemsList){
        if (rotateSprite.name.Contains ("rotateUp")) {
            changeSprite(ImagePlayerRotateUp);
            movimentsList.Add (Vector3.zero);
            } 
           
        if (rotateSprite.name.Contains ("rotateDown")) {
            changeSprite(ImagePlayerRotateDown);
            movimentsList.Add (Vector3.zero);
        }

        if (rotateSprite.name.Contains ("rotateLeft")) {
            changeSprite(ImagePlayerRotateLeft);
            movimentsList.Add (Vector3.zero);
        }
           
        if (rotateSprite.name.Contains ("rotateRight")) {
            changeSprite(ImagePlayerRotateRight);
            movimentsList.Add (Vector3.zero);
        } 
      }
  }

  public void movimentsPlayer(){
      foreach (GameObject moviment in player.itemsList) {

        if (moviment.name.Contains ("moveUp")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.up);
            finalTarget += Vector3.up;

        } else if (moviment.name.Contains ("moveDown")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.down);
            finalTarget += Vector3.down;

        } else if (moviment.name.Contains ("moveLeft")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.left);
            finalTarget += Vector3.left;

        } else if (moviment.name.Contains ("moveRight")) {
            isMoving = true;
            if(isMoving == true){readyToChangeSprite = false;}
            movimentsList.Add (Vector3.right);
            finalTarget += Vector3.right;
        }

     
        //countMoviments++;
      }       
  }
 
  public void handleCatchItems(){
      foreach(GameObject handle in player.itemsList){
        if (handle.name.Contains ("handleCatch")) {
            movimentsList.Add (Vector3.zero);
            Debug.Log ("Hello");
        }
      }
  }

     
  public IEnumerator MovePlayer(Vector3 direction) // função que enumera as direções do teclado
  {
      isMoving = true;
      float elapsedTime = 0;
      origPos = transform.position;
      targetPos = origPos + direction;

      while (elapsedTime < timeToMove) {

        transform.position = Vector3.Lerp (origPos, targetPos, (elapsedTime / timeToMove));//modifica as posições interpolando linearmente entre dois vectores
        elapsedTime += Time.deltaTime;
        yield return null;
      }
      transform.position = targetPos;
      isMoving = false;
      if (FuelBar.Fuel > 0) {
       
        FuelBar.Fuel -= 1.0f;
        transform.position = targetPos;
      } else {
        SceneManager.LoadScene (1);

      }
  }

  public void changeSprite(Sprite sprite){
      spritePlayerRenderer = GetComponent<SpriteRenderer> ();
      if (readyToChangeSprite == true)
      {
      spritePlayerRenderer.sprite = sprite ;
      }
  }
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 11:05 am

Provavelmente isso nao irá funcionar precisamente, mas ele irá esperar todas movimentações para aí sim poder fazer a alteração do sprite.
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Qua Jan 20, 2021 11:18 am

Pokedlg escreveu:Provavelmente isso nao irá funcionar precisamente, mas ele irá esperar todas movimentações para aí sim poder fazer a alteração do sprite.
Já fiz o teste. As movimentações estão corretas mas não muda de sprite vai sempre com o mesmo sprite que começo. O jogo até ao fim

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 11:25 am

Que estranho
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 11:27 am

Voce poderia mandar um print do finalTarget quando terminar a movimentação?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Xremix30 Qua Jan 20, 2021 11:36 am

Pokedlg escreveu:Que estranho
O script onde faço a ligaçao ao botao é este:
Código:
   using System.Collections;
   using System.Collections.Generic;
   using UnityEngine;
   using UnityEngine.UI;

   public class PlayInstructions : MonoBehaviour {
      //Declaração do botão em modo publico
       public Button btnPlay;

      //Declaração da classe em modo publico
      public PlayerMoviment playerMoviment;
      
      //Declaração da classe em modo privado
      private Player player;
      
      // Use this for initialization
      void Start () {
      btnPlay.interactable = true;
      player = GameObject.FindGameObjectWithTag("Player").GetComponent<Player> ();
      //playerMoviment = GetComponent<PlayerMoviment> ();
      btnPlay = GetComponent<Button> ();
      btnPlay.onClick.AddListener (MovimentOnClick);
      }

   //função que inicia os movimentos ao ser clicado no botão play
      public void MovimentOnClick ()
   {
      playerMoviment.startMoviments ();
      playerMoviment.movimentsPlayer ();
      playerMoviment.rotateSpritePlayer ();
      //playerMoviment.handleCatchItems ();
      //   btnPlay.interactable = true;

      }
         
   }
o print quando o robo chega ao fim 
imagem da posição final no jogo do robo

Xremix30
Membro
Membro

PONTOS : 1529
REPUTAÇÃO : 3

Ir para o topo Ir para baixo

DÚVIDA Re: Problema mudar de sprite sempre que seja adicionado um novo sprite a lista

Mensagem por Pokedlg Qua Jan 20, 2021 11:41 am

O Sprite mudou?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1506
REPUTAÇÃO : 195
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista Aad8pUi

Ir para o topo Ir para baixo

Página 1 de 2 1, 2  Seguinte

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos