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:
Arquivo jar não encontrado
OBJETO sendo detruído imediatamente mesmo com o...
Meu site de Modelos 3D
DÚVIDA - ao pressionar andar, o player parece cancelar a gravidade (VÍDEO)
[RESLVIDO] Unity - "transform.SetParent()" em 2 objetos move outros objetos
Dúvida sobre resoluções de tela
Duvida na AppleStore
pressionando a tecla abaixar, o player continua andando abaixado (2D).
Fala Pessoal! Saiu mais um trailer do jogo que venho desenvolvendo
[RESOLVIDO] passar de uma animação para a outra rapidamente pelo animator
Unity - PlayerPrefs n são apagados no Celular mesmo Reiniciando o Aparelho
Modeloes 3D do Site Sketchfab
Blender - Modelos Importados transparentes
[PEDIDO]Cololar jogo na loja play store
Como pegar um objeto e fazer ele aparecer em forma de Estamina no Inspector
Procuro Pessoas para Projeto
Algum tutorial de como fazer um app que receba fotos e q fiqu armazenado no
Procuro um time para um jogo de corrida
[RESOLVIDO] Botões de Ataque e Pular carrega duas animações ao mesmo tempo
DEATH ISLAND 0.2.5 SURVIVAL GAME 4 ANOS EM DESENVOLVIMENTO
Player travando na colisão com o chão Unity 2D
Como resolver vazamento de memoria?
Instanciar uma classe nos atributos de outra classe é uma boa prática?
Jogo multiplayer com steam
Unity - Renderizção com Câmera Jogo Lento e travando. Alguém pfv?!
Mini Quarteirão com Texturas 3D VENDA
Controle do braço e cabeça no fps
PRECISO FAZER QUE MEU GAME FIQUE ONLINE
Ativar o objeto correto em Clones.
[TUTORIAL] Como fazer um interruptor simples (Unity 2018)
Preciso de 20 testadores jogo mobile
O Labirinto II - Trailer Oficial
Ue posso divulgar meu game que ainda esta em criaçao aqui no forum?
[RESOLVIDO] Inverter o sprite para a direçao que o personagem anda.
Set Active não a reabiilitado C#
Build APK VR Google Cardbord com video.
[PROGRAMADOR FREELA] $$
Mais Um jogo!
Collider (mesh?)
[TUTORIAL] Deformar mesh com batidas (para objetos, veículos, etc)
WW2 Low poly Pack (Free)
Procuro freelancer
Novo Teaser do jogo Dark Age
Unity Admob Erro
Sombras estão quadradas na build
nao consigo fazer o player sentar no sofa alguem me ajuda
Unity - Ao mudar de scene, todas as Lights são deletadas
210 Linhas de código para inimigo é muito grande?
modelar avatar e skins para um jogo web
ShapeKeys do Blender para a Unity altera áreas próximas
COMO EVITAR QUE UM OBJETO (PLAYER,ITEM ETC...) ATRAVESSE UMA PAREDE.
Ajuda em Script de Verificação de Ação e Reação
unity Failed to load PlayerSettings (internal index #0). Most likely data f
Materiais do Blander não aparecem no MeshRendere do Objeto na Unity
Repetiçoes de Textura no Terreno
SERVER IS DOWN - UNITY+MSQL
Procuro programadores - Novo jogo
Problema com o MS VEHICLES
Preciso de ajuda com a Unity
Problema com vídeo em 360° na Unity
Problemas no MS Vehicles
unity- eventos na Animação com Armature/Bones vinda do blender não funciona
ajuda exibir resultados simulados em uma liga Game Unity
Unity - ParticleSystem não é redirecionado no rawimage no canvas
Como resolver o problema de "face orientation" no Blender.
[DÚVIDA] Tive um problema com meu Canvas
erro na Directional Light
Problemas com o Directional Light da Unity 3D
Novo jogo da franquia Sphere game em desenvolvimento
malha da roda não girando com wheel collider unity
Problemas com ambiguidade
Touch mobile
INVALID TOKEN
Como acessar o "HD Render Pipeline" do HDRP por script?
CHAT GPT PRA JOGO DE TIRO? comentem
Tutorial script inimigo segue e foge do player
Ainda vale a pena lançar Asset na Asset Store?
Ajuda com tabela de historico de pontuaçao.
[TUTORIAL] Entrar no carro estilo GTA
Como derrapar um Whell Collider
Como altertar o valor do "Asymptote Value" do Whell Collider via Script
Preciso de ajuda para substituir valor de variavel em outro script
Ajuda com Top Down Shooter utilizando Photon
Duvida com Netcode
[RESOLVIDO] Unity - Movendo a Câmera na Horizontal/Vertical com Touch
Alguém me ajuda com os anúncios pfv
Segundo Trailer do jogo Dark Age, Feliz Natal a todos!
Unity - ScrollRect, Viewport, Content - O Conteúdo ñ inicia no topo
Coleta de itens
Unity - Cadastro do email do jogador
[GRATIS] PACK DE MODELOS 3D PARA JOGO DE TERROR
Onde Conseguir músicas para meu Jogo?
error CS0246 em Script
Alguem teve ja esse problema?
[Projeto em Andamento] Draug, um jogo de hordas
DISPONIVEL PARA FAZER MODELOS 3D
Unity-Loja.Como os Jogadores terão acesso aos ítens comprados na PlayStore?
Bugando depois do Build.
Primeiro Trailer do jogo Dark Age
Qua Out 23, 2024 8:39 pm
Sex Out 18, 2024 4:05 pm
Dom Out 06, 2024 6:02 pm
Sáb Out 05, 2024 6:37 am
Qui Out 03, 2024 10:09 pm
Seg Set 30, 2024 9:25 am
Sáb Set 28, 2024 11:39 am
Seg Set 09, 2024 7:33 am
Dom Set 08, 2024 10:08 pm
Ter Set 03, 2024 11:59 am
Qua Ago 28, 2024 7:45 pm
Qua Ago 28, 2024 7:18 pm
Qua Ago 28, 2024 8:34 am
Dom Ago 25, 2024 8:37 pm
Sáb Ago 24, 2024 1:58 pm
Sex Ago 23, 2024 3:30 pm
Sex Ago 23, 2024 3:23 pm
Qua Ago 21, 2024 5:48 pm
Dom Ago 18, 2024 8:51 pm
Sex Ago 16, 2024 12:59 pm
Qua Ago 14, 2024 10:57 am
Sáb Ago 10, 2024 8:03 pm
Sex Ago 09, 2024 7:37 pm
Dom Ago 04, 2024 4:41 pm
Dom Ago 04, 2024 3:16 pm
Qui Jul 25, 2024 2:48 pm
Dom Jul 21, 2024 7:07 pm
Dom Jul 21, 2024 12:07 am
Sáb Jul 13, 2024 12:33 am
Qui Jun 27, 2024 5:49 pm
Qui Jun 20, 2024 12:30 pm
Dom Jun 09, 2024 7:43 pm
Dom Jun 09, 2024 2:16 pm
Seg Jun 03, 2024 11:39 am
Seg maio 27, 2024 12:45 pm
Seg maio 20, 2024 9:01 pm
Dom maio 19, 2024 3:08 pm
Sáb maio 18, 2024 11:46 am
Sáb maio 11, 2024 8:55 am
Qui maio 09, 2024 11:33 pm
Seg Abr 29, 2024 9:34 pm
Qui Abr 25, 2024 3:34 pm
Seg Abr 22, 2024 5:15 pm
Seg Abr 15, 2024 12:23 pm
Seg Abr 08, 2024 9:27 pm
Seg Abr 08, 2024 8:01 am
Sáb Abr 06, 2024 8:05 pm
Qui Abr 04, 2024 11:34 pm
Qui Abr 04, 2024 11:13 pm
Sex Mar 22, 2024 2:41 pm
Dom Mar 10, 2024 2:30 pm
Sex Mar 01, 2024 1:27 pm
Qui Fev 22, 2024 9:57 pm
Ter Fev 20, 2024 12:15 am
Seg Fev 19, 2024 1:06 pm
Seg Fev 12, 2024 1:56 pm
Seg Fev 12, 2024 1:17 pm
Dom Fev 11, 2024 8:55 pm
Dom Fev 11, 2024 11:16 am
Seg Fev 05, 2024 4:18 pm
Dom Fev 04, 2024 9:39 pm
Qua Jan 31, 2024 11:59 pm
Ter Jan 30, 2024 7:37 pm
Ter Jan 23, 2024 6:33 pm
Dom Jan 21, 2024 6:03 pm
Sáb Jan 20, 2024 7:03 pm
Sáb Jan 20, 2024 6:58 pm
Sáb Jan 20, 2024 6:39 pm
Sex Jan 19, 2024 8:40 am
Dom Jan 14, 2024 5:30 pm
Qua Jan 10, 2024 10:29 pm
Qua Jan 10, 2024 8:55 pm
Qua Jan 10, 2024 7:14 pm
Ter Jan 09, 2024 3:55 pm
Ter Jan 09, 2024 8:04 am
Sáb Jan 06, 2024 8:02 pm
Sex Jan 05, 2024 7:01 am
Sex Jan 05, 2024 12:12 am
Qui Jan 04, 2024 6:55 pm
Qui Jan 04, 2024 12:52 pm
Qui Jan 04, 2024 4:34 am
Ter Jan 02, 2024 11:48 pm
Dom Dez 31, 2023 7:25 pm
Qua Dez 27, 2023 5:44 pm
Qua Dez 27, 2023 3:08 pm
Sáb Dez 23, 2023 7:27 pm
Sáb Dez 23, 2023 5:06 pm
Qui Dez 21, 2023 8:10 pm
Seg Dez 18, 2023 2:04 pm
Sex Dez 15, 2023 5:11 pm
Qui Dez 14, 2023 9:13 pm
Qui Dez 14, 2023 2:47 pm
Qui Dez 14, 2023 1:48 pm
Qua Dez 13, 2023 8:58 pm
Ter Dez 12, 2023 2:32 pm
Seg Dez 11, 2023 1:53 pm
Qua Dez 06, 2023 8:13 pm
Sáb Dez 02, 2023 8:06 pm
Qui Nov 30, 2023 7:49 am



































































































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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2336
REPUTAÇÃO : 198
Á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 : 2336
REPUTAÇÃO : 198
Á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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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 : 2336
REPUTAÇÃO : 198
Á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 : 2355
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 : 2336
REPUTAÇÃO : 198
Á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