SchultzGames
Para tirar dúvidas, crie um tópico especifico na área "Dúvidas em Geral" e aguarde ser respondido. Evite comentar em tópicos não relacionados a sua dúvida :D
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
Como faço balanço na arma
Unity 2D - Sprite Embaçado
como fazer um galaxy shooter 2d na unity
Erro no Script de pulo dublo
AJUDA POR FAVOR (ERRO DE CACHE)
Como Entrar no Carro (RCC)
Problemas com Object.Instantiate
Problema com o Unreal Engine
ERRO Em Scipts
Que programa e recomendado pra criar jogo 2D?
Firebase na Unity
Como modificar variáveis de outras classes?
Otimização da Unity
Como ATUALIZAR o jogo sem precisar ficar compilando toda hora? -
Canal para vídeos de Unreal Engine e Desenvolvimento
ERRO Em Scipts
Como Ativar e Desativar Emissao do Material Por C#
Nobody's Land: Aftermaths - First Official Trailer
Geração de Mundo
publiquei meu primeiro jogo na gamejolt e na play store
C# .net Core -> Adicionar dados de outra tabela
[TUTORIAL] Script de arma automatica
[TUTORIAL] Acessar variáveis de outros scripts, variáveis estáticas (javaScript)
[RESOLVIDO]Ativar o Character controle faz o boneco ignorar gravidade
SOM Duplicado unity3d
Problemas com a posição usando Setparent
Dar dano no inimigo ao clicar nele
A procura de um MODELADOR pra desenvolver jogo pra estudo.
Tempo
Cutscene
pq o game launcher da samsung n reconhece o meu jogo?
Jogo Project Lazarus parte 2
[TUTORIAL] mover personagem na direção da camera
como fazer um gameobject selecionar no código ao colidir com o mesmo
Como Fazer esse Giroflex (Link Video)
Quando uma Boolean ativar as outras duas nao podem ficar on.....
[ASSET] Personagem v0.5
Como Fazer Carreta Unity Ultilizando o RCC
Problema com um jogo de tiro em 1D
Jogador não Subi na Plataforma
ola estou tentando colocar meu scrip so que ele da erro n sei pq ajuda
Como colocar uma mira no lugar do cursor do mouse
Unity 2018 - Ajuda com OnTriggerEnter e OnTriggerExit
meu script de Basic Runtime Occlusion Culling nao esta funcionando
[TUTORIAL] vibrar o dispositivo ao colidir com um objeto
como fazer para video rodar após cena inicial?
Como faço pro personagem correr na direção da câmera para Android
Pontuação e Click
Como tocar efeito sonoro apenas depois no momento que carrega a cena?
Pontuação em barra
Como deixar a barra de vida fixa??
Elevador
Botões UI
Unable to merge Android manifests
Android SDK Build-tools component is not found (Por Favor Me Ajudem)
Sistema de Ranking com Leaderboard facebook na Unity
Spawnar Objetos aleatorios em lugares pre-definidos
Movimentação em primeira pessoa
Salvar a cada vez que pego um moeda binary formatter
Como fazer a câmera balançar de acordo com a suspensão do veículo?
Sistema de Escolha de Player no Multiplayer
Estou com problema com um script que está dando erro.
IA do jogo Pong
Bons exemplos brasileiros de inimigos em jogos de terror
mover objeto ao encostar em um trigger
[RESOLVIDO] Unity 2019.4.9f1 - Erro ao criar o APK
Plataforma Flutuante
Como passar o canvas com components de uma cena pra outra?
Problema com TERRAIN
[PROBLEMA] Unity 2018 - Nenhum script Monobehaviour no arquivo
wallrun em 1° pessoa e com rigidbody
Dúvida relacionada a comportamento de objetos
Aumentar e diminuir velocidade de uma animação
Caracteres estão sumindo em Text UI somente na Build WebGL
como fazer um chat simples no photon
Erro na exportação
Alguém tem script de movimentação 3D?
Não consigo desativar script de gameObject (C#)
Unity 2018.2 -Ajuda com sistema de SpawnPoint e respawn com Photon Bolt
Recarregar cena usando botão UI
Controler de player 2D
Combate corpo a corpo 2D
Tela de shop/market na unity
Dúvida sobre textura
Problemas para rotacionar objeto filho
Como Resolver ?? Android SDK Build-tools component is not found.....
Update APK - Arquivo de expansão [New Google Console]
Alguém mais tem tido problemas com Layermask [v2019.4.17]
error ao buildar para windows utilizando il2cpp [il2cpp.exe did not run !]
TUTORIAL POST-PROCESSING NA UNITY 2020.2.2 -do CANAL Netzado
Erro na atualização da unity
Minha camera esta girando de maneira brusca
[DICA] Deixar o Loop 'For' Mais Otimizado
[PEDIDO]Gostaria de reviews sinceras no meu jogo
problema de Textura do Sketchup
[TUTORIAL] Sistema de diálogo/mensagens na Unity
Como Fazer Camera do Euro Truck 2 (para Android)
[RESOLVIDO] NavMeshAgent parar
[PEDIDO] Unity2018 - 3DSURVIVAL - Beta Review
Hoje à(s) 3:22 am
Ontem à(s) 9:56 pm
Ontem à(s) 9:36 pm
Ontem à(s) 8:10 pm
Ontem à(s) 6:37 pm
Ontem à(s) 4:50 pm
Ontem à(s) 2:08 am
Ontem à(s) 12:18 am
Sab Fev 27, 2021 9:07 pm
Sab Fev 27, 2021 5:47 pm
Sab Fev 27, 2021 3:27 pm
Sab Fev 27, 2021 3:08 pm
Sab Fev 27, 2021 6:17 am
Sab Fev 27, 2021 6:13 am
Sab Fev 27, 2021 6:05 am
Sab Fev 27, 2021 1:42 am
Sab Fev 27, 2021 12:30 am
Sex Fev 26, 2021 11:59 pm
Sex Fev 26, 2021 10:56 pm
Sex Fev 26, 2021 10:51 pm
Sex Fev 26, 2021 9:19 pm
Sex Fev 26, 2021 2:27 pm
Sex Fev 26, 2021 9:01 am
Sex Fev 26, 2021 4:04 am
Sex Fev 26, 2021 2:28 am
Qui Fev 25, 2021 10:59 pm
Qui Fev 25, 2021 6:31 pm
Qui Fev 25, 2021 4:54 pm
Qui Fev 25, 2021 1:30 pm
Qui Fev 25, 2021 1:24 pm
Qua Fev 24, 2021 9:32 pm
Qua Fev 24, 2021 10:45 am
Ter Fev 23, 2021 3:32 pm
Seg Fev 22, 2021 11:30 pm
Dom Fev 21, 2021 4:01 pm
Dom Fev 21, 2021 3:00 pm
Dom Fev 21, 2021 12:54 am
Sab Fev 20, 2021 4:57 pm
Sab Fev 20, 2021 3:19 pm
Sab Fev 20, 2021 3:11 pm
Sab Fev 20, 2021 3:05 pm
Sex Fev 19, 2021 11:49 pm
Sex Fev 19, 2021 8:03 pm
Sex Fev 19, 2021 7:56 pm
Sex Fev 19, 2021 4:02 pm
Sex Fev 19, 2021 2:34 pm
Sex Fev 19, 2021 1:04 pm
Sex Fev 19, 2021 12:21 am
Qui Fev 18, 2021 10:45 pm
Qui Fev 18, 2021 1:37 pm
Qua Fev 17, 2021 10:25 pm
Qua Fev 17, 2021 6:55 pm
Qua Fev 17, 2021 3:56 pm
Qua Fev 17, 2021 3:10 pm
Qua Fev 17, 2021 1:02 pm
Ter Fev 16, 2021 4:13 pm
Ter Fev 16, 2021 3:55 pm
Ter Fev 16, 2021 2:29 pm
Ter Fev 16, 2021 4:43 am
Ter Fev 16, 2021 3:11 am
Seg Fev 15, 2021 9:56 pm
Seg Fev 15, 2021 6:26 pm
Seg Fev 15, 2021 5:13 pm
Seg Fev 15, 2021 3:45 pm
Seg Fev 15, 2021 1:31 pm
Seg Fev 15, 2021 3:44 am
Dom Fev 14, 2021 4:13 pm
Dom Fev 14, 2021 12:26 pm
Sab Fev 13, 2021 7:31 pm
Sab Fev 13, 2021 4:39 pm
Sab Fev 13, 2021 1:07 pm
Sab Fev 13, 2021 12:25 pm
Sab Fev 13, 2021 3:02 am
Sex Fev 12, 2021 11:06 pm
Qui Fev 11, 2021 4:34 am
Qui Fev 11, 2021 12:12 am
Qua Fev 10, 2021 12:36 am
Ter Fev 09, 2021 3:01 am
Seg Fev 08, 2021 10:26 pm
Seg Fev 08, 2021 5:55 pm
Seg Fev 08, 2021 3:25 pm
Seg Fev 08, 2021 2:43 pm
Sab Fev 06, 2021 2:26 am
Sex Fev 05, 2021 8:01 pm
Sex Fev 05, 2021 5:37 pm
Sex Fev 05, 2021 4:11 pm
Sex Fev 05, 2021 3:45 pm
Sex Fev 05, 2021 2:23 pm
Sex Fev 05, 2021 1:45 pm
Qui Fev 04, 2021 1:02 am
Qua Fev 03, 2021 7:45 pm
Qua Fev 03, 2021 6:24 pm
Qua Fev 03, 2021 4:54 pm
Qua Fev 03, 2021 4:50 pm
Qua Fev 03, 2021 3:05 pm
Qua Fev 03, 2021 6:23 am
Qua Fev 03, 2021 2:11 am
Ter Fev 02, 2021 6:07 pm
Ter Fev 02, 2021 12:13 am
JulioWinchester
slowt
LUCASkkk
DNX BRAZIL 1
verme1311
EricknhYT
Pokedlg
DNX BRAZIL 1
SauloeArthur
Alex Jun
tanottauro
darkrj
Alex Jun
Alex Jun
Alex Jun
Fagner
EricknhYT
JohnRambo
dutrabr100
dutrabr100
KurotamaXIII
TODDY979
Danilo
Minijump
Fagner
darknecron
darkrj
Cristhofer Marques
Maria Elisa
JulioWinchester
Fagner
Patrick
SauloeArthur
rodrigovitao
JulioWinchester
EricknhYT
FelipeSouza11
EricknhYT
tautologias345
NKKF
NKKF
NKKF
ProBrStalker
LlucasBRDev
NKKF
ComicSans
SauloeArthur
Fagner
rafaelPortugal
SauloeArthur
Konoiaro
MiguelAon
Charlesoff
Callyde Jr
EricknhYT
Franttyck
FelipeSouza11
SauloeArthur
joaoguil3
Fagner
TIKO
NKKF
darkrj
JohnRambo
SauloeArthur
Arcebispo
dutrabr100
speedluk
Triskal
ProBrStalker
MiguelAon
Magnatah
rodrigold
daniel.karling
gui78h3
Edivandro2706
NKKF
wooZbr
Pokedlg
SauloeArthur
Pokedlg
KonigOficial
Pokedlg
ffabim
pdsimulador
EricknhYT
chicotx56
NickDev
Valakinhas
kaykyscaranni1
JulioWinchester
capim22
NKKF
diegopds
Mid
MayLeone
EricknhYT
DVargas
ProBrStalker

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 7: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 : 994
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:02 am

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

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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: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 : 994
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: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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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: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 : 994
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 4: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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 4: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 : 994
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: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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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: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 : 994
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: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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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: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 : 994
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:53 pm

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

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 4: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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 4: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 : 994
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 4: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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 4: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 : 994
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 4: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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 4:57 pm

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

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 5:02 pm

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

Xremix30
Membro
Membro

PONTOS : 994
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 5:07 pm

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

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 5: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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 5: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 : 994
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 5:39 pm

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

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 5: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 : 994
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 5:54 pm

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

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 6: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 : 994
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 6:27 pm

Vou ver oque consigo fazer
Pokedlg
Pokedlg
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 6:29 pm

@Pokedlg escreveu:Vou ver oque consigo fazer
Obrigado. Pokedlg

Xremix30
Membro
Membro

PONTOS : 994
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 11: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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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:01 am

@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 : 994
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 3: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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 4:24 am

Funcionou?
Pokedlg
Pokedlg
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 4: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 : 994
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 4:43 am

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

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 4:48 am

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

Xremix30
Membro
Membro

PONTOS : 994
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 4: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 : 994
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 4: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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 5: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 : 994
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 5: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 : 994
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:14 pm

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

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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:22 pm

@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 : 994
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:26 pm

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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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:34 pm

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

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 2:01 pm

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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 2:05 pm

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
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 pm

@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 : 994
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 2:25 pm

Que estranho
Pokedlg
Pokedlg
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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 2:27 pm

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

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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:36 pm

@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 : 994
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 2:41 pm

O Sprite mudou?
Pokedlg
Pokedlg
Programador

Masculino PONTOS : 542
REPUTAÇÃO : 56
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras : Problema  mudar de sprite sempre que seja adicionado um novo sprite a lista WvDYdlf

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