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:
NavMashAgent
modelos de braços 3d
Jogo estilo clash of clans
Como ver dos 2 lados de um plane ou quad?
[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01
PITCH para aceleração de carro. Como que faço mesmo?
Sistema de Yu-Gi-Oh! - ATT [2020]
[ASSET] Script Arma Completo Incluso Recuo. Incluso outros Scripts
Somar int, como faz pra ele adicionar o valor que eu quero.
Bug? no animator
Duvida Material c#
Unity Admob Erro
Unity - Lentidão e Aceleração alteradas do nada!!!
Como faço para mudar o valor de uma float gradualmente
[TUTORIAL] Criando um simples Multiplayer [UNITY 5]
Como selecionar ou desselecionar uma imagem na Unity com uma borda?
Random Material
Dúvida sobre detecção do personagem
Procurando Equipe para Dev de um Gta Brasileiro.
Problemas com o transform.position com GameObjects 3D
Shaders
Botão no canvas faz o player movimentar
Sistema de Screenshots v2
Textura está bugada ficando branco em uma parte
Calculadora com raiz quadrada C#
Conectar ao servidor
Script de tiro unity 3d
Barra de procura
Randomizar objetos em posições válidas.
Unity-Transform.position e Rigidbory VS CharacterController. Qual o melhor?
[RESOLVIDO] network transform e network identity nos objetos filhos
Como trocar um sprite pelo outro?
Como faço para detectar a velocidade do meu player?
como faço um multiplayer na unity 5?
Dúvida sobre "Luzinha"?
Meu primero multiplayer online game feito no unity
Como mudar a cor de um sprite?
Demo do meu jogo Survival Zombie
Unity5 FBX Exporter (Free Package/Asset)
Personagem tremendo
[RESOLVIDO] Movetowards depois de esperar um tempo, não funciona!
Como fazer para aparecer poucas resoluções no meu menu de opções.
Contagem C#
Raycast colidindo com Player
Duvidas sobre soma entre float
Como faço para modificar o ponto incial e direcionar um raycast?
Unity
como resolver bordas pixelizadas?
Transformação de personagem
ao buildar para android o jogo tem compotamento diferente
[RESOLVIDO] Copiar a rotação de um Objeto para outro.
Ajuda com php
Animação não está a funcionar
[RESOLVIDO] Duvida com raycast
Animator
FixedUpdate Fica Dando Erro na Hora que a Colisão Acontece
ERRO NO JOGO BUILDADO, MAS OCORRE TUDO CERTO NO CONSOLE
Preciso de dicas para configurar o Bake do Lighting Para Android
como dminuir o lag no meu unity 5
Qual seria a melhor maneira de criar um Map Mundi interativo?
Ativar Ui apenas se o player estiver perto do objeto especifico
Tela de missão
[RESOLVIDO] Como fazer efeitos sonoros tocarem aleatoriamente
Collab Arruinando meu Projeto
Textura escura
Erro no SketchUP
3D Text Material Sobressalente
[RESOLVIDO] Problema no Input System
Como faço para um objeto ficar num tom de azul?
[RESOLVIDO] erro: ''ArgumentException: Input Button jump is not setup'' ?
Photon Pun2 - Error: NewScene Clean
[TUTORIAL] Acessar o objeto pai de algum hit.
[RESOLVIDO] Encontrar um objeto que está dentro de um Prefab.
[TUTORIAL] Inimigo olhar para você (Java Script)
[RESOLVIDO] Erro no Script tocar Audio
[RESOLVIDO] Por que tem que Usar UnityEngine.Random ou System.Random?
Duvida sobre deixar jogo online.
Unity - Animator Controller sendo apagado sozinho
[RESOLVIDO] Meu jogo ta com uns bug no fog linear. o chão fica preto :/
[RESOLVIDO] AI Points e NavMesh
[RESOLVIDO] Como pegar moeda e ela desaparecer?
[TUTORIAL] Sistema Pdv, Mercado, Padaria, Conveniência, Lojas Em Geral - C# VISUAL STUDIO
Como desativar o FirstPersonController
Como tira Application.UptadeScene?
Gostaria de fazer a animação do arco seguir animação do personagem
Animação Blender para Unity?
[RESOLVIDO] Unity - Giro do Personagem não está funcionando direito
Bug - Unity rodando com menos FPS no BAIXO e MAIS no ULTRA
[RESOLVIDO] Dúvida sobre multiplayer
Luz atravessando paredes
Problema de compilação
[RESOLVIDO] LayerMask
c# unity
[TUTORIAL] Banco de dados || MySQL
[RESOLVIDO] Fade In e Out na Timeline
[RESOLVIDO] Unity - Testar o Jogo pelo Celular em Tempo Real
Ajuda com Grappling hook
[RESOLVIDO] Erro criando IA inimigo
[RESOLVIDO] Animator
Ontem à(s) 11:27 pm
Ontem à(s) 11:16 pm
Ontem à(s) 5:48 pm
Ontem à(s) 3:12 pm
Ontem à(s) 9:34 am
Sab Maio 15, 2021 10:47 pm
Sab Maio 15, 2021 9:43 pm
Sab Maio 15, 2021 8:33 pm
Sab Maio 15, 2021 6:06 pm
Sex Maio 14, 2021 7:42 pm
Sex Maio 14, 2021 2:08 pm
Sex Maio 14, 2021 10:50 am
Sex Maio 14, 2021 2:12 am
Qui Maio 13, 2021 11:39 pm
Qui Maio 13, 2021 8:01 pm
Qui Maio 13, 2021 2:42 pm
Qui Maio 13, 2021 2:35 pm
Qui Maio 13, 2021 1:43 pm
Qui Maio 13, 2021 12:39 pm
Qui Maio 13, 2021 11:36 am
Qui Maio 13, 2021 8:38 am
Qua Maio 12, 2021 10:25 pm
Qua Maio 12, 2021 4:59 pm
Qua Maio 12, 2021 4:24 pm
Qua Maio 12, 2021 2:15 pm
Qua Maio 12, 2021 12:59 pm
Ter Maio 11, 2021 11:27 pm
Ter Maio 11, 2021 6:59 pm
Ter Maio 11, 2021 4:07 pm
Seg Maio 10, 2021 9:53 pm
Seg Maio 10, 2021 7:13 pm
Seg Maio 10, 2021 7:05 pm
Seg Maio 10, 2021 5:19 pm
Seg Maio 10, 2021 4:42 pm
Seg Maio 10, 2021 3:19 pm
Seg Maio 10, 2021 12:43 pm
Seg Maio 10, 2021 9:23 am
Dom Maio 09, 2021 4:08 pm
Sab Maio 08, 2021 4:57 pm
Sab Maio 08, 2021 4:56 pm
Sab Maio 08, 2021 4:31 pm
Sab Maio 08, 2021 3:50 pm
Sab Maio 08, 2021 2:30 pm
Sex Maio 07, 2021 8:56 pm
Sex Maio 07, 2021 8:14 pm
Sex Maio 07, 2021 3:15 pm
Sex Maio 07, 2021 10:23 am
Sex Maio 07, 2021 8:24 am
Qui Maio 06, 2021 9:32 pm
Qui Maio 06, 2021 8:46 pm
Qui Maio 06, 2021 8:15 pm
Qui Maio 06, 2021 8:14 pm
Qui Maio 06, 2021 3:21 pm
Qui Maio 06, 2021 2:46 pm
Qui Maio 06, 2021 11:36 am
Qui Maio 06, 2021 3:08 am
Qua Maio 05, 2021 8:27 pm
Ter Maio 04, 2021 6:50 pm
Ter Maio 04, 2021 7:38 am
Seg Maio 03, 2021 11:34 am
Seg Maio 03, 2021 11:22 am
Seg Maio 03, 2021 8:53 am
Seg Maio 03, 2021 2:44 am
Dom Maio 02, 2021 6:04 pm
Dom Maio 02, 2021 5:22 pm
Dom Maio 02, 2021 5:03 pm
Dom Maio 02, 2021 5:00 pm
Sab Maio 01, 2021 8:02 pm
Sab Maio 01, 2021 12:07 pm
Sab Maio 01, 2021 11:02 am
Sab Maio 01, 2021 7:08 am
Sex Abr 30, 2021 4:34 pm
Sex Abr 30, 2021 2:12 pm
Qui Abr 29, 2021 1:26 pm
Qui Abr 29, 2021 12:48 pm
Qui Abr 29, 2021 12:45 pm
Qui Abr 29, 2021 11:02 am
Qui Abr 29, 2021 12:31 am
Qua Abr 28, 2021 10:53 pm
Qua Abr 28, 2021 6:01 pm
Qua Abr 28, 2021 3:55 pm
Qua Abr 28, 2021 2:35 pm
Qua Abr 28, 2021 2:03 pm
Ter Abr 27, 2021 10:50 pm
Seg Abr 26, 2021 10:07 pm
Seg Abr 26, 2021 3:18 pm
Seg Abr 26, 2021 12:41 am
Seg Abr 26, 2021 12:28 am
Dom Abr 25, 2021 10:01 pm
Dom Abr 25, 2021 8:17 pm
Dom Abr 25, 2021 1:52 am
Sab Abr 24, 2021 3:37 pm
Sab Abr 24, 2021 11:34 am
Sex Abr 23, 2021 11:46 pm
Sex Abr 23, 2021 3:22 pm
Qui Abr 22, 2021 7:54 pm
Qui Abr 22, 2021 2:18 pm
Qui Abr 22, 2021 6:45 am
Qua Abr 21, 2021 10:54 pm
Fagner
JulioWinchester
TigerStudios
verme1311
MajorH
RodrigoPrivilegium
MajorH
Felipe42
Fagner
WLCS22
Fagner
nando07
WLCS22
MayLeone
RGT2020
tautologias345
Pokedlg
Xavier
glauco
vphyre
Joana
acefogo
AnderGames
marbiel18
AthaideYi
Xavier
Charlesoff
Joana
Mozinhas2
WLCS22
Xavier
Pokedlg
Charlesoff
TIKO
Fagner
RGT2020
stratengine
stratengine
ProBrStalker
xYcar
WLCS22
Pokedlg
Mozinhas2
Charlesoff
stratengine
Charlesoff
Joana
NKKF
Xavier
Fagner
Fagner
loucoporjogo
Joana
Pokedlg
Xavier
adrianobros2
stratengine
glauco
speedluk
Traygus
MarcosSchultz
Maria Elisa
BlesseD
NKKF
Fagner
Fagner
Fagner
Rangel Oblivion
Phelipe
Pokedlg
Elizeuvix
MartinsCG
RenatoBarreto
MartinsCG
FelipeSouza11
adrianobros2
loucoporjogo
WLCS22
JulioWinchester
TIKO
FelixTedesco
dirceuinfo
FelixTedesco
poyser
hendrick22
ProblemX
WLCS22
NKKF
Xavier
SauloeArthur
MayLeone
hellside
Mozinhas2
LuccaGiffoni
Triskal
WLCS22
JohnRambo
SauloeArthur
Fagner

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

Página 1 de 2 1, 2  Seguinte

Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em 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 : 1071
REPUTAÇÃO : 3

Voltar ao Topo Ir em 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 : 885
REPUTAÇÃO : 145
Á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

Voltar ao Topo Ir em baixo

Página 1 de 2 1, 2  Seguinte

Voltar ao Topo


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