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:
Unity - Scene Demorando pra abrir
Encontrando um ponto de colisão.
Preciso de vocess! Coisinha simples mais me embananei. Meu primeiro game.
[TUTORIAL] AI que cria scripts para você, inclusive scripts para Unity !!!!
JOGO "CHALLENGE" FINALIZADO E DISPONÍVEL PARA BAIXAR.
[TUTORIAL] Como carregar uma cena em segundo plano?
push notification com firebase falha
PROCURO UMA EQUIPE - Pagamento VIA PIX
app fica fechendo após mobile notification
Testem Meu Novo Jogo WEBGL ANDROIDD
ajuste de tela automático de celular
como fazer um chat interativo offline?
Música grátis para Jogos Indies [Calma, Relaxante, Flauta e outras coisas]
PROCURO PROGRAMADOR EXPERIENTE PHOTON
problema com canvas ui button
Banco de dados em Unity v2021.3.4f1
Sistema de Yu-Gi-Oh! - LINK PARA DOWNLOAD 2023
Int de dinheiro fica com numeros negativos em vez de travar no "0"
UNITY - FORMAÇÃO DE EQUIPE
Unity - Touch na Tela do Celular
[TUTORIAL] Open World Project - Para Unity-
Tutorial + Kit Para Criar seu Game Multiplayer em 5 Minutos
Como fazer movimentação no estilo tunnel Rush
[RESOLVIDO] Ajuste de tela
Debugar erro ao fechar build do projeto
[RESOLVIDO] Como Suavizar transição de uma Animação pra outra
[RESOLVIDO] Fixar tamanho/resolução proporcional da janela da aplicação
Como faço pra chamar a funçao de um script em outro ?
[RESOLVIDO] Alterar variaveis de classes instanciadas no inspector
como fazer o objeto spawnar com uma cor aleatória dentre as que eu quero?
Blender-Cell Fracture - Juntar as Animações de Todos os Fragmentos em 1 só
Oque acham dessa pequena música?
Unity - Faz mal ou tem algum problema se usar mts Layers?
Drag and drop em um rect específico da UI
Inimigo mudar de animação
[RESOLVIDO] Texto aparecer tipo donkey kong
De 0 a 10, qual a chance de isso causar problemas legais ao vender o jogo?
Teaser do meu novo projeto, War land
SCRIPT QUE SALVA A CENA INTEIRA.
datebest.net - visit link to find love or quick sex !
[RESOLVIDO] Dropdown Salvar a Resolução da tela
[RESOLVIDO] Visual Studio - Como saber onde um método está sendo usado
Teste Chat Openai
Como alterar um GameObject dentro de uma array
Baixos Brasil - Jogo de Carro Brasileiro!
Erro il2cpp unity 2022
[RESOLVIDO] "Is Trigger" não funcionando
FORMAÇÃO DE EQUIPE UNITY 3D
Equipamento para usar no Cinemachine
[RESOLVIDO] Destruir objetos com o mesmo id
Salvar seleção do Toggle
Fiz uma música orquestral para uma batalha final contra um Boss
Como você foi Hackeado DENOVO!!!???
PROCURO UMA EQUIPE - Pagamento VIA Pix
PROCURO PROGRAMADOR EXPERIENTE EM MIRROR
Visual Studio - Como abrir um Script com determinada configuração?
Mover objeto no eixo y
EXPORTAR CENA EM FORMATO DE VIDEO?
LANÇAMENTO JOGO DE CARRO E MOTO PARA ANDROID
Como fazer um sistema para trocar musica da cena com DROPDOWN?
SOU MODELADOR
FPS Controller e Menu
Tamanho de Text de grupo
como evitar que o horário da onde que seja alterado
Objeto se move move na aba scene,mas na game não
Uma ajudinha por favor
Socorrooo!! preciso de uma ajudinha script c# !!!
Inimigo Voando
Como pegar a informação de uma scene, se esta ativa ou não?
Jogo ficando escuro quando faço a Build pela cena menu
Como citar uma variavel randomizada dentro do if?
Acessar dicioario de dados em outro scrpt
Ativar GAMEOBJECT depois de um TEMPO X
Código para drop de itens conforme raridade (probabilidade)
ALGUM ABENÇOADO PODERIA ME MANDAR UMA ZIP COM VARIOS CARROS JA CONFIGURADOS
Preciso salvar a rotação de um objeto e quando iniciar o jogo carregar
personagem sempre gira de volta a para a direção inicial da idle
[TUTORIAL] Banco de dados || MySQL
2 horas para abrir uma cena! (Help me)
Pegar objeto com OnTriggerStay, mas move-lo apenas no eixo X.
Problema em mecânica top down
Como definir distãncia num eixo especifico?
Código com erro - (Jogo multiplayer)
Non-Consumable sendo cancelado automaticamente no android
Jogo dando umas travadas na partida me ajudem!
Referência de objeto não definida
Alguém poderia me ajudar? (Unity 5.6)
Unity - Chlds não herdam o Transform dos pais - Bug, só pode! Ajuda pfv!
Como mover persongaem (terceira pessoa) ignorando para onde a câmera aponta
Como GTA o primeiro da saga foi pensado inicialmente......
Animação do jogador
[RESOLVIDO] Lista e ativar e desativar funções do script
[RESOLVIDO] Probleminha com ScriptableObject e Dictonary
movimentação de inimigo junto ao cenário
[RESOLVIDO] Unity - Vídeos não são rodados. Faço vídeos ou as Animações?
[RESOLVIDO] Ativação de objetos de acordo com a direção do inimigo
Problema ao tornar personagem filho de outro objeto
Colissão e destruição
[RESOLVIDO] Inventário para iniciantes
Hoje à(s) 2:24 pm
Hoje à(s) 2:20 pm
Ontem à(s) 11:47 pm
Ontem à(s) 2:28 pm
Ontem à(s) 2:21 pm
Seg Fev 06, 2023 8:24 pm
Seg Fev 06, 2023 5:40 pm
Dom Fev 05, 2023 12:53 am
Sab Fev 04, 2023 4:15 pm
Sab Fev 04, 2023 3:42 pm
Sab Fev 04, 2023 2:29 pm
Sab Fev 04, 2023 12:07 am
Sex Fev 03, 2023 10:53 pm
Sex Fev 03, 2023 10:28 pm
Qui Fev 02, 2023 7:52 pm
Qui Fev 02, 2023 8:49 am
Qua Fev 01, 2023 5:56 pm
Ter Jan 31, 2023 1:00 am
Dom Jan 29, 2023 11:12 pm
Sab Jan 28, 2023 8:41 pm
Sab Jan 28, 2023 6:50 pm
Sex Jan 27, 2023 8:52 pm
Sex Jan 27, 2023 4:53 am
Qui Jan 26, 2023 10:56 pm
Dom Jan 22, 2023 11:53 am
Dom Jan 22, 2023 3:33 am
Sab Jan 21, 2023 3:27 pm
Sab Jan 21, 2023 2:15 pm
Sex Jan 20, 2023 4:30 pm
Sex Jan 20, 2023 2:15 pm
Qua Jan 18, 2023 10:19 pm
Qua Jan 18, 2023 9:47 am
Ter Jan 17, 2023 10:52 pm
Ter Jan 17, 2023 4:08 pm
Ter Jan 17, 2023 2:45 pm
Seg Jan 16, 2023 7:20 pm
Seg Jan 16, 2023 12:18 pm
Dom Jan 15, 2023 3:02 pm
Sab Jan 14, 2023 7:02 pm
Sex Jan 13, 2023 8:29 am
Qui Jan 12, 2023 5:15 am
Qui Jan 12, 2023 2:31 am
Qua Jan 11, 2023 1:33 pm
Ter Jan 10, 2023 11:55 am
Ter Jan 10, 2023 10:58 am
Ter Jan 10, 2023 3:04 am
Seg Jan 09, 2023 10:43 pm
Seg Jan 09, 2023 6:30 am
Seg Jan 09, 2023 3:18 am
Seg Jan 09, 2023 2:32 am
Sab Jan 07, 2023 5:55 pm
Sab Jan 07, 2023 4:01 pm
Sab Jan 07, 2023 1:38 pm
Sex Jan 06, 2023 9:15 am
Sex Jan 06, 2023 6:33 am
Qui Jan 05, 2023 5:27 pm
Qui Jan 05, 2023 2:50 pm
Qua Jan 04, 2023 3:07 pm
Qua Jan 04, 2023 9:19 am
Sab Dez 31, 2022 4:38 pm
Sab Dez 31, 2022 3:18 am
Qui Dez 29, 2022 6:44 pm
Qui Dez 29, 2022 12:09 pm
Qui Dez 29, 2022 12:02 pm
Qua Dez 28, 2022 3:57 pm
Qua Dez 28, 2022 8:40 am
Ter Dez 27, 2022 3:50 pm
Seg Dez 26, 2022 11:15 pm
Seg Dez 26, 2022 6:35 pm
Seg Dez 26, 2022 5:41 pm
Seg Dez 26, 2022 3:12 pm
Seg Dez 26, 2022 3:06 pm
Sab Dez 24, 2022 6:05 pm
Sab Dez 24, 2022 3:12 pm
Sab Dez 24, 2022 2:39 pm
Qui Dez 22, 2022 3:47 pm
Ter Dez 20, 2022 9:02 am
Sex Dez 16, 2022 5:53 pm
Sex Dez 16, 2022 10:58 am
Qui Dez 15, 2022 6:58 pm
Ter Dez 13, 2022 5:52 pm
Seg Dez 12, 2022 10:04 pm
Dom Dez 11, 2022 12:48 pm
Sab Dez 10, 2022 9:29 pm
Sex Dez 09, 2022 4:05 pm
Sex Dez 09, 2022 8:14 am
Seg Dez 05, 2022 12:05 am
Sab Dez 03, 2022 11:59 pm
Qui Dez 01, 2022 8:58 pm
Qua Nov 30, 2022 7:42 pm
Qua Nov 30, 2022 3:09 pm
Ter Nov 29, 2022 11:52 pm
Ter Nov 29, 2022 4:15 pm
Seg Nov 28, 2022 9:13 am
Sex Nov 25, 2022 11:59 am
Qui Nov 24, 2022 11:07 pm
Qui Nov 24, 2022 11:05 pm
Qui Nov 24, 2022 10:33 pm
Qua Nov 23, 2022 10:51 am
claudiano2020
BuzzoEduardo
Crash Psycho
claudiano2020
claudiano2020
Franttyck
claudiano2020
gabrimo
eduardonog30
claudiano2020
claudiano2020
Morpheus
Franttyck
claudiano2020
Édipo
erickfabio366
Insurgente
MadCow
Crash Psycho
WLCS22
stratengine
MadCow
NotoriousDev
AGAMENOM
gabrimo
WLCS22
gabrimo
Magnatah
brianlgr33
stratengine
WLCS22
Rangel Oblivion
WLCS22
gabrimo
RagDEV
eduardonog30
NKKF
Patrick
dutrabr100
Crash Psycho
AGAMENOM
WLCS22
stratengine
LucasJhonatan
Édipo
Sheyk
VHChasten
MenezesBR1000
Eris
AGAMENOM
NKKF
Alex Jun
WLCS22
MenezesBR1000
MenezesBR1000
WLCS22
pdsimulador
Magic D
Crash Psycho
dutrabr100
SeTk
AGAMENOM
dutrabr100
dutrabr100
dutrabr100
dutrabr100
FelipeSouza11
AGAMENOM
VHChasten
jeancvo3
malamo
malamo
stratengine
Flávio
Guhaling
jeancvo3
jonathass.ilva
jefersonpkl
Rangel Oblivion
stratengine
erickfabio366
Rangel Oblivion
FelipeSouza11
JulioWinchester
kessisdiones
MarcosSchultz
WLCS22
WLCS22
Rangel Oblivion
Rangel Oblivion
AGAMENOM
AGAMENOM
dutrabr100
MarcosSchultz
WLCS22
AGAMENOM
MarcosSchultz
MarcosSchultz
erickfabio366

Como identificar qual o objeto de um determinado tag que está colidindo

3 participantes

Ir para baixo

DÚVIDA Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por Angela Seg Mar 21, 2022 11:54 am

Estou fazendo um jogo onde o player deve recolher diversos objetos e cada um tem um efeito diferente. A instancia desses objetos é feita através de um vetor no gameMannager. Criei um script nos prefabs que serão criados com uma tag coletáveis. O problema é...como identificar qual dos objetos do vetor está colidindo com o player já que todos tem a mesma tag?
Tentei usar if (this.Equals(objeto[indice])) mas ele não reconhece o objeto.
Sei que deve ter uma solução simples mas estou quebrando a cabeça e não estou achando solução.
Segue script de como fiz. 

    public GameObject[] moedas;
    public int escolheMoeda;
    public PlayerMovement jgdr;

    public void Start()
    {
        jgdr = GetComponent<PlayerMovement>();


    }
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.CompareTag("Player"))
        {

            if (this.Equals(moedas[0]))
            {
                jgdr.moedaVida++;
                this.gameObject.SetActive(false);

            }
            if (this.Equals(moedas[1]))
            {
                jgdr.moedaGanho = jgdr.moedaGanho / 2;
                if (jgdr.moedaGanho >= 0)
                {
                    jgdr.moedaGanho = 0;
                }
                this.gameObject.SetActive(false);
            }
            if (this.Equals(moedas[2]))
            {
                jgdr.moedaEnergia++;
                this.gameObject.SetActive(false);

            }
            if (this.Equals(moedas[3]))
            {
                jgdr.moedaGanho++;
                this.gameObject.SetActive(false);

            }
            if (this.Equals(moedas[5]))
            {
                if (jgdr.moedaGanho >= 5)
                {
                    jgdr.moedaGanho -= 5;
                    jgdr.alcoolGel += 1;
                    this.gameObject.SetActive(false);
                }
                else
                {
                    StartCoroutine(Espera());
                }
                if (this.Equals(moedas[6]))
                {
                    if (jgdr.moedaGanho >= 20)
                    {
                        jgdr.moedaGanho -= 20;
                        jgdr.vida = 2;
                        jgdr.energia = 100;
                        this.gameObject.SetActive(false);
                    }
                    else
                    {
                        StartCoroutine(Espera());
                    }
                }
                if (this.Equals(moedas[7]))
                {
                    if (jgdr.moedaGanho >= 3)
                    {
                        jgdr.moedaGanho -= 3;
                        jgdr.alcoolGel += 1;
                        this.gameObject.SetActive(false);
                    }
                    else
                    {
                        StartCoroutine(Espera());
                    }
                }
                if (this.Equals(moedas[8]))
                {
                    if (jgdr.moedaGanho >= 2)
                    {
                        jgdr.moedaGanho -= 2;
                        jgdr.mascara += 1;
                        this.gameObject.SetActive(false);
                    }
                    else
                    {
                        StartCoroutine(Espera());
                    }
                }
            }
        }
    }

Angela
Iniciante
Iniciante

PONTOS : 660
REPUTAÇÃO : 1
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por Charlesoff Seg Mar 21, 2022 12:22 pm

Bom, pensei em algo como fazer um GetComponent no objeto no lugar de usar a tag:

Segue um exemplo:

Essa parte iria no Player:
Código:
public class Manager : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D other) {
        var ItemColetavel = other.GetComponent<ItemColetavel>();
        if(ItemColetavel != null)
        {
            if(ItemColetavel.ItemId == "PegarMoeda")
            {
                // ação de adicionar moeda
            }
        }
    }
}

Não esqueça de por um Trigger no Player



E no Item iria um script simples com uma string como ID:

Código:
public class ItemColetavel : MonoBehaviour
{
    public string ItemId;
}
Charlesoff
Charlesoff
MembroAvançado

Masculino PONTOS : 1128
REPUTAÇÃO : 40
Áreas de atuação : Game dev
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por Angela Ter Mar 22, 2022 9:30 am

Então.
Fiz como você disse mas coloquei o CompareTag mesmo assim porque são dois tipos de itens, coletáveis e power-ups. Porém, quando o player colide com o objeto, dá o erro de "NullReferenceException: Object reference not set to an instance of an object" e não "desliga" o objeto.
 Ficou assim:
        if (contato.gameObject.CompareTag("Power-up"))
        {
             itemColetado = contato.GetComponent<ItemColecionavel>().itemID;
            if (itemColetado != null)
            {
                if (itemColetado == "Bronze")
                {
                    moedaVida += pwrUpColet.ganho;
                    contato.gameObject.SetActive(false);
                }
                if (itemColetado == "Negativa")
                {
                    moedaGanho = moedaGanho / 2;
                    if (moedaGanho >= 0)
                    {
                        moedaGanho = 0;
                        contato.gameObject.SetActive(false);
                    }
                }... para os demais objetos.

Angela
Iniciante
Iniciante

PONTOS : 660
REPUTAÇÃO : 1
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por Charlesoff Ter Mar 22, 2022 10:07 am

O Erro acontece só quando ele tenta desativar o objeto? tente testar isto, remova essas partes.
Charlesoff
Charlesoff
MembroAvançado

Masculino PONTOS : 1128
REPUTAÇÃO : 40
Áreas de atuação : Game dev
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por Angela Ter Mar 22, 2022 11:00 am

Agora não entendi mais nada. Tenho dois blocos de objetos. O tag Coletaveis e o tag Power-ups. Apliquei o que você tinha sugerido nos dois, separando os dois grupos pela colisão com cada uma das tags. Se o player colide com os de tag Coletaveis, nada acontece (não dá erro nem aplica o SetActive(false)) se colide com os de tag Power-ups, da erro de null e nada acontece também. Coloquei /* */ na parte do script referente aos de tag Power-ups, como você sugeriu e, a partir daí, não deu o erro mas alguns dos objetos tiveram o SetActive aplicado e outros não (mesmo todos estando dentro do /* no script). E o único lugar que "desliga" os objetos ficou dentro do /* */. Essa eu não entendi.

Angela
Iniciante
Iniciante

PONTOS : 660
REPUTAÇÃO : 1
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por Charlesoff Ter Mar 22, 2022 11:04 am

Estranho, pode mandar o script inteiro aqui?
Charlesoff
Charlesoff
MembroAvançado

Masculino PONTOS : 1128
REPUTAÇÃO : 40
Áreas de atuação : Game dev
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por Angela Ter Mar 22, 2022 11:13 am

Copiando e colando?
Ou tem outro jeito de mandar?

Angela
Iniciante
Iniciante

PONTOS : 660
REPUTAÇÃO : 1
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por Angela Ter Mar 22, 2022 11:22 am

Código:
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System;

[RequireComponent(typeof(Rigidbody2D))]

public class PlayerMovement : MonoBehaviour
{
    [Header("diversos")]
    public GameObject Situacao;
    public Text TipoSituacao;
    public Animator anmt;
    public Rigidbody2D rgdyby;
    public SpriteRenderer sptrndr;
    public Transform posPe;
    public EnergyBar nrgBr;
    private ItemColecionavel pwrUpColet;
    public string itemColetado;

    [Header("controle pulo")]
    [HideInInspector] public bool isGround = true;
    [HideInInspector] public bool isJump;
    [HideInInspector] public bool doubleJump;
    [HideInInspector] public bool canJump;
    public float forcaPulo = 15f;
    public float tempoPulo = 1;

    [Header("controle movimento")]
    [HideInInspector] public bool virardrt = true;
    public bool parado = true;
    public float Vlcdd;

    [Header("perdas e ganhos")]
    public static int cntrlVd = 2;
    public static int vdsCuradas;
    public static int virusMortos;
    public int moedaGanho;
    public int energia;
    public int dano;
    public int vida;
    public int moedaVida;
    public int moedaEnergia;
    public int alcoolGel;
    public int mascara;
    public int seringa;
    public GameObject[] vd = new GameObject[3];
    public int curados;

    [Header("Virus")]
    public int danoVirus;

    [Header("impressão HUD")]
    public Text msgm;
    public Text txtcurados;
    public Text txtMoedaGanho;
    public GameObject AlcoolGel;
    public GameObject Mascara;
    public GameObject Seringa;


    public AudioClip SomDeDinheiro { get; private set; }
    public ItemColecionavel PwrUpColet { get => pwrUpColet; set => pwrUpColet = value; }

    void Start()
    {
        ControleVida();
        Situacao.SetActive(false);
        anmt = GetComponent<Animator>();
        rgdyby = GetComponent<Rigidbody2D>();
        sptrndr = GetComponent<SpriteRenderer>();
        pwrUpColet = GetComponent<ItemColecionavel>();
        nrgBr = FindObjectOfType<EnergyBar>();
        isJump = doubleJump = false;
        canJump = true;
        energia = 100;
        nrgBr.ValorMaxInicial(energia);
    }
    void Update()
    {
        //QUANDO ACABA A ENERGIA
        if (energia <= 0)
        {
            cntrlVd -= 1;
            curados = vdsCuradas;
            virusMortos = danoVirus;
            anmt.SetBool("morre", false);
            Invoke("Morreu", 30f);
            SceneManager.LoadScene("Jogo");
        }
        //PULO
        isGround = Physics2D.Linecast(transform.position, posPe.position, 1 << LayerMask.NameToLayer("Chao"));
        if (Input.GetKeyDown(KeyCode.Space) && isGround)
        {
            isJump = true;
            Pulo();
        }
    }

    void FixedUpdate()
    {
        //MOVIMENTACAO
        float translationY = 0;
        float translationX = Input.GetAxis("Horizontal") * Vlcdd;
        if (translationX == 0)
        {
            parado = true;
        }
        else if (translationX != 0 && isGround)
        {
            parado = false;
        }
        transform.Translate(translationX, translationY, 0);
        transform.Rotate(0, 0, 0);
        if (translationX > 0 && !virardrt)
        {
            Flip();
        }
        else if (translationX < 0 && virardrt)
        {
            Flip();
        }
        ControleAnimacao();
    }
    void Flip()
    {
        virardrt = !virardrt;
        Vector3 escala = transform.localScale;
        escala.x *= -1;
        transform.localScale = escala;
    }
    void ControleAnimacao()
    {
        if (!parado)
        {
            anmt.SetBool("estaMovendo", true);
        }
        else
        {
            anmt.SetBool("estaMovendo", false);
        }
        parado = false;
    }
    void Pulo()
    {
        if (isGround && isJump)
        {
            isJump = false;
            anmt.SetTrigger("pula");
            rgdyby.velocity = Vector2.zero;
            rgdyby.AddForce(Vector2.up * forcaPulo, ForceMode2D.Impulse);
        }
    }
    private void OnTriggerEnter2D(Collider2D contato)
    {
        if (contato.gameObject.CompareTag("Obstaculo") || contato.gameObject.CompareTag("Pessoas"))
        {
            if (contato.gameObject.CompareTag("Obstaculo"))
            {
                dano = 10;
                contato.gameObject.SetActive(false);
            }
            if (contato.gameObject.CompareTag("Pessoas") && seringa >= 1)
            {
                dano = 0;
                seringa--;
                curados++;
                txtcurados.text = curados.ToString();
                contato.gameObject.SetActive(false);
            }
            else if (contato.gameObject.CompareTag("Pessoas") && seringa < 1)
            {
                dano = 5;
            }
        }
        energia -= dano;
        nrgBr.AlteracaoVida(energia);
        if (contato.gameObject.CompareTag("Power-up"))
        {
            itemColetado = contato.GetComponent<ItemColecionavel>().itemID;
            if (itemColetado != null)
            {
                if (itemColetado == "Bronze")
                {
                    moedaVida += pwrUpColet.ganho;
                    contato.gameObject.SetActive(false);
                }
                if (itemColetado == "Negativa")
                {
                    moedaGanho = moedaGanho / 2;
                    if (moedaGanho >= 0)
                    {
                        moedaGanho = 0;
                        contato.gameObject.SetActive(false);
                    }
                }
                if (itemColetado == "Ouro")
                {
                    moedaEnergia += pwrUpColet.ganho; ;
                    contato.gameObject.SetActive(false);
                }

                if (itemColetado == "Conserto")
                {
                    if (moedaGanho >= pwrUpColet.minimo)
                    {
                        moedaGanho -= pwrUpColet.ganho;
                        vida = 2;
                        energia = 100;
                        contato.gameObject.SetActive(false);
                    }
                    else
                    {
                        StartCoroutine(Espera());
                    }
                }
                if (contato.gameObject.CompareTag("Coletaveis"))
                {
                    itemColetado = contato.GetComponent<ItemColecionavel>().itemID;
                    if (itemColetado != null)
                    {

                    if (itemColetado == "Dinheiro")
                    {
                        moedaGanho += pwrUpColet.ganho;
                        contato.gameObject.SetActive(false);
                    }
                    if (itemColetado == "Alcool-Gel")
                    {
                          if (moedaGanho >= pwrUpColet.minimo)
                          {
                              contato.gameObject.SetActive(false);
                              moedaGanho -= pwrUpColet.minimo;
                            alcoolGel += pwrUpColet.ganho; ;
                          }
                          else
                          {
                              StartCoroutine(Espera());
                          }
                    }
                    if (itemColetado == "Mascara")
                    {
                        if (moedaGanho >= pwrUpColet.minimo)
                        {
                            contato.gameObject.SetActive(false);
                            moedaGanho -= pwrUpColet.minimo;
                            mascara += pwrUpColet.ganho;
                        }
                        else
                        {
                            StartCoroutine(Espera());
                        }
                    }
                    if (itemColetado == "Seringa")
                    {
                        if (moedaGanho >= pwrUpColet.minimo)
                        {
                            contato.gameObject.SetActive(false);
                            moedaGanho -= pwrUpColet.minimo;
                            seringa += pwrUpColet.ganho;
                        }
                        else
                        {
                            StartCoroutine(Espera());
                        }
                    }
                        ControleGanhosPerdas();
                    }
                }
            }
        }
    }
 
    void OnCollisionEnter2D(Collision2D entrar)
    {
        if (entrar.gameObject.CompareTag("plataforma"))
        {
            this.transform.parent = entrar.transform;
        }
        if (entrar.gameObject.CompareTag("Chao"))
        {
            isJump = false;
        }
    }
    void OnCollisionExit2D(Collision2D sair)
    {
        if (sair.gameObject.CompareTag("plataforma"))
        {
            this.transform.parent = null;
        }
        if (sair.gameObject.CompareTag("Chao"))
        {
            isJump = true;
        }
    }

    void Morreu()
    {
        TipoSituacao.text = "GAME OVER";
        StartCoroutine(GameOverOuVitoria());
        if (cntrlVd < 0)
        {
            SceneManager.LoadScene("Menu");
        }
    }
    IEnumerator GameOverOuVitoria()
    {
        Situacao.SetActive(true);
        yield return new WaitForSeconds(30f);
    }
    void ControleGanhosPerdas()
    {
        if (alcoolGel!= 0)
        {
            AlcoolGel.SetActive(true);
        } else
        {
            AlcoolGel.SetActive(false);
        }
        if (mascara != 0)
        {
            Mascara.SetActive(true);
        } else
        {
            Mascara.SetActive(false);
        }
        if (seringa != 0)
        {
            Seringa.SetActive(true);
        } else
        {
            Seringa.SetActive(false);
        }
        if (moedaVida == 3 && cntrlVd < 2)
        {
            cntrlVd = 2;
            moedaVida = 0;
            ControleVida();
        }
        if (moedaEnergia == 5 && energia < 100)
        {
            moedaEnergia = 0;
            energia = 100;
        }
        if (mascara == 5 && alcoolGel == 5)
        {
            mascara = 0;
            alcoolGel = 0;
            danoVirus -= 1;
            if (danoVirus == 0)
            {
                TipoSituacao.text = "VITORIA";
                Invoke("GameOverOuVitoria", 6f);
            }
        }
    }
    IEnumerator Espera()
    {
        msgm.text = "MOEDAS INSUFICIENTES!";
        yield return new WaitForSeconds(6f);
    }
    void ControleVida()
    {
        if(cntrlVd < 0)
        {
        Morreu();
        }
        if (cntrlVd >= 2)
        {
            cntrlVd = 2;
            vida = 2;
        } else
        {
            vida = cntrlVd;
        }
        for (int i = 0; i <= vida; i++)
        {
            vd[i].SetActive(true);
        }for (int i = 0; i > vida && i <= 2; i++)
        {
            vd[i].SetActive(false);
        }
    }
}
Este é do player onde estão os testes de colisão. E o de baixo é o que instancia os objetos. Vai que tenha alguma influência...
Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class InstanciaMoedas : MonoBehaviour
{
    public GameObject[] moedas;
    public int escolheMoeda;
    public int contaMoedas = 20;
    public float esperaCriacao;

    void Start()
    {
        StartCoroutine(SpawnMoedas());
    }

    IEnumerator SpawnMoedas()
    {
        if (contaMoedas >= 0)
        {
            for (int i = 0; i < contaMoedas; i++)
            {
                escolheMoeda = Random.Range(0, moedas.Length);
                Vector2 spawnPosition = new Vector2(Random.Range(-125, 130), Random.Range(-10, 3));
                Instantiate(moedas[escolheMoeda], spawnPosition, Quaternion.identity).SetActive(true);
                yield return new WaitForSeconds(esperaCriacao);
            }
        }
    }
}
Estava assistindo vídeos e lendo post sobre pooling objects para ver se não seria melhor para instanciar os objetos mas não achei nenhum que instancie vários objetos de mais de um tipo de objeto no pooling.

Angela
Iniciante
Iniciante

PONTOS : 660
REPUTAÇÃO : 1
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por SteveRogers Ter Mar 22, 2022 11:42 am

Você pode usar um enum pra marcar qual item é o quê, crie um script novo, chame-o de definicoes, apague tudo e cole só isso dentro:

Código:
[System.Serializable]
public enum TipoItem
{
    PowerUP_Bronze,
    PowerUP_Negativa,
    PowerUP_Ouro,
    PowerUP_Conserto,
    Coletavel_Dinheiro,
    Coletavel_AlcoolGeL,
    Coletavel_Mascara,
    Coletavel_Seringa
}

A partir disso, no script do item ou moeda, você declara um TipoItem e escolhe qual tipo cada moeda vai ser:
Código:
using UnityEngine;

public class Item : MonoBehaviour
{
    public TipoItem tipo;
}

Aí o Player checa se o que ele colidiu é um "Item" e se for, via switch mudamos o código executado dependendo do tipo do item.

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

public class Player : MonoBehaviour
{
    public int moedaVida = 0;
    public int moedaGanho = 0;
    public int moedaEnergia = 0;
    public int alcoolGel = 0;
    public int mascara = 0;

    public int vida = 0;
    public int energia = 0;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        Item item = collision.GetComponent<Item>();

        if (item != null)
        {
            switch (item.tipo)
            {
                case TipoItem.PowerUP_Bronze:
                    GanharBronze();
                    break;
                case TipoItem.PowerUP_Negativa:
                    GanharNegativa();
                    break;
                case TipoItem.PowerUP_Ouro:
                    GanharOuro();
                    break;
                case TipoItem.PowerUP_Conserto:
                    GanharConserto();
                    break;
                case TipoItem.Coletavel_Dinheiro:
                    GanharDinheiro();
                    break;
                case TipoItem.Coletavel_AlcoolGeL:
                    GanharAlcoolGel();
                    break;
                case TipoItem.Coletavel_Mascara:
                    GanharMascara();
                    break;
                case TipoItem.Coletavel_Seringa:
                    GanharSeringa();
                    break;
                default:
                    break;
            }
        }
    }

    private void GanharSeringa()
    {
        print("Ganhou seringa");
    }

    private void GanharMascara()
    {
        print("Ganhou mascara");
    }

    private void GanharAlcoolGel()
    {
        print("Ganhou alcool gel");
    }

    private void GanharDinheiro()
    {
        print("Ganhou dinheiro");
    }

    private void GanharConserto()
    {
        print("Ganhou conserto");
    }

    private void GanharOuro()
    {
        print("Ganhou ouro");
    }

    private void GanharNegativa()
    {
        print("Ganhou negativa");
    }

    private void GanharBronze()
    {
        print("Ganhou bronze");
    }
}

Usando um unico script pra todos os itens facilitaria pra usar pooling, já que é um script só, o enum é quem diz que aquele objeto tem um efeito diferente pro jogador.
SteveRogers
SteveRogers
Instrutor

Masculino PONTOS : 2020
REPUTAÇÃO : 156
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por Angela Ter Mar 22, 2022 12:53 pm

Mas quem é TipoItem que vai no switch?

Angela
Iniciante
Iniciante

PONTOS : 660
REPUTAÇÃO : 1
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por SteveRogers Ter Mar 22, 2022 1:03 pm

TipoItem é um enum global, quer dizer que ele fica num script separado ou fora da classe de qualquer outro script. Isso permite que ele fique visível pra todos os scripts.

Se eu copiasse isso dentro do script do player:

Código:
    [System.Serializable]
    public enum TipoItem
    {
        PowerUP_Bronze,
        PowerUP_Negativa,
        PowerUP_Ouro,
        PowerUP_Conserto,
        Coletavel_Dinheiro,
        Coletavel_AlcoolGeL,
        Coletavel_Mascara,
        Coletavel_Seringa
    }



 dentro das chaves da classe player, ele ficaria visível apenas para o player, e eu não conseguiria usar isso no script da moeda.
Por isso ele precisa ficar num arquivo separado pra facilitar, cria um arquivo qualquer, pode ser chamado de "Definicoes" só pra ficar organizado, ele não precisa ter nada dentro, somente esse código acima.

No script da moeda  você vai conseguir digitar
Código:
public TipoItem tipo;

E no prefab de cada moeda você muda isso pra o tipo que quiser.
O player quando colidir, ele acessa esse valor e toma uma atitude diferente com base no tipo que você escolheu.

TipoItem é um tipo que eu criei, ele não existe por padrão na Unity.
SteveRogers
SteveRogers
Instrutor

Masculino PONTOS : 2020
REPUTAÇÃO : 156
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por Angela Ter Mar 22, 2022 5:26 pm

Beleza! Funcionou! Obrigada pessoal. Me ajudaram bastante. Não estava conseguindo resolver isso.
Achei interessante utilizar o enum na coleta. Estava tão acostumada em usar o collider que nem tinha me ocorrido. Agora tenho que dar uma aperfeiçoada na geração desses objetos.
Algum de vocês saberia me passar algum link que ensine como funciona e como podemos utilizar o pool objects para aplicar na geração de vários objetos? Só consegui achar informações sobre como utilizar para gerar um tipo de objeto.

Angela
Iniciante
Iniciante

PONTOS : 660
REPUTAÇÃO : 1
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo WvDYdlf

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por SteveRogers Ter Mar 22, 2022 5:37 pm

Digamos que durante a partida, você spawna cerca de 200 moedas, de vários tipos, conforme anda faz a coleta e desativa o objeto.
Se este é seu caso, eu não me preocuparia em usar pooling, isso acrescentaria complexidade sem necessidade, já que o jogo é simples, agora se você tivesse um MMORPG com vários jogadores, monstros, itens, e tivesse que spawnar 1000+ moedas no cenário, aí sim te recomendaria criar uma pool com 20-30 moedas e ir reutilizando.
Não é que seja difícil, só não vale a pena pro tamanho do projeto, você não vai notar diferença alguma em performance.
SteveRogers
SteveRogers
Instrutor

Masculino PONTOS : 2020
REPUTAÇÃO : 156
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo Aad8pUi

Ir para o topo Ir para baixo

DÚVIDA Re: Como identificar qual o objeto de um determinado tag que está colidindo

Mensagem por Angela Ter Mar 22, 2022 5:39 pm

Valeu. Obrigada. Me ajudou muito mesmo.

Angela
Iniciante
Iniciante

PONTOS : 660
REPUTAÇÃO : 1
Respeito as regras : Como identificar qual o objeto de um determinado tag que está colidindo 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