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:
Inimigo Com Movimento de Ondas(ZigZag)
Movimentação para todas as direções em um jogo multiplayer online
DKG - Dynamic Kit Generator
Stamina/Sede - Movimentação
Emissão de luz em objeto não estático.
Gerenciar carregamento de texturas
Texturas rosas ao extrair materiais do objeto, com modelo .dae
Modelador (Personagem + Roupa) com Direito a Remuneração
Pegar material especifico do objeto
ERRO AO UPAR NA GOOGLE PLAY STORE
[RESOLVIDO] Navegation Unity 3D
[TUTORIAL] AI Enemy 2.0 + animações ( Jogos de terror )
JOGO "CHALLENGE" FINALIZADO E DISPONÍVEL PARA BAIXAR.
preciso de um programador que entenda de Photon pago via Pix pela ajuda!!
[RESOLVIDO] Desativar e ativar objeto com o mesmo botão
Objetos da Unity com cores erradas.
[RESOLVIDO] Botão não está desativando pelo GetComponent
Adição de um Bone à outra Armature no Blender não funciona na Unity
Posição local do pixel de um quad
Shader Graph UI
Rotacionar objeto em apenas um eixo
[ASSET] Sistema completo de Auto Save para Editor
Criar uma aplicação tipo controle remoto bluetooth.
Easy Road 3d - Preciso de Ajuda
Alguem ai Entende de Multiplayer?
alguem pode me ajudar com essa adição de item numa lista?
APK para Android 12 não executa aplicação, Help Please
[TUTORIAL] Sprites Animados
REMOVER RESOLUÇOES
Unity > Editor > Any Android Device bugado!
Erro de Referência
terminei meu jogo, mas algo deu errado.
Erro ao iniciar jogo após a build
Posição Invertida No Multiplayer
Unity 5 - Invalid serialized file header
Character Controller Slide
Sombras desaparecem qnd o bake das luzes termina
Blender - Programa ou site que faça o Rig da face do Personagem
Meu PC deu pro mundo! e agora?
[RESOLVIDO] Player atravessa Parede mesmo com os Colliders
Movimentação 3D
[RESOLVIDO] - Blender - Erro deixa objeto Transparente
[ASSET] Criar TerrainLayer utilizando textura selecionada
Interrogação beta, jogo de puzzle 3D
[RESOLVIDO] Problemas com script (Movimentação em primeira pessoa)
[TUTORIAL] Busca Customizada De Objetos Na Cena
[RESOLVIDO] menu de troca de itens!!
[RESOLVIDO] Ajuda com script de dano por queda
PROCURO ARTISTA PARA PROJETO FPS CQB ( ARTES ESTILO RAINBOW SIX)
Versão Trial do meu jogo [O Sanatório Macabro]
Procuro por mentoria mobile
Corpo da cobra estilo Slither.io
[RESOLVIDO] Animação se repetindo mesmo com loop time desmarcado
mouselock
[RESOLVIDO] Como mostrar um valor em forma de texto na tela?
[RESOLVIDO] Ajuda com material na UI
Neural network treinar condução autónoma do carro
Como posso definir um código OnTriggerEnter2D para 2 Colliders específicos?
Joystick Virtual como adaptar a esse código ??
Quando recarrego o tiro sai junto como resolvo
Sistemas de Monetização
erros no unity(terrain)
sistema de paticulas em itens
Jogo de futebol em 2D
Imagen do botão sumiu
Movimento em 1° pessoa
[RESOLVIDO] Unity - Sugestão sobre a Tela Inicial/Introdutória
Alguém sabe usar spline mash , para fazer curvas num objeto3d?
PRECISO DE SCRIPTS PARA ADD INIMIGO NO MAPA
[RESOLVIDO] alguém sabe como fazer um unico Input fazer duas ações?
Jogo fechando e dando erros no console (MOBILE)
[DÚVIDA] alguém que já publicou na steam pode ajudar?
Duvida sobre transform.position!
como eu consigo chamar uma void pelo comando Input.GetKey?
como pegar as informações de um objeto que foi selecionado no unity
Fade In/Out em Teleporte
Mudar Direção dos Eixos - 2
Alguem pode me explicar como funciona o save?
Destroying assets is not permitted to avoid data loss.
Me ajude a resolver o Bug do sistema de portas.
Capsule Collider e Rigidbody
Estou com esses erros no asset que eu comprei 'EventReference' 'FMOD'
Servidor Node.JS dentro do UNITY?
Como gravar o nome de um personagem inserido pelo usuário no unity
Como colidir apenas com gameobjects com um tag específica
Como adicionar item em uma lista
Erro ao Construir arquivo Google play store Bundle
[TUTORIAL] Sistema de DIA E NOITE completo, com luzes noturnas e SISTEMA DE NUVENS
dano inimigo em player
Jogo de futebol em 2D
Como fazer uma mira de referencia (que fica no centro da tela)
Unity - Como sinalizar um objeto para o Jogador?
Ataque indo em direção do personagem mudando a velocidade
Unity - Traduzir os conteúdos do Jogo
Como fazer o objeto emitido pela partícula ser direcionado até outro objeto
Ajuda em script de inventario
Mudar as imagens da UI com InputSystem
Alguém sabe um componente estilo "Cloth" só que para projeto 2D
Textura PNG transparente fica preta na build
Hoje à(s) 12:52 am
Ontem à(s) 7:44 pm
Ontem à(s) 4:16 pm
Seg Jun 27, 2022 1:10 pm
Dom Jun 26, 2022 6:03 pm
Sab Jun 25, 2022 3:03 pm
Qua Jun 22, 2022 6:21 pm
Qua Jun 22, 2022 1:28 am
Ter Jun 21, 2022 11:42 pm
Ter Jun 21, 2022 2:27 pm
Seg Jun 20, 2022 4:08 pm
Dom Jun 19, 2022 4:38 pm
Dom Jun 12, 2022 12:52 pm
Qui Jun 09, 2022 12:43 am
Ter Jun 07, 2022 7:47 pm
Ter Jun 07, 2022 5:20 pm
Seg Jun 06, 2022 10:16 pm
Dom Jun 05, 2022 4:44 pm
Dom Jun 05, 2022 10:45 am
Dom Jun 05, 2022 9:59 am
Sab Jun 04, 2022 11:24 pm
Sab Jun 04, 2022 4:18 pm
Sab Jun 04, 2022 3:21 pm
Sab Jun 04, 2022 2:24 pm
Sab Jun 04, 2022 2:15 pm
Sex Jun 03, 2022 4:28 pm
Sex Jun 03, 2022 4:11 pm
Qui Jun 02, 2022 8:48 pm
Dom Maio 29, 2022 6:00 pm
Sex Maio 27, 2022 11:32 pm
Sex Maio 27, 2022 3:50 pm
Sex Maio 27, 2022 8:38 am
Qui Maio 26, 2022 6:47 pm
Ter Maio 24, 2022 4:28 pm
Ter Maio 24, 2022 11:01 am
Dom Maio 22, 2022 1:43 pm
Dom Maio 22, 2022 1:38 pm
Dom Maio 22, 2022 11:21 am
Sab Maio 21, 2022 8:01 am
Sex Maio 20, 2022 10:30 pm
Sex Maio 20, 2022 3:36 pm
Sex Maio 20, 2022 3:16 pm
Qui Maio 19, 2022 10:06 pm
Ter Maio 17, 2022 11:07 pm
Ter Maio 17, 2022 10:36 pm
Ter Maio 17, 2022 4:55 pm
Dom Maio 15, 2022 6:25 pm
Sab Maio 14, 2022 4:41 pm
Seg Maio 09, 2022 6:25 pm
Seg Maio 09, 2022 7:28 am
Sab Maio 07, 2022 10:40 am
Sab Maio 07, 2022 12:13 am
Qui Maio 05, 2022 8:48 pm
Qua Maio 04, 2022 10:37 am
Ter Maio 03, 2022 6:23 pm
Seg Maio 02, 2022 8:06 pm
Sab Abr 30, 2022 10:43 pm
Sab Abr 30, 2022 10:35 pm
Sab Abr 30, 2022 8:19 pm
Sab Abr 30, 2022 8:12 pm
Sab Abr 30, 2022 7:54 pm
Sab Abr 30, 2022 7:52 pm
Sab Abr 30, 2022 7:48 pm
Sab Abr 30, 2022 7:44 pm
Sab Abr 30, 2022 7:39 pm
Sab Abr 30, 2022 7:35 pm
Sex Abr 29, 2022 10:03 pm
Qui Abr 28, 2022 8:57 pm
Dom Abr 24, 2022 8:57 pm
Dom Abr 24, 2022 1:53 pm
Sab Abr 23, 2022 6:29 pm
Sab Abr 23, 2022 6:27 pm
Sab Abr 23, 2022 6:22 pm
Sex Abr 22, 2022 8:28 pm
Qui Abr 21, 2022 8:35 pm
Qui Abr 21, 2022 6:54 pm
Qui Abr 21, 2022 12:04 pm
Qui Abr 21, 2022 10:18 am
Qua Abr 20, 2022 6:31 pm
Qua Abr 20, 2022 11:34 am
Ter Abr 19, 2022 10:15 pm
Ter Abr 19, 2022 9:56 pm
Seg Abr 18, 2022 12:18 pm
Sab Abr 16, 2022 9:26 pm
Sab Abr 16, 2022 12:06 pm
Sex Abr 15, 2022 6:16 pm
Qui Abr 14, 2022 9:29 pm
Qui Abr 14, 2022 11:14 am
Qua Abr 13, 2022 6:09 pm
Qua Abr 13, 2022 11:30 am
Ter Abr 12, 2022 7:26 pm
Sab Abr 09, 2022 2:53 pm
Sex Abr 08, 2022 7:57 pm
Qui Abr 07, 2022 8:11 pm
Qua Abr 06, 2022 8:20 pm
Ter Abr 05, 2022 9:56 pm
Sab Abr 02, 2022 9:09 am
Sex Abr 01, 2022 1:55 pm
Qua Mar 30, 2022 10:06 pm
MarcosSchultz
kessisdiones
gabrimo
Mozinhas2
cyborggp
MarcosSchultz
MarcosSchultz
EricknhYT
SteveRogers
SteveRogers
Mozinhas2
DanielGemsYt
lauderson
Vorzoolvan
BlesseD
Emerson Beaver
kessisdiones
WLCS22
gabrimo
Eris
SteveRogers
AnderGames
Diomaker
EricknhYT
claudiano2020
Pokedlg
SteveRogers
lauderson
lauderson
WLCS22
Arcebispo
JoSanInk
Rangel Oblivion
claudiano2020
erickfabio366
Rangel Oblivion
Crash Psycho
WLCS22
Callyde Jr
Pedro1saac
dutrabr100
dutrabr100
AnderGames
Rangel Oblivion
dstaroski
FelipeSouza11
capim22
Rangel Oblivion
dstaroski
Patrick
dstaroski
SteveRogers
Rangel Oblivion
Magnatah
Rangel Oblivion
Charlesoff
Magnatah
stratengine
Magnatah
Magnatah
Magnatah
Magnatah
Magnatah
Magnatah
Magnatah
Magnatah
BlesseD
stratengine
SteveRogers
miguelsainz
claudiano2020
claudiano2020
claudiano2020
miguelsainz
SteveRogers
Triskal
Eris
pedro123
FelipeSouza11
estuartyy
SteveRogers
EricknhYT
azool
Lucas Andrade
stratengine
stratengine
adrianobros2
Pkneves
Pkneves
lilvinicin
Eris
WLCS22
Andrewkeny
WLCS22
SteveRogers
zeref
Crash Psycho
verme1311
Rangel Oblivion

Instanciar e salvar objeto que é instanciado de uma lista com index int

2 participantes

Ir para baixo

DÚVIDA Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Sex Mar 05, 2021 6:00 pm

Pessoal, como que eu instancio na cena um objeto do banco de dados abaixo pelo seu index que é do tipo inteiro? 
pois ao instanciar eu gostaria que ele se mante-se salvo na variável playerFerramenta que é um GameObject e as ferramentas do banco de dados também são do tipo GameObject, porem estou instanciando pelo seu index e não sei salvar na variável playerFerramenta pelo seu index.

código abaixo resumido:





Código:
[System.Serializable]
public struct Character 
{
    public GameObject ferramenta;
    public Sprite image;
    public string name;
    [Range(0, 100)] public float speed;
    [Range(0, 100)] public float power;
    public int price;

    public bool isPurchased;

 
}


void SetSelectedCharacter ()
    {
       
        int index = GameDataManager.GetSelectedCharacterIndex();
       
        GameDataManager.SetSelectedCharacter(characterDB.GetCharacter(index), index);
    }

public static Character GetSelectedCharacter()
    {
        return selectedCharacter;
    }

// no script do player consegui instanciar do jeito que está abaixo, mas gostaria de salvar esse objeto instanciado para ...
// começar o jogo com ele pelo seu index, mas não estou conseguindo salvar o objeto

Character character = GameDataManager.GetSelectedCharacter();
            if (character.ferramenta!= null)
            {       
               
                playerFerramenta = Instantiate(character.ferramenta, new Vector3(0, 0.5f, 0), Quaternion.identity);
                playerFerramenta.transform.SetParent(this.gameObject.transform);
            }
           
// Como que mantenho salvo essa playerFerramenta se ele busca um item do banco de dados com index do tipo inteiro?
// tem como eu salvar ela pelo index que que está buscando do GameDataManager.GetSelectedCharacter() que está retornando ...
// o  GameDataManager.SetSelectedCharacter(characterDB.GetCharacter(index), index); ?
               
           

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Sex Mar 05, 2021 7:32 pm

Voce poderia mandar mais informações no script, tem variaveis e métodos que nao estão presentes neste resumo, nao entendi muito bem, voce queria basicamente um PlayerPrefs que pudesse armazenar GameObject é isso?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Sex Mar 05, 2021 11:33 pm

É isso  Pokedlg, quero armazenar o item ferramenta que o usuário selecionar na loja, e toda vez que selecionar um item diferente quero que a variável playerFerramenta receba esse novo item selecionado, que no caso é um preFab, e seja instanciado na cena para o usuário jogar com ele. Quero que esse ultimo item fique salvo na variável, pois quando o usuário abrir o jogo novamente continue com o ultima ferramenta selecionada da loja. vou mandar o código completo, porem é bem grande.


script do Character : 

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

[System.Serializable]
public struct Character  // aqui tambem pode ser usado class ao inves de struct
{
    public GameObject ferramenta;
    public Sprite image;
    public string name;
    [Range(0, 100)] public float speed;
    [Range(0, 100)] public float power;
    public int price;

    public bool isPurchased;

 
}







script CharacterItemUI



Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.Events;
using DG.Tweening;

// essa classe representa a lista de itens e vai estar atrelada a shop item prefab
public class CharacterItemUI : MonoBehaviour
{
    [SerializeField] Color itemNotSelectedColor;
    [SerializeField] Color itemSelectedColor;

    [Space(20f)]

    [SerializeField] Image characterImage;
    [SerializeField] TMP_Text characterNameText;
    [SerializeField] Image characterSpeedFill;
    [SerializeField] Image characterPowerFill;
    [SerializeField] TMP_Text characterPriceText;
    [SerializeField] Button characterPurchaseButton;

    [Space (20f)]


    [SerializeField] Button itemButton;
    [SerializeField] Image itemImage;
    [SerializeField] Outline itemOutline;


    // adicionar novos itens

    public void SetItemPosition(Vector2 pos)
    {
        GetComponent<RectTransform>().anchoredPosition += pos;
    }

    public void SetCharacterImage ( Sprite sprite)
    {
        characterImage.sprite = sprite;
    }

    public void SetCharacterName(string name)
    {
        characterNameText.text = name;
    }

    public void SetCharacterSpeed(float speed)
    {
        characterSpeedFill.fillAmount = speed / 100; // aqui é dividido por 100 para poder pegar valores entre 0 e 1
    }

    public void SetCharacterPower(float power)
    {
        characterPowerFill.fillAmount = power / 100; // aqui é dividido por 100 para poder pegar valores entre 0 e 1
    }

    public void SetCharacterPrice(int price)
    {
        characterPriceText.text = price.ToString ();
    }

   
    public void SetCharacterAsPurchased( ) // para ver o personagem como comprado, apenas removemos o [Purchase[ button
    {
        characterPurchaseButton.gameObject.SetActive(false);
        itemButton.interactable = true; // por padrão  a interação do botão fica falsa lá no inspector
        itemImage.color = itemNotSelectedColor;
    }
    public void OnItemPurchase ( int itemIndex, UnityAction<int> action)
    {
        characterPurchaseButton.onClick.RemoveAllListeners();
        characterPurchaseButton.onClick.AddListener(() => action.Invoke (itemIndex) );
    }

    public void OnItemSelect(int itemIndex, UnityAction<int> action)
    {
        itemButton.interactable = true;
        itemButton.onClick.RemoveAllListeners();
        itemButton.onClick.AddListener(() => action.Invoke (itemIndex));
    }

    public void selectItem()
    {
        itemOutline.enabled = true;
        itemImage.color = itemSelectedColor;
        itemButton.interactable = false;
    }

    public void DeselectItem()
    {
        itemOutline.enabled = true;
        itemImage.color = itemNotSelectedColor;
        itemButton.interactable = true;
    }
    public void AnimateShakeItem()
    {
        // finalisa as animações primeiro
        transform.DOComplete();
        transform.DOShakePosition(1f, new Vector3(8f, 0, 0), 10, 0).SetEase(Ease.Linear);
    }
}


CharacterShopDataBase :

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


[CreateAssetMenu (fileName ="CharacterShopDatabase", menuName = "Shopping/Characters shop database")]
public class CharacterShopDatabase : ScriptableObject
{
  public Character [] characters;

  public int CharactersCount
    {
        get { return characters.Length; }
    }

    public Character GetCharacter (int index)
    {
        return characters[index];
    }

    public void PurchaseCharacter (int index)
    {
        characters[index].isPurchased = true;
    }
}


CharacterShopUi : 

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using DG.Tweening;

public class CharacterShopUI : MonoBehaviour

{
    [Header("Layout Settings")]
    [SerializeField] float itemSpacing = .5f;
    float itemHeight;


    [Header("UI Elements")]
    [SerializeField] Image selectedCharacterIcon;
    [SerializeField] Transform ShopMenu;
    [SerializeField] Transform ShopItensContainer;
    [SerializeField] GameObject itemPrefab;
    [Space(20)]


    [SerializeField] CharacterShopDatabase characterDB;


    [Space(20)]
    [Header("Shop Events")]
    [SerializeField] GameObject shopUI;
    [SerializeField] Button openShopButton;
    [SerializeField] Button openShopButton2;
    [SerializeField] Button closeShopButton;
    [SerializeField] Button scrollUpBottom;


    [Space(20)]
    [Header("Main Menu")]
    [SerializeField] Image mainMenuCharacterImage;
    [SerializeField] TMP_Text mainMenuCharacterName;

    [Space(20)]
    [Header("Scroll View")]
    [SerializeField] ScrollRect scrollRect;
    [SerializeField] GameObject topScrollFade;
    [SerializeField] GameObject bottomScrollFade;

    [Space(20)]
    [Header("Purchase Fx & Error Messages")]
    [SerializeField] ParticleSystem purchaseFx;
    [SerializeField] Transform purchaseFxPos;
    [SerializeField] TMP_Text noEnoughCoinsText;



    int newSelectedItemIndex = 0;
    int previousSelectedItemIndex = 0;

    void Start()
    {
       
        shopUI.SetActive (true);
        purchaseFx.transform.position = purchaseFxPos.position;

        AddShopEvents();
        GenerateShopItensUI();

        // aqui ele seta o character selecionado no playerDataManager
        SetSelectedCharacter();

        // select UI item
        SelectItemUI(GameDataManager.GetSelectedCharacterIndex());

        // updade player skin
        ChangePlayerSkin();

        // Auto scroll
        AutoScrollShopList(GameDataManager.GetSelectedCharacterIndex());
    }

    void AutoScrollShopList(int itemIndex)
    {
        scrollRect.verticalNormalizedPosition = Mathf.Clamp01(1f - (itemIndex / (float)(characterDB.CharactersCount - 1)));
    }
    void SetSelectedCharacter ()
    {
        // pega o index salvo
        int index = GameDataManager.GetSelectedCharacterIndex();
        // seta o character selecionado
        GameDataManager.SetSelectedCharacter(characterDB.GetCharacter(index), index);
    }

    void GenerateShopItensUI()
    {
        // loop que salva os itens comprados e faz com que apareça como comprados no array dataBase

        for (int i = 0; i < GameDataManager.GetAllPurchasedCharacter ().Count; i++)
        {
            int purchasedCharacterIndex = GameDataManager.GetPurchasedCharacter (i);
            characterDB.PurchaseCharacter(purchasedCharacterIndex);
        }

        //aqui vai deletar o item template depois de calcular sua altura
        itemHeight = ShopItensContainer.GetChild(0).GetComponent<RectTransform>().sizeDelta.y;
        Destroy(ShopItensContainer.GetChild(0).gameObject);
        ShopItensContainer.DetachChildren();

        // aqui é onde gera os itens
        for(int i = 0; i < characterDB.CharactersCount; i++)
        {
            Character character = characterDB.GetCharacter(i);
            CharacterItemUI uiItem = Instantiate(itemPrefab, ShopItensContainer).GetComponent<CharacterItemUI>();

            //move item para essa posição abaixo
            uiItem.SetItemPosition(Vector2.down * i * (itemHeight + itemSpacing));

            // seta o nome do item em hierarquia (não é necessario)
            uiItem.gameObject.name = "item" + i + "-" + character.name;

            // aqui adiciona informação para a UI (um item)
            uiItem.SetCharacterName(character.name);
            uiItem.SetCharacterImage(character.image);
            uiItem.SetCharacterSpeed(character.speed);
            uiItem.SetCharacterPower(character.power);
            uiItem.SetCharacterPrice(character.price);

            if (character.isPurchased)
            {
                // character comprado
                uiItem.SetCharacterAsPurchased();
                uiItem.OnItemSelect(i, OnItemSelected);
            } else
            {
                // ainda não foi comprado
                uiItem.SetCharacterPrice(character.price);
                uiItem.OnItemPurchase(i, OnItemPurchased);
            }

            // mudar tamanho do intem container
            ShopItensContainer.GetComponent<RectTransform>().sizeDelta = Vector2.up * ((itemHeight + itemSpacing) * characterDB.CharactersCount + itemSpacing );
        }
    }
    void ChangePlayerSkin()
    {
        Character character = GameDataManager.GetSelectedCharacter();
        if (character.image != null)
        {
            mainMenuCharacterImage.sprite = character.image;
            mainMenuCharacterName.text = character.name;

            // aqui seta a seleção da imagem do character no topo do shop menu
            selectedCharacterIcon.sprite = GameDataManager.GetSelectedCharacter().image;
        }
    }

    void OnItemSelected(int index)
    {
        //seleção do item na UI
        SelectItemUI(index);

        // save data
        GameDataManager.SetSelectedCharacter(characterDB.GetCharacter(index), index);

        // muda player skin
        ChangePlayerSkin();
    }
   
    void SelectItemUI (int itemIndex)
    {
        previousSelectedItemIndex = newSelectedItemIndex;
        newSelectedItemIndex = itemIndex;

        CharacterItemUI prevUiItem = GetItemUI(previousSelectedItemIndex);
        CharacterItemUI neUiItem = GetItemUI(newSelectedItemIndex);

        prevUiItem.DeselectItem();
        neUiItem.selectItem();
    }

    CharacterItemUI GetItemUI (int index)
    {
        return ShopItensContainer.GetChild(index).GetComponent<CharacterItemUI>();
    }

    void OnItemPurchased(int index)
    {
        Character character = characterDB.GetCharacter(index);
        CharacterItemUI uiItem = GetItemUI(index);

        if(GameDataManager.CanSpendCoins(character.price))
        {
            // aqui procede com a operação da compra

            GameDataManager.SpendCoins(character.price);

            // animação purchase FX
            purchaseFx.Play();

            // update coins
            GameSharedUI.Instanse.UpdateCoinsUIText();

            characterDB.PurchaseCharacter(index);

            uiItem.SetCharacterAsPurchased();
            uiItem.OnItemSelect(index, OnItemSelected);

            // adiciona o item comprado para o shop Data
            GameDataManager.AddPurchasedCharacter(index);

        }
        else
        {
            // não tem coins
            AnimateNoMoreCoinsText();
            uiItem.AnimateShakeItem();
        }
    }

    void AnimateNoMoreCoinsText()
    {
        // Completa a animação se ela estiver running
        noEnoughCoinsText.transform.DOComplete();
        noEnoughCoinsText.DOComplete();

        noEnoughCoinsText.transform.DOShakePosition(3f, new Vector3(5f, 0f, 0f), 10, 0);
        noEnoughCoinsText.DOFade (1f, 3f).From (0f).OnComplete (() => {
            noEnoughCoinsText.DOFade(0f, 1f); });
    }
    void AddShopEvents ()
    {
        openShopButton.onClick.RemoveAllListeners();

        openShopButton.onClick.AddListener (OpenShop);

        openShopButton2.onClick.RemoveAllListeners();

        openShopButton2.onClick.AddListener(OpenShop);

        closeShopButton.onClick.RemoveAllListeners();

        closeShopButton.onClick.AddListener(CloseShop);

        scrollRect.onValueChanged.RemoveAllListeners();
        scrollRect.onValueChanged.AddListener(OnShopListScroll);

        scrollUpBottom.onClick.RemoveAllListeners();
        scrollUpBottom.onClick.AddListener(onScrollUpClicked);
    }

    void onScrollUpClicked()
    {
        scrollRect.DOVerticalNormalizedPos(1f, .5f).SetEase(Ease.OutBack);
    }

    void OnShopListScroll (Vector2 value)
    {
        float scrolly = value.y;

        // top fade
        if (scrolly < 1f)
            topScrollFade.SetActive (true);
        else
            topScrollFade.SetActive (false);

        // bottom fade
        if (scrolly > 0f)
            bottomScrollFade.SetActive(true);
        else
            bottomScrollFade.SetActive(false);

        // scroll up bottom
        if (scrolly < .7f)
            scrollUpBottom.gameObject.SetActive(true);
        else
            scrollUpBottom.gameObject.SetActive(false);

    }
    void OpenShop()
    {
        shopUI.SetActive(true);
    }
    void CloseShop()
    {
        shopUI.SetActive(false);
    }
}


GameDataManager : 

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




// Shop data
[System.Serializable] public class CharactersShopData
{
    public List<int> purchasedCharactersIndexes = new List<int>();

}

// player data
[System.Serializable] public class PlayerData
{
    public int coins = 5000;
    public int selectedCharacterIndex = 0;

}
public static class GameDataManager
{
    static PlayerData playerData = new PlayerData();
    static CharactersShopData charactersShopData = new CharactersShopData();

    static Character selectedCharacter;   

   
    static GameDataManager()
    {
        LoadPlayerData();
        LoadCharactersShopData();
    }

    // metodos playerData
   
    public static Character GetSelectedCharacter()
    {
        return selectedCharacter;
    }

    public static void SetSelectedCharacter(Character character, int index)
    {
        selectedCharacter = character;
        playerData.selectedCharacterIndex = index;
        SavePlayerData();
    }
    public static int GetSelectedCharacterIndex()
    {
        return playerData.selectedCharacterIndex;
    }
    public static int GetCoins()
    {
        return playerData.coins;
    }

    public static void AddCoins (int amout)
    {
        playerData.coins += amout;
        SavePlayerData();
    }

    public static bool CanSpendCoins(int amout)
    {
        return (playerData.coins >= amout);
    }
    public static void SpendCoins(int amout)
    {
        playerData.coins -= amout;
        SavePlayerData();
    }

    static void LoadPlayerData()
    {
        playerData = BinarySerializer.Load<PlayerData>("Player-data.txt");
        UnityEngine.Debug.Log ("<color=green>[PlayerData] Loaded.</color>");
    }

    static void SavePlayerData()
    {
        BinarySerializer.Save (playerData, "Player-data.txt");
        UnityEngine.Debug.Log ("<color=magenta>[PlayerData] Saved.</color>");
    }

    // metodos Characters ShopData

    public static void AddPurchasedCharacter (int characterIndex)
    {
        charactersShopData.purchasedCharactersIndexes.Add(characterIndex);
        SaveCharactersShopData();
    }

    public static List<int> GetAllPurchasedCharacter()
    {
        return charactersShopData.purchasedCharactersIndexes;
    }
    public static int GetPurchasedCharacter(int index)
    {
        return charactersShopData.purchasedCharactersIndexes[index];
    }

    static void LoadCharactersShopData()
    {
        charactersShopData = BinarySerializer.Load<CharactersShopData>("characters-shop-data.txt");
        UnityEngine.Debug.Log("<color=green>[CharactersChopData] Loaded.</color>");
    }

    static void SaveCharactersShopData()
    {
        BinarySerializer.Save(charactersShopData, "characters-shop-data.txt");
        UnityEngine.Debug.Log("<color=magenta>[CharactersShopData] Saved.</color>");
    }
}


GameSharedUi : 

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class GameSharedUI : MonoBehaviour
{

    # region Singleton Class : GameSharedUI

    public static GameSharedUI Instanse;
    void Awake()
    {
        if (Instanse == null)
        {
            Instanse = this;
        }
    }

    #endregion

    [SerializeField] TMP_Text[] coinsUIText;
    private void Start()
    {
        UpdateCoinsUIText();
    }

    private void Update()
    {
        UpdateCoinsUIText();
    }
    public void UpdateCoinsUIText()
    {
        for (int i = 0; i < coinsUIText.Length; i++)
        {
            SetCoinsText(coinsUIText[i], GameDataManager.GetCoins());
        }
    }
    void SetCoinsText(TMP_Text textMesh, int value)
    {
        if (value >= 1000)
            textMesh.text = string.Format("{0}k.{1}", (value / 1000), GetFirstDigitFromNumber(value % 1000));
        else
            textMesh.text = value.ToString();
    }
    int GetFirstDigitFromNumber(int num)
    {
        return int.Parse(num.ToString()[0].ToString())
;
    }
}



Player :

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


public class PlayerBallCenas : MonoBehaviour
{
    GameObject playerImage;
   
 
   






   

    void Start()
    {
     
       
       
        ChangePlayerSkin();
    }
   
 
    public void ChangePlayerSkin()
    {
       
        Character character = GameDataManager.GetSelectedCharacter();
            if (character.image != null)
            {
                if (transform.childCount > 0)
                {
                  Destroy(transform.GetChild(0).gameObject);
                  playerImage = Instantiate(character.ferramenta, new Vector3(0, 0.5f, 0), Quaternion.identity);
                  playerImage.transform.SetParent(this.gameObject.transform);
                }
           
            // quero salvar o objeto instanciado que vai estar em playerImage para quando o usuario abrir o jogo novamente ela já esteja na cena sem que precise abrir a loja só para seleciona-lo novamente.
               
            }

       
    }
 

}

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Seg Mar 08, 2021 2:39 pm

Desculpa demorar para responder, nao sou tao bom com essas coisas, mas dei uma pesquisada e acho que voce pode salvar a ferramenta como um prefab dentro da pasta resources. Olhe tente assim:

1.Primeiro crie uma pasta com o nome "Resources" dentro do "Assets" (caso ja tenha criado não precisa criar outra).

2. Depois voce precisa salvar seu Game Object ferramenta como um prefab nesta pasta utilizando:
Código:
PrefabUtility.CreatePrefab("Assets/Resources/ferramenta.prefab", yourObject, ReplacePrefabOptions.ConnectToPrefab);

3.Depois para chamar o objeto é só utilizar um 
Código:
Resources.Load<GameObject>("ferramenta");

Acredito que seja isso que voce esteja querendo fazer, nao tenho certeza mas veja um exemplo que fiz com o seu script "PlayerBallCenas":

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


public class PlayerBallCenas : MonoBehaviour
{
    GameObject playerImage;
   
 
   






   

    void Start()
    {
      if(GameDataManager.selectedCharacter.ferramenta != null)
      {
          var ferramentaSalva = Resources.Load<GameObject>("ferramenta");
          playerImage = Instantiate(ferramentaSalva, new Vector3(0, 0.5f, 0), Quaternion.identity);
          playerImage.transform.SetParent(this.gameObject.transform);
      }
      else
      {
          ChangePlayerSkin();
      }
    }
   
 
    public void ChangePlayerSkin()
    {
       
        Character character = GameDataManager.GetSelectedCharacter();
            if (character.image != null)
            {
                if (transform.childCount > 0)
                {
                  Destroy(transform.GetChild(0).gameObject);
                  playerImage = Instantiate(character.ferramenta, new Vector3(0, 0.5f, 0), Quaternion.identity);
                  playerImage.transform.SetParent(this.gameObject.transform);
                }
            GameObject prefab = PrefabUtility.CreatePrefab("Assets/Resources/ferramenta.prefab", character.ferramenta, ReplacePrefabOptions.ConnectToPrefab);
           
            // quero salvar o objeto instanciado que vai estar em playerImage para quando o usuario abrir o jogo novamente ela já esteja na cena sem que precise abrir a loja só para seleciona-lo novamente.
               
            }

       
    }
 

}

Teste isso, foi o que eu entendi o que voce queria fazer, delculpe se nao funcionar, qualquer coisa é só falar
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Seg Mar 08, 2021 10:02 pm

Funcionou?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Ter Mar 09, 2021 2:24 pm

Só fui ver sua resposta agora, vou fazer o teste mais tarde e te falo o resultado, Obrigado por responder, Valeu mesmo!

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qua Mar 10, 2021 12:17 am

Desse teu jeito ai quase deu certo, o problema é que a linha abaixo não estava substituindo o prefab : 
Código:
GameObject prefab = PrefabUtility.CreatePrefab("Assets/Resources/ferramenta.prefab", character.ferramenta, ReplacePrefabOptions.ConnectToPrefab);


então a solução foi do jeito abaixo e deu certo, porem com dois problemas: o primeiro é que o objeto salvo fica bem maior na cena do que o prefab original, ele não está seguindo a mesma escala, o segundo é que quando eu coloco o script PlayerBallCenas dentro da pasta Editor, se não não compila, o script PlayerBallCenas simplesmente sai do meu player porque fala que é um script do Editor kkkkk, vai entender


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


public class PlayerBallCenas : MonoBehaviour
{
    GameObject playerImage;
    GameObject ferramentaSalva;



    void Start()
    {


        GameObject ferramentaSalva = (GameObject)AssetDatabase.LoadMainAssetAtPath("Assets/Resources/ferramenta.prefab");
        playerImage = (GameObject)PrefabUtility.InstantiatePrefab(ferramentaSalva);
        playerImage.transform.SetParent(this.gameObject.transform);

// ou desse outro jeito
       
      // GameObject ferramentaSalva = (GameObject)AssetDatabase.LoadMainAssetAtPath("Assets/Resources/ferramenta.prefab");
      // playerImage = Instantiate(ferramentaSalva, new Vector3(0, 0.5f, 0), Quaternion.identity);
      // playerImage.transform.SetParent(this.gameObject.transform);

       
        ChangePlayerSkin();

    }
   
 
    public void ChangePlayerSkin()
    {
     
        Character character = GameDataManager.GetSelectedCharacter();
            if (character.image != null)
            {
            if (transform.childCount > 0)
              {
                Destroy(transform.GetChild(0).gameObject);
                playerImage = Instantiate(character.ferramenta, new Vector3(0, 0.5f, 0), Quaternion.identity);
                playerImage.transform.SetParent(this.gameObject.transform);
              }
            // tive que mudar o jeito que ele atualiza o prefab ferramenta
            PrefabUtility.SaveAsPrefabAsset(playerImage, "Assets/Resources/ferramenta.prefab");


        }

       
    }
}

Desse jeito ai funciona, porem acontece os problemas que te falei.

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qua Mar 10, 2021 1:24 am

Andei pesquisando e parece que tudo que vai dentro da pasta Editor não vai para a build do jogo, se isso for verdade aí não sei o que fazer mesmo, porque PrefabUtility AssetDatabase faz parte do Editor .

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qua Mar 10, 2021 8:12 am

Tente assim entaom, voce nao tentou com Resources.Load?: 

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


public class PlayerBallCenas : MonoBehaviour
{
     GameObject playerImage;
     GameObject ferramentaSalva;



    void Start()
    {


        GameObject ferramentaSalva = Resources.Load<GameObject>("ferramenta");
        playerImage = Instantiate(ferramentaSalva);
        playerImage.transform.SetParent(this.gameObject.transform);

// ou desse outro jeito
        
       // GameObject ferramentaSalva = (GameObject)AssetDatabase.LoadMainAssetAtPath("Assets/Resources/ferramenta.prefab");
       // playerImage = Instantiate(ferramentaSalva, new Vector3(0, 0.5f, 0), Quaternion.identity);
       // playerImage.transform.SetParent(this.gameObject.transform);

        
        ChangePlayerSkin();

    }
    
  
    public void ChangePlayerSkin()
    {
      
        Character character = GameDataManager.GetSelectedCharacter();
            if (character.image != null)
            {
            if (transform.childCount > 0)
              {
                Destroy(transform.GetChild(0).gameObject);
                playerImage = Instantiate(character.ferramenta, new Vector3(0, 0.5f, 0), Quaternion.identity);
                playerImage.transform.SetParent(this.gameObject.transform);
              }
            // tive que mudar o jeito que ele atualiza o prefab ferramenta
            PrefabUtility.SaveAsPrefabAsset(playerImage, "Assets/Resources/ferramenta.prefab");


        }

        
    }
}
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qua Mar 10, 2021 10:29 am

Com o Resources.Load dá certo em carregar o arquivo, mas ai o problema surge com o PrefabUtilitys  pois faz parte do unityEditor, ou seja, só funciona dentro do Editor, na build do jogo ele não funciona, já dá erro logo na hora de compilar.

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qua Mar 10, 2021 12:54 pm

Entao teriamos que descobrir uma nova forma de armazenar o gameobject?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qua Mar 10, 2021 1:28 pm

Acredito que sim, ou achar uma forma de levar desse jeito ai para dentro do apk, mas já pesquisei de todo jeito aqui e não vi nada parecido.

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qua Mar 10, 2021 3:18 pm

Resources.Load funciona em compilação não funciona?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qua Mar 10, 2021 9:32 pm

Resources.Load funciona, ele usa a using UnityEngine; testei e ele carrega o objeto salvo na pasta Resources, agora o problema mesmo é substituir o prefab que está salvo lá, pois o que modificava ele não entra na build que é PrefabUtility.SaveAsPrefabAsset(playerImage, "Assets/Resources/ferramenta.prefab");

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qua Mar 10, 2021 9:49 pm

Acredito que uma solução seria utilizar todos os prefabs que estão no banco de dados da loja e comparar se o objeto selecionado tem o mesmo nome dentro da pasta Resourses, caso o objeto selecionado tiver o mesmo nome ai chamariamos o Resources.Load<GameObject>("objetoCom mesmo nome"); mas não sei fazer isso, vou tentar um exemplo abaixo só pra voce entender minha ideia.


[list=linenums]


[*]void Start ()

[*]{

[*] playerImage = Resources.Load<GameObject>("objetoCom mesmo nome").name;

[*]}





[*]public void ChangePlayerSkin()

[*]    {

[*]     

[*]        Character character = GameDataManager.GetSelectedCharacter();

[*]            if (character.name!= null)

[*]            {

[*]            if (transform.childCount > 0)

[*]              {

[*] if (playerImage.name == character.name){

[*]// a ideia é mais ou menos essa, comparar o nome dos prefabs dentro da pasta Resouces com


[*]// o objeto selecionado dentro do character que recebe GameDataManager.GetSelectedCharacter();


[*]                Destroy(transform.GetChild(0).gameObject);

[*]                playerImage = Resources.Load<GameObject>("objetoCom mesmo nome do character.namedentro da pasta Resouces");

[*]                playerImage.transform.SetParent(this.gameObject.transform);

[*]              }

[*] }

[*]           



[*]        }

[/list]

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qua Mar 10, 2021 9:58 pm

Ficou bagunçado o código acima, corrigi abaixo : 

Código:
void Start()

    {

        playerImage = Resources.Load<GameObject>("objetoCom mesmo nome").name;

    }

    public void ChangePlayerSkin()

    {

        Character character = GameDataManager.GetSelectedCharacter();

        if (character.name != null)

        {

            if (transform.childCount > 0)

            {

                if (playerImage.name == character.name)
                {

                    // a ideia é mais ou menos essa, comparar o nome dos prefabs dentro da pasta Resouces com

                    // o objeto selecionado dentro do character que recebe GameDataManager.GetSelectedCharacter();

                    // se for igual, ai ponho playerImage para carregar o objeto com mesmo nome dentro do Resource

                    Destroy(transform.GetChild(0).gameObject);

                    playerImage = Resources.Load<GameObject>("objetoCom mesmo nome do character.namedentro da pasta Resouces");
                    playerImage.transform.SetParent(this.gameObject.transform);

                }
            }

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 12:54 am

Nao entendi muito bem, o que seria essa primeira linha?
Código:
playerImage = Resources.Load<GameObject>("objetoCom mesmo nome").name;

qual seria esse objeto com o mesmo nome?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 11:10 am

É assim, todos os itens da loja são preFabs, aí eu jogo eles todos dentro da pasta Resoucers, aí por codigo comparamos se o objeto selecionado, que é pego por 
Código:
character = GameDataManager.GetSelectedCharacter();

   tem o mesmo nome que um objeto dentro da pasta Resources. Então, se dentro da pasta Resources tiver um com o mesmo nome que character.name aí instanciamos esse objeto 
Código:
playerImage = Resources.Load<GameObject>("objetoCom mesmo nome do character.name");

Isso resolveria o problema, pois toda vez que o usuário selecionasse um item lá na loja, ele seria instanciado pelo nome ao invés de tentarmos ficar
substituindo o padrão dentro da pasta Resoucers.
Só que não sei implementar essa logica, pois nem sei se o Resources.load permite buscar um objeto por nome.

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 11:12 am

Mas isso ficaria na void Start ou na ChangePlayerSkin ?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 11:19 am

acredito que pode ser na start, ai toda vez que reiniciar a cena ele checa o ultimo objeto selecionado.

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 11:40 am

Ok. Acho que sei como podemos fazer isso, tente assim:
Código:
using System; //importe a biblioteca system
using System.IO; //e essa para acessar os arquivos
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.SceneManagement;
using TMPro;

public static class Files
{
    public static List<string> GetFilesNames(string path, string extension)
    {
        DirectoryInfo dir = new DirectoryInfo(path);
        FileInfo[] files = dir.GetFiles("*"+extension);
        List<string> FileNames = new List<string>();
        foreach(FileInfo file in files)
        {
            string name = file.Name.ToString();
            name = name.Replace(extension,"");
            FileNames.Add(name);
        }
        return FileNames;
    }
}

public class PlayerBallCenas : MonoBehaviour
{
     GameObject playerImage;
     GameObject objetoSalvo;
     List<string> resources;
     Character character = GameDataManager.GetSelectedCharacter();

    void Start()
    {
        resources = Files.GetFilesNames("Assets/Resources", ".prefab");
        if(resources.Contains(character.name))
        {
            playerImage = Resources.Load<GameObject>(character.name);
            ChangePlayerSkin();
        }
    }
    
    public void ChangePlayerSkin()
    {
            if (character.image != null)
            {
            if (transform.childCount > 0)
              {
                   if (playerImage.name == character.name)
                   {

                    // a ideia é mais ou menos essa, comparar o nome dos prefabs dentro da pasta Resouces com

                    // o objeto selecionado dentro do character que recebe GameDataManager.GetSelectedCharacter();

                    // se for igual, ai ponho playerImage para carregar o objeto com mesmo nome dentro do Resource

                    Destroy(transform.GetChild(0).gameObject);

                    objetoSalvo = Instantiate(playerImage, new Vector3(0, 0.5f, 0), Quaternion.identity);
                    objetoSalvo.transform.SetParent(this.gameObject.transform);

                }
                
              }

        }
    }
}

Créditos: MayLeone
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 12:12 pm

UnityException: get_persistentDataPath is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead. Called from MonoBehaviour 'PlayerBallCenas' on game object 'BallFerramentas'.
See "Script Serialization" page in the Unity Manual for further details.
BinarySerializer..cctor () (at Assets/BinarySerializer/BinarySerializer.cs:22)
Rethrow as TypeInitializationException: The type initializer for 'BinarySerializer' threw an exception.
GameDataManager.LoadPlayerData () (at Assets/MENU/Scripts/GameDataManager.cs:77)
GameDataManager..cctor () (at Assets/MENU/Scripts/GameDataManager.cs:33)
Rethrow as TypeInitializationException: The type initializer for 'GameDataManager' threw an exception.
GameSharedUI.UpdateCoinsUIText () (at Assets/MENU/Scripts/GameSharedUI.cs:36)
GameSharedUI.Update () (at Assets/MENU/Scripts/GameSharedUI.cs:30)


está dando esse erro aí

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 12:17 pm

parece que está dando complito que essa parte de um dos scripts 
Código:
public class BinarySerializer
{
   static string folderName = "GameData";

   static string persistentDataPath = Application.persistentDataPath;  // dando conflito com essa linha

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 12:18 pm

Sim está dando com isso mesmo
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 12:25 pm

Para que serve esta linha?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 12:30 pm

Ela serve para salvar os dados do jogo como binário para ninguém adulterar

Código:
using UnityEngine;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

/// <summary>
/// BinarySerializer is tool to save your game data in files as binary
/// so that no body can read it or modify it,
/// this tool is generic.
///
/// Allowed types : int, float , strings, ...(all .Net types)  
/// But for unity types it accepts only 5 types: Vector2, Vector3, Vector4, Color, Quaternion.
///

/// </summary>

public class BinarySerializer
{
 static string folderName = "GameData";

 static string persistentDataPath = Application.persistentDataPath;
 static SurrogateSelector surrogateSelector = GetSurrogateSelector ();

 /// <summary>
 /// Save data to disk.
 /// </summary>
 /// <param name="data">your dataClass instance.</param>
 /// <param name="filename">the file where you want to save data.</param>
 /// <returns></returns>
 public static void Save <T> (T data, string filename)
 {
 if (IsSerializable <T> ()) {
 if (!Directory.Exists (GetDirectoryPath ()))
 Directory.CreateDirectory (GetDirectoryPath ());

 BinaryFormatter formatter = new BinaryFormatter ();

 formatter.SurrogateSelector = surrogateSelector;

 FileStream file = File.Create (GetFilePath (filename));

 formatter.Serialize (file, data);

 file.Close ();
 }
 }

 /// <summary>
 /// Save data to disk.
 /// </summary>
 /// <param name="filename">the file where you saved data.</param>
 /// <returns></returns>
 public static T Load<T> (string filename)
 {
 T data = System.Activator.CreateInstance <T> ();

 if (IsSerializable <T> ()) {
 if (HasSaved (filename)) {
 
 BinaryFormatter formatter = new BinaryFormatter ();

 formatter.SurrogateSelector = surrogateSelector;

 FileStream file = File.Open (GetFilePath (filename), FileMode.Open);

 data = (T)formatter.Deserialize (file);

 file.Close ();
 }
 }

 return data;
 }

 static bool IsSerializable<T> ()
 {
 bool isSerializable = typeof(T).IsSerializable;
 if (!isSerializable) {
 string type = typeof(T).ToString ();
 Debug.LogError (
 "Class <b><color=white>" + type + "</color></b> is not marked as Serializable, "
 + "make sure to add <b><color=white>[System.Serializable]</color></b> at the top of your " + type + " class."
 );
 }

 return isSerializable;
 }


 /// <summary>
 /// Check if data is saved.
 /// </summary>
 /// <param name="filename">the file where you saved data</param>
 /// <returns></returns>
 public static bool HasSaved (string filename)
 {
 return File.Exists (GetFilePath (filename));
 }

 static string GetDirectoryPath ()
 {
 return persistentDataPath + "/" + folderName;
 }

 static string GetFilePath (string filename)
 {
 return  GetDirectoryPath () + "/" + filename;
 }


 //Other non-serialized types /// SS: Serialization Surrogate
 //Vector2 , Vector3 , Vector4 , Color , Quaternion.

 static SurrogateSelector GetSurrogateSelector ()
 {
 SurrogateSelector surrogateSelector = new SurrogateSelector ();

 Vector2_SS v2_ss = new Vector2_SS ();
 Vector3_SS v3_ss = new Vector3_SS ();
 Vector4_SS v4_ss = new Vector4_SS ();
 Color_SS co_ss = new Color_SS ();
 Quaternion_SS qu_ss = new Quaternion_SS ();

 surrogateSelector.AddSurrogate (typeof(Vector2), new StreamingContext (StreamingContextStates.All), v2_ss);
 surrogateSelector.AddSurrogate (typeof(Vector3), new StreamingContext (StreamingContextStates.All), v3_ss);
 surrogateSelector.AddSurrogate (typeof(Vector4), new StreamingContext (StreamingContextStates.All), v4_ss);
 surrogateSelector.AddSurrogate (typeof(Color), new StreamingContext (StreamingContextStates.All), co_ss);
 surrogateSelector.AddSurrogate (typeof(Quaternion), new StreamingContext (StreamingContextStates.All), qu_ss);

 return surrogateSelector;
 }

 class Vector2_SS: ISerializationSurrogate
 {
 //Serialize Vector2
 public void GetObjectData (System.Object obj, SerializationInfo info, StreamingContext context)
 {
 Vector2 v2 = (Vector2)obj;
 info.AddValue ("x", v2.x);
 info.AddValue ("y", v2.y);
 }
 //Deserialize Vector2
 public System.Object SetObjectData (System.Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
 {
 Vector2 v2 = (Vector2)obj;

 v2.x = (float)info.GetValue ("x", typeof(float));
 v2.y = (float)info.GetValue ("y", typeof(float));

 obj = v2;
 return obj;
 }
 }

 class Vector3_SS: ISerializationSurrogate
 {
 //Serialize Vector3
 public void GetObjectData (System.Object obj, SerializationInfo info, StreamingContext context)
 {
 Vector3 v3 = (Vector3)obj;
 info.AddValue ("x", v3.x);
 info.AddValue ("y", v3.y);
 info.AddValue ("z", v3.z);
 }
 //Deserialize Vector3
 public System.Object SetObjectData (System.Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
 {
 Vector3 v3 = (Vector3)obj;

 v3.x = (float)info.GetValue ("x", typeof(float));
 v3.y = (float)info.GetValue ("y", typeof(float));
 v3.z = (float)info.GetValue ("z", typeof(float));

 obj = v3;
 return obj;
 }
 }

 class Vector4_SS: ISerializationSurrogate
 {
 //Serialize Vector4
 public void GetObjectData (System.Object obj, SerializationInfo info, StreamingContext context)
 {
 Vector4 v4 = (Vector4)obj;
 info.AddValue ("x", v4.x);
 info.AddValue ("y", v4.y);
 info.AddValue ("z", v4.z);
 info.AddValue ("w", v4.w);
 }
 //Deserialize Vector4
 public System.Object SetObjectData (System.Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
 {
 Vector4 v4 = (Vector4)obj;

 v4.x = (float)info.GetValue ("x", typeof(float));
 v4.y = (float)info.GetValue ("y", typeof(float));
 v4.z = (float)info.GetValue ("z", typeof(float));
 v4.w = (float)info.GetValue ("w", typeof(float));

 obj = v4;
 return obj;
 }

 }

 class Color_SS: ISerializationSurrogate
 {
 //Serialize Color
 public void GetObjectData (System.Object obj, SerializationInfo info, StreamingContext context)
 {
 Color color = (Color)obj;
 info.AddValue ("r", color.r);
 info.AddValue ("g", color.g);
 info.AddValue ("b", color.b);
 info.AddValue ("a", color.a);
 }
 //Deserialize Color
 public System.Object SetObjectData (System.Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
 {
 Color color = (Color)obj;

 color.r = (float)info.GetValue ("r", typeof(float));
 color.g = (float)info.GetValue ("g", typeof(float));
 color.b = (float)info.GetValue ("b", typeof(float));
 color.a = (float)info.GetValue ("a", typeof(float));

 obj = color;
 return obj;
 }
 }

 class Quaternion_SS: ISerializationSurrogate
 {
 //Serialize Quaternion
 public void GetObjectData (System.Object obj, SerializationInfo info, StreamingContext context)
 {
 Quaternion qua = (Quaternion)obj;
 info.AddValue ("x", qua.x);
 info.AddValue ("y", qua.y);
 info.AddValue ("z", qua.z);
 info.AddValue ("w", qua.w);
 }
 //Deserialize Quaternion
 public System.Object SetObjectData (System.Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
 {
 Quaternion qua = (Quaternion)obj;

 qua.x = (float)info.GetValue ("x", typeof(float));
 qua.y = (float)info.GetValue ("y", typeof(float));
 qua.z = (float)info.GetValue ("z", typeof(float));
 qua.w = (float)info.GetValue ("w", typeof(float));

 obj = qua;
 return obj;
 }
 }
}


acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 12:46 pm

Descobri o erro, não podemos chamar GameDataManager.GetSelectedCharacter(); fora de uma void como o start ou alguma função.  ai fiz assim 
Código:
GameObject playerImage;
    GameObject objetoSalvo;
    List<string> resources;
    Character character;



    void Start()
    {
        character = GameDataManager.GetSelectedCharacter();


Agora não aparece mais o erro. O problema agora é que não está instanciando nenhuma ferramenta.

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 12:51 pm

Voce tem os prefabs no resource.load?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 1:00 pm

Tem, eu passei eles para a pasta Resources.
Será que o playerImage não está recebendo só o nome do objeto nessa linha? : 
Código:
playerImage = Resources.Load<GameObject>(character.name);

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 1:16 pm

Nao acho q nao, Eu acho que o player image nao recebe nenhum objeto, ainda, pois só fizemos o sistema de salvar o objeto
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 1:35 pm

Fiz os testes aqui adicionando modificando algumas coisas e ele instancia o playerImage mas apenas depois de abrir a loja, só depois disso que ele pega o objeto da pasta Resources.
Código:
character.name = GameDataManager.GetSelectedCharacter().name;  // adicionei o .name
            playerImage = Resources.Load<GameObject>(character.name);
            objetoSalvo = Instantiate(playerImage, new Vector3(0, 0.5f, 0), Quaternion.identity);
            objetoSalvo.transform.SetParent(this.gameObject.transform);

Pra falar verdade, só esse trexo aí, sem a classe Files e sem o changePlayerSkin() ele já instancia os objetos da loja quando o usuario seleciona. Caimos no mesmo problema de sempre, ele inicia a cena sem uma ferramenta, só instancia depois de abrir a loja. E o objeto selecionado na loja ele fica salvo no trexo abaixo pois toda vez que abro a loja ele já está selecionado mesmo que seja o ultimo na lista da loja.
Código:
public static void SetSelectedCharacter(Character character, int index)
    {
        selectedCharacter = character;
        playerData.selectedCharacterIndex = index;
        SavePlayerData();  // aqui ele deixa salvo o objeto selecionado, mesmo que o usuario feche o jogo, quando abrir novamente e entrar na loja continua selecionado
    }

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 1:44 pm

Ué, mas se ele salva o objeto selecionado, porque nao instancia quando da start?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 1:48 pm

Também não consigo entender.

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 1:49 pm

É o character.name ou o character.ferramenta que voce quer instanciar?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 2:00 pm

Então, o character.name é o nome da ferramenta, a diferença é que character.ferramenta é o preFab.

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 2:03 pm

Código:
[System.Serializable]
public struct Character  // aqui tambem pode ser usado class ao inves de struct
{
    public GameObject ferramenta;
    public Sprite image;
    public string name;
    [Range(0, 100)] public float speed;
    [Range(0, 100)] public float power;
    public int price;
    public bool isPurchased;
   
}

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 2:13 pm

Mas é só abrir a loja para ele instanciar, ou tem q seleciona novamente?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 2:35 pm

Basta apenas abrir a loja e fechar, nem precisa clicar em nada, que o objeto selecionado da ultima vez que o usuário abriu o aplicativo fica salvo e ao abrir a loja já vai direto no objeto selecionado da ultima vez, ai é só fechar que já instancia na cena .

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 2:41 pm

Mas nao consigo entender, na linha do script:
Código:
character.name = GameDataManager.GetSelectedCharacter().name;  // adicionei o .name
            playerImage = Resources.Load<GameObject>(character.name);
            objetoSalvo = Instantiate(playerImage, new Vector3(0, 0.5f, 0), Quaternion.identity);
            objetoSalvo.transform.SetParent(this.gameObject.transform);

Ja instancia sem a necessidade de abrir a loja, q estranho, este script como desativado? Voce nao ativa quando abre a loja nao?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 3:04 pm

Então, toda a loja como o banco de dados está naqueles primeiros scripst quase no inicio desse tópico, a class CharacterShopUI é a que gera as coisas dentro da loja, inclusive abrir e fechar ela, se puder dá uma olhada nela chama 
Código:
class CharacterShopUI

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 3:30 pm

Dei uma olhada, voce ativa esse script ou ativa o objeto q contem este script em algum momento? Ele começa desativado?
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 3:46 pm

Vou dar uma revisada em todos os script da loja e ver se estou deixando alguma coisa passar, se bem que a loja eu chamo ela da seguinte forma 

Código:
public void chamaLojaFerramenta() // coloco no botão loja
    {
                      
        
        SceneManager.LoadSceneAsync("LojaOficialFe", LoadSceneMode.Additive);

              

    }
    
    public void fechaLojaFerramenta() // coloco no botão fechar loja
    {
        
        RestartGame();
        Time.timeScale = 1;
        SceneManager.UnloadSceneAsync("LojaOficialFe", UnloadSceneOptions.None);
    }

Vou ter que dar uma saída, daqui umas duas horas mais ou menos eu volto.

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 7:39 pm

O que eu acho que está acontecendo é que quando voce abre a cena da loja, o script CharacterShopUI como ja tem salvo o index ele consegue setar o ocharacter, tenta assim, eu meio que fiz uma cópia que seta o character salvo.

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

public class PlayerBallCenas : MonoBehaviour
{
    GameObject playerImage;
    GameObject objetoSalvo;
    CharacterShopDatabase characterSDB;
    Character character;

    void Start()
    {
        int index = GameDataManager.GetSelectedCharacterIndex();
        character = characterSDB.GetCharacter(index);
        ChangePlayerSkin();
    }
   
    public void ChangePlayerSkin()
    {
            if (character.image != null)
            {
            if (transform.childCount > 0)
              {
                  Destroy(transform.GetChild(0).gameObject);
                  playerImage = Instantiate(character.ferramenta, new Vector3(0, 0.5f, 0), Quaternion.identity);
                  playerImage.transform.SetParent(this.gameObject.transform);           
              }
               
            }

        }
}
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 11:02 pm

Tentei desse jeito aí que você passou mas não deu certo, ele não instancia no inicio da cena e nem depois de abrir a loja. Achei uma solução viável: 
Código:
using System; //importe a biblioteca system
using System.IO; //e essa para acessar os arquivos
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.SceneManagement;
using TMPro;



public class PlayerBallCenas : MonoBehaviour
{
    [SerializeField] GameObject[] skins; // Criei um array para adicionar os objetos
        int selectedSkin;
  
  
    void Start ()
    {
      

      
          
        
        

        // pega o index do item selecionado:
        selectedSkin = GameDataManager.GetSelectedCharacterIndex();

        // ativa na cena o item selecionado:
        skins[selectedSkin].SetActive(true);

        // esconde os outros itens (exceto o  selectedSkin) :
        for (int i = 0; i < skins.Length; i++)
            if (i != selectedSkin)
            {
                skins[i].SetActive(false);

                
            }
        
    }

  
}


Adicionei um objeto vazio no player e coloquei como filho todas as ferramentas, deixei uma ativa como padrão para começar o jogo e as outras são desativadas também no laço for acima. a partir desse momento o padrão é substituído sempre pelo selectedskin, mesmo se sair do jogo, quando entra novamente ele continua com a ultima selectedskin.
Na lista [SerializeField] GameObject[] skins; preenchi com as ferramentas filho. Aí o código acima vai ativando e desativando de acordo com o index do objeto selecionado, só não posso esquecer de colocar na mesma ordem os objetos filhos com a do banco de dados da loja. Como o meu jogo tem muitos níveis, tornei o Player um preFab, pois senão vou ter que repetir o player e os filhos na hierarquia, pra resolver isso eu instancio na cena o player com seus objetos filhos através de um script em todos os níveis.



Instanciar e salvar objeto que é instanciado de uma lista com index int BBtVH7k
Instanciar e salvar objeto que é instanciado de uma lista com index int PxDs9Bd

Instanciar e salvar objeto que é instanciado de uma lista com index int Ph1vtKg

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por Pokedlg Qui Mar 11, 2021 11:14 pm

Muito bom! boa sorte! Smile Curti isso
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 1444
REPUTAÇÃO : 189
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Instanciar e salvar objeto que é instanciado de uma lista com index int

Mensagem por acefogo Qui Mar 11, 2021 11:43 pm

Pokedlg Muito obrigado mesmo, esse é meu primeiro jogo, agradeço muito pela sua atenção, acredito que surgirão ainda muitas duvidas até eu terminar o jogo, e agradeço de ter um fórum como este e pessoas dispostas a ajudar. Estou contando muito que vai ter um retorno financeiro muito bom esse jogo, e se isso acontecer, farei o possível para recompensar cada um que me ajudou.

acefogo
Avançado
Avançado

Masculino PONTOS : 673
REPUTAÇÃO : 9
Respeito as regras : Instanciar e salvar objeto que é instanciado de uma lista com index int WvDYdlf

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

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