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:
[JOGO] Darkman jogo de puzzle | Pixel Art
AGAIN ! [Game Jam]
Tela de escolher um nome ativa quando sai e entra na cena de novo...
Fazer Objeto sair de 1 lado da camera e entrar do outro lado em seguida
[TUTORIAL] COMO CRIAR UM JOGO DE LUTA 2D UNITY 2021
Copiar um componente de um GameObject para outro já configurado?
Idioma automático por país??
[TUTORIAL] Sistema de diálogo/mensagens na Unity
Rotação ao colidir.
travar RigidBody2D através de codigo
Como resolver problema da mesh não renderizar após fazer a build
[RESOLVIDO] Trocar o áudio dependendo da tag do terreno
Funcionalidade Vuforia - UNITY 3D
RANDOMIZAR ATAQUES
Unity + Photon 2
Criar app pra mais de um idioma
Função de "aspirar" mobs, itens, etc.
[RESOLVIDO]GetKeyUp ativando sozinho
Posso controlar o wheelsCollider.rpm?
[TUTORIAL] Escolher a quantos FPS (fixos) o seu jogo deverá rodar.
Personagem dentro da agua
[RESOLVIDO] Sript de pegar itens no cenario
[TUTORIAL] Campo de visão dos inimigos (Enemy FOV) com Raycast ou OverlapSphere
Fazer o Player colar em uma base redonda
tem como altera o nome no forum
Como detectar se teclado ou controle foi conectado???
erro NO MONOBEHAVIOUR SCRIPTS IN THE FILE
Seleção de Personagem
[ASSET PACKAGE] Game Check Update
Adicionar mais um ataque ao inimigo.
Como faço para Camera ignorar um objeto?
Segundo Teaser do meu novo jogo galera, Sanatório Macabro. Em breve
[RESOLVIDO] VSCode não mostra erros nem identa o Código
Baixem meu jogo O Labirinto v1.25 completo e gratuito
Player girando e animação não executa
[RESOLVIDO] Problema com C# e Rigidbody
[RESOLVIDO] Recarregar arma.
Como acessar o Smoothness das texturas do terrain
Sistema de Tiro com Raycast
Velocidade com Button UI.
ERRO AO UPAR NA GOOGLE PLAY STORE
me ajuda por favor
Animaçoes não executa, nem a IDLE
Mini-Map
[TUTORIAL] Como o C# funciona
A Imagem do Objeto não muda
Animaçoes nao executa mais, nem a Idle
[RESOLVIDO] Como usar um Botao(GameObject) igual a um Botao(UI) no Mobile
Sistema de Tiro com Raycast
Algum modelador bom? Compro Modelagem
[RESOLVIDO] Rotação invertida, como resolvo isso??
carregamento de dados entre cenas
Blender bugado ????
AUDIO EM UM DETERMINADO MOMENTO
Dúvida sobre modificação do Event Trigger por scritpt
Carro dá spawn no ar
U2019 - Animações e efeitos após jogador levar hit? por outro jogador?
Não consigo Desabilitar um efeito especifico no pós processamento...
Como Desativar e mudar qualidade de sombra por código???
[TUTORIAL] Primeiro programa "complexo" em C# para iniciantes
Eu estou com dúvida de como instalar a unity com Unity Hub
Pulo "muito Alto"
rotação e aceleração.
Movimentação mobile.
Ativar botão
De Blender pra Unity - Cell Fracture não funciona!
sugestões de otimização?
Carregamento com porcentagem...
[RESOLVIDO] Blender Cell Fracture não aparece no Add-ons - Ajuda!
Movimentação - rotação
Erro Codigo de movimentação.
Cronometro 3,2,1 fica bugado ajuda aee...
[Problema] Ativo o Animator e o boneco não sai do lugar
Morre pausa e aparece botao pra reiniciar mas reinicia o jogo pausado
Script de movimentação e câmera não executa corretamente
FBX não gera sombra
[TUTORIAL] Mostrar Data e Hora atual do Computador em um texto
Sketchup pede para aumentar o projeto
Mudar cor da faixa de texto.
Mexer em variavel de objeto instanciado
Como utilizar o design pattern MVC na Unity?
[RESOLVIDO] RIGIDYBODY tá pulando sozinho pra longe. O que pode ser?
[RESOLVIDO] Compatibilidade e travamentos - unity android
Alguem sabe um meio pra fazer um habitat com criaturas?
[RESOLVIDO] Ajuda com script simples
[RESOLVIDO] Como trocar uma imagem ao clicar num botão em unity c#
[RESOLVIDO] Ponto A ao Ponto B em um determinado tempo
[RESOLVIDO] Duvida Unity (C#)
[RESOLVIDO] Bug no tittle screen
[RESOLVIDO] Erro CS0122
Projeto em desenvolvimento Yoda Runner.
[RESOLVIDO] Duvida Unity (C#)
Duvida com inimigo
Problemas com a colisão do unity
Carros não ficam no chão
Troca de Nivel
[TUTORIAL] Wheel Collider - como configurar corretamente.
Movimentação em SQM Unity 2D
Movimentaçao por SQM / UNITY 2D
Ontem à(s) 11:33 pm
Ontem à(s) 1:46 pm
Dom Ago 01, 2021 11:28 pm
Dom Ago 01, 2021 10:34 pm
Dom Ago 01, 2021 4:58 pm
Dom Ago 01, 2021 1:41 pm
Dom Ago 01, 2021 12:41 pm
Dom Ago 01, 2021 11:23 am
Sex Jul 30, 2021 2:19 pm
Sex Jul 30, 2021 12:07 pm
Sex Jul 30, 2021 8:50 am
Qui Jul 29, 2021 9:45 pm
Qui Jul 29, 2021 9:43 pm
Qui Jul 29, 2021 10:54 am
Qua Jul 28, 2021 6:12 pm
Qua Jul 28, 2021 5:15 pm
Qua Jul 28, 2021 4:39 pm
Qua Jul 28, 2021 2:28 pm
Qua Jul 28, 2021 9:36 am
Ter Jul 27, 2021 1:20 am
Dom Jul 25, 2021 11:12 pm
Dom Jul 25, 2021 10:51 pm
Dom Jul 25, 2021 6:16 pm
Dom Jul 25, 2021 4:03 pm
Dom Jul 25, 2021 12:39 pm
Sab Jul 24, 2021 11:02 pm
Sab Jul 24, 2021 9:35 pm
Sab Jul 24, 2021 12:11 pm
Sab Jul 24, 2021 3:55 am
Sex Jul 23, 2021 4:02 pm
Sex Jul 23, 2021 2:26 pm
Sex Jul 23, 2021 11:50 am
Qui Jul 22, 2021 8:08 pm
Qui Jul 22, 2021 3:38 pm
Qui Jul 22, 2021 3:00 pm
Qui Jul 22, 2021 10:47 am
Qua Jul 21, 2021 6:09 pm
Qua Jul 21, 2021 6:07 pm
Qua Jul 21, 2021 3:41 pm
Qua Jul 21, 2021 5:00 am
Qua Jul 21, 2021 12:30 am
Ter Jul 20, 2021 7:17 pm
Ter Jul 20, 2021 1:21 pm
Ter Jul 20, 2021 10:24 am
Ter Jul 20, 2021 8:27 am
Ter Jul 20, 2021 6:23 am
Ter Jul 20, 2021 6:09 am
Seg Jul 19, 2021 9:06 pm
Seg Jul 19, 2021 9:09 am
Seg Jul 19, 2021 12:22 am
Dom Jul 18, 2021 11:20 pm
Dom Jul 18, 2021 9:10 pm
Dom Jul 18, 2021 2:55 pm
Dom Jul 18, 2021 11:17 am
Sab Jul 17, 2021 11:10 pm
Sab Jul 17, 2021 11:00 pm
Sab Jul 17, 2021 10:49 pm
Sab Jul 17, 2021 10:38 pm
Sab Jul 17, 2021 7:53 pm
Sab Jul 17, 2021 11:20 am
Sab Jul 17, 2021 11:12 am
Sab Jul 17, 2021 6:52 am
Sab Jul 17, 2021 6:39 am
Sab Jul 17, 2021 6:32 am
Sab Jul 17, 2021 6:28 am
Sab Jul 17, 2021 1:16 am
Sex Jul 16, 2021 7:29 pm
Sex Jul 16, 2021 5:40 pm
Sex Jul 16, 2021 5:02 pm
Sex Jul 16, 2021 12:49 pm
Sex Jul 16, 2021 9:25 am
Sex Jul 16, 2021 12:20 am
Qui Jul 15, 2021 6:16 pm
Qui Jul 15, 2021 5:06 pm
Qua Jul 14, 2021 5:59 pm
Qua Jul 14, 2021 5:35 pm
Qua Jul 14, 2021 11:02 am
Seg Jul 12, 2021 9:27 pm
Seg Jul 12, 2021 12:13 pm
Dom Jul 11, 2021 11:08 pm
Dom Jul 11, 2021 10:30 pm
Dom Jul 11, 2021 7:13 pm
Sab Jul 10, 2021 7:05 pm
Sab Jul 10, 2021 10:05 am
Sex Jul 09, 2021 2:51 pm
Qui Jul 08, 2021 7:36 pm
Qui Jul 08, 2021 7:13 pm
Qui Jul 08, 2021 1:53 pm
Qui Jul 08, 2021 1:14 pm
Qui Jul 08, 2021 12:59 pm
Qua Jul 07, 2021 11:48 pm
Qua Jul 07, 2021 10:13 pm
Qua Jul 07, 2021 2:14 pm
Ter Jul 06, 2021 7:51 pm
Ter Jul 06, 2021 1:30 pm
Ter Jul 06, 2021 8:38 am
Seg Jul 05, 2021 1:17 am
Sab Jul 03, 2021 12:36 pm
Sab Jul 03, 2021 2:29 am
PauloFR
dutrabr100
stratengine
felipekieling
RGT
Rangel Oblivion
diegopds
RGT2020
Pokedlg
MayLeone
Crash Psycho
Fagner
Fagner
ViniciusTKH
Regis2030
Fagner
dezorolon
dutrabr100
Fagner
danilojpbr212
Pokedlg
kaiquecachoeira1
VitinRuas
Lester202123
bruno92
Fagner
aikow
Pokedlg
FelipeSouza11
ViniciusTKH
Charlesoff
Patrick
WLCS22
jeancvo3
MarcosSchultz
amanda.ilg
LucasBR
jeancvo3
SauloeArthur
PauloFR
JoelMJunior
cleitinhoRasta
jhonih00010
PauloFR
PauloFR
PauloFR
PauloFR
crazylagg
Valério
jhonih00010
jhonih00010
PauloFR
Crash Psycho
edu63
PauloFR
PauloFR
PauloFR
PauloFR
Fagner
PauloFR
Franttyck
PauloFR
PauloFR
PauloFR
PauloFR
WLCS22
Morpheus
jhonih00010
WLCS22
Fagner
NKKF
jhonih00010
MatheusTD
MarcosSchultz
Magnatah
Magnatah
Fagner
Charlesoff
MayLeone
MayLeone
MayLeone
RodrigoPrivilegium
Fagner
ProBrStalker
ronigleydson
a32515
RobsonRAS
VittorTGame23
brunera
patriicia
ffabim
VittorTGame23
jeancvo3
Fagner
Fagner
Pokedlg
Fagner
Shiimo
Valmi

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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1045
REPUTAÇÃO : 166
Á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 : 1045
REPUTAÇÃO : 166
Á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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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 : 1045
REPUTAÇÃO : 166
Á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 : 1149
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 : 1045
REPUTAÇÃO : 166
Á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


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