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:
Criando uma equipe
Como patentear um jogo? ou seja, o jogo ter um copyright meu?
Ajuda com um inventario
[TUTORIAL] Como fazer um ponteiro de VELOCIDADE, RPM, etc na Unity
Animação no shaders (animação giratório)
Problema Compilando para Android no Unity
Script de arma completo! [FREE]
[TUTORIAL] Como fazer um laser com LineRenderer - UNITY 5
[RESOLVIDO] Como referenciar objetos por nome?
[Formação de Equipe] Battles of Worlds
Sobre Som (Ouvir som do sistema , duas caixas de som ... )
Animator não funciona
[___COMO UTILIZAR O FÓRUM___] Principais botões e suas funções
[____ADMINISTRAÇÃO____] PRECISO DE AJUDA [DICA PARA SER AJUDADO]
[____APOIE O FÓRUM E O CANAL E GANHE RECOMPENSAS____]
Como posso puxar o Osso do player pelo touch?
State Machine Behaviours
tenho alguns erros nos scripts do mfps mas nao consigo resolver....
[RESOLVIDO] Recarregar magia ESTILO MOBA
Compilando pra android
[PROJETO MOBILE] Defeat the Illuminatis
Dúvida sobre Client/Server
Alguma forma de visualizar o desempenho do processador em tempo real?
[TUTORIAL] Demostrando e aplicando minha lógica sobre CheckPoints
usando design patterns na unity
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
Unity - Ajuda em Texto Animado
[ NONAME ] Procura de pessoas interessadas
PROCURA-SE DESIGNER 2D e ROTEIRISTA PARA PROJETO EM ANDAMENTO!
Quando aperto o PLAY não funciona os comandos do script.
[RESOLVIDO] Erro com monodevelop/visual studio code
[RESOLVIDO] Limitar Uso da Estamina
Enhance - SDK Integration Elimination!
[Divulgação] Projeto The World of Child
CHECKPOINT PONTO DE SALVAMENTO
[RESOLVIDO] Por que o NavMesh não está gerando um destino?
[TUTORIAL] Third Person Shooter
[RESOLVIDO] Aumentar um valor quando próximo do HitPoint
Erro No Unity
Bora entrar no Discord.. Tirando Duvidas Online..
Procuro Programador para jogo baseado em Harvest Moon - Unity (3D)
[RESOLVIDO] Unity - Erro ao Mudar de Resolução
[TUTORIAL] Script simples para CAMA ELÁSTICA
[RESOLVIDO] Cama elastica e ventuinha que lança pra cima
[RESOLVIDO] Unity não está aceitando imagens
Ajuda com orientação de rotação de objeto
Recompensa diária
Herança Classes
Como Criar uma nova classe com as mesmas variaveis?
Como recriar esta fisica?
[RESOLVIDO] problema movimentação horinzontal
Exclusão de arquivos desnecessários da Photon Network (PUN)
luz
Como desativar o componente IMAGE e ativar automaticamente depois de certo tempo
Alguem sabe como resolver esse problema? AI nao procurar ela mesma
[TUTORIAL] Barra de VIDA / HP contínua
Compilação pra android unity 3d
[TUTORIAL] Mover e rotacionar objeto em relação a posição do MOUSE
Error depois de copilar para Android?
[TUTORIAL] 42 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)
Inputfield 3D: alguém sabe como fazer? algum tutorial? ideia pra começar?
Rotacionar Y-axis Atraves
AnimatorOverrideController
Ajuda com Script para IA
Jogo Adaptativo a Tamanho de Telas
Curso Básico de Photoshop
[RESOLVIDO] Pra que serve o F?
[Projeto] Xuel The glory | Testem e avaliem o meu jogo medieval :3
Encriptar player prefs
COMPETIÇÃO - Melhor Jogo Indie
Ajuda em Votação para o GameJAM+
Remover limite de VSync no Android
Volante GameObject girar junto com O grafico UI Android
[TUTORIAL] Inserindo animações com Mixamo
[RESOLVIDO] Problema de renderização
[ Formação de Equipe ] Para Desenvolvimento de Jogo Mobile/PC
Streering Behaviors C#
[TUTORIAL] Salvar SCORE e substituir caso faça mais pontos.
Participe da Game Jam - Jaaj do canal Amdré Young!
Como criar um ranking online na Unity usando a PlayFab e o Facebook?
Armário Escolar (School Locker) by RafaelSquid1
Duas duvidas sobre o bake no blender
[RESOLVIDO] Pointer Influence
[RESOLVIDO] Saber o lado de um círculo toca em um objeto.
Animar collider
[TUTORIAL] Aprenda C# - Unity 3D
[TUTORIAL] AI Enemy ( Jogos de terror )
Troca de personagem em jogo 2d
Ficou legal? Minha primeira modelagem
Alguém Afim de Jogar e testar Survival Online? PC e Mobail...
[RESOLVIDO] Como fazer uma textura com elevações?
Como criar sombra em objeto transparente?
Sistema de Entidades e Componentes(ECS)
Gostaria que opinassem sobre esse cenario que fiz
Como salvar objetos que tenham uma Tag especifica (save/load)
Care Box - Disponível na Play Store
Como utilizar a Unity em equipe
Problema para atualizar App na Apple Store Itunes Connect
Command 888
Hoje à(s) 8:53 am
Hoje à(s) 8:25 am
Hoje à(s) 2:06 am
Hoje à(s) 2:06 am
Hoje à(s) 2:02 am
Hoje à(s) 1:48 am
Ontem à(s) 8:27 pm
Ontem à(s) 7:31 pm
Ontem à(s) 5:05 pm
Ontem à(s) 3:33 pm
Ontem à(s) 2:02 pm
Ontem à(s) 10:06 am
Ontem à(s) 8:45 am
Ontem à(s) 8:45 am
Ontem à(s) 8:45 am
Ontem à(s) 8:41 am
Ontem à(s) 12:21 am
Sab Ago 18, 2018 6:43 pm
Sab Ago 18, 2018 6:28 pm
Sab Ago 18, 2018 2:55 pm
Sab Ago 18, 2018 9:54 am
Sab Ago 18, 2018 6:48 am
Sab Ago 18, 2018 1:50 am
Sex Ago 17, 2018 8:36 pm
Sex Ago 17, 2018 6:40 pm
Sex Ago 17, 2018 5:28 pm
Sex Ago 17, 2018 4:26 pm
Sex Ago 17, 2018 9:16 am
Sex Ago 17, 2018 9:13 am
Sex Ago 17, 2018 6:15 am
Qui Ago 16, 2018 7:03 pm
Qui Ago 16, 2018 4:49 pm
Qui Ago 16, 2018 12:20 pm
Qui Ago 16, 2018 6:12 am
Qua Ago 15, 2018 7:30 pm
Qua Ago 15, 2018 3:30 pm
Qua Ago 15, 2018 3:11 pm
Qua Ago 15, 2018 2:59 pm
Qua Ago 15, 2018 1:32 pm
Qua Ago 15, 2018 12:54 pm
Ter Ago 14, 2018 8:08 pm
Ter Ago 14, 2018 3:15 pm
Seg Ago 13, 2018 9:46 pm
Seg Ago 13, 2018 8:57 pm
Seg Ago 13, 2018 4:52 pm
Seg Ago 13, 2018 10:09 am
Seg Ago 13, 2018 9:17 am
Seg Ago 13, 2018 9:05 am
Dom Ago 12, 2018 10:53 pm
Dom Ago 12, 2018 4:43 pm
Dom Ago 12, 2018 4:15 pm
Dom Ago 12, 2018 3:47 pm
Dom Ago 12, 2018 3:07 pm
Sab Ago 11, 2018 4:02 pm
Sab Ago 11, 2018 11:13 am
Sex Ago 10, 2018 7:37 pm
Sex Ago 10, 2018 12:00 pm
Qui Ago 09, 2018 3:52 pm
Qui Ago 09, 2018 12:52 pm
Qui Ago 09, 2018 1:21 am
Qui Ago 09, 2018 1:17 am
Qui Ago 09, 2018 1:08 am
Qua Ago 08, 2018 11:57 pm
Qua Ago 08, 2018 10:59 pm
Qua Ago 08, 2018 8:17 pm
Qua Ago 08, 2018 7:35 pm
Qua Ago 08, 2018 6:00 pm
Qua Ago 08, 2018 3:14 pm
Qua Ago 08, 2018 11:54 am
Ter Ago 07, 2018 11:34 pm
Ter Ago 07, 2018 9:55 pm
Ter Ago 07, 2018 7:28 pm
Ter Ago 07, 2018 7:19 pm
Ter Ago 07, 2018 6:58 pm
Ter Ago 07, 2018 9:57 am
Ter Ago 07, 2018 1:20 am
Seg Ago 06, 2018 7:36 pm
Seg Ago 06, 2018 7:29 pm
Dom Ago 05, 2018 11:59 pm
Dom Ago 05, 2018 1:29 pm
Dom Ago 05, 2018 9:34 am
Sab Ago 04, 2018 3:09 pm
Sab Ago 04, 2018 11:47 am
Sab Ago 04, 2018 10:59 am
Sab Ago 04, 2018 9:23 am
Sab Ago 04, 2018 12:43 am
Sex Ago 03, 2018 11:43 pm
Sex Ago 03, 2018 11:38 pm
Sex Ago 03, 2018 10:21 pm
Sex Ago 03, 2018 10:14 pm
Sex Ago 03, 2018 8:37 pm
Sex Ago 03, 2018 5:26 pm
Sex Ago 03, 2018 4:41 pm
Sex Ago 03, 2018 12:35 pm
Sex Ago 03, 2018 12:24 pm
Qui Ago 02, 2018 10:33 pm
Qui Ago 02, 2018 8:31 pm
Qui Ago 02, 2018 8:10 pm
Qui Ago 02, 2018 5:35 pm
Brunotrinkss
dstaroski
Tiago95
KAYKETHEO27
NicoMay
Tiago95
Badstane
osiasbezerra
mafipt
mafipt
lesgoy
Feromark2013
dstaroski
dstaroski
dstaroski
dstaroski
QueriaStarMorto
Samuelostgamer
srhuculak
niao
dstaroski
mafipt
MarcosSchultz
NotoriousDev
brunocvz
Phph09
NotoriousDev
Brunotrinkss
Brunotrinkss
NotoriousDev
Zack2
srhuculak
RozekEnhance
jhobert77
NotoriousDev
loganout
Phph09
NotoriousDev
NotoriousDev
loganout
NKKF
Magnatah
FelipeSouza11
paulo.costa0194
alisonzinhod
dstaroski
dstaroski
dstaroski
luKkaSs
dazentt55
NotoriousDev
NotoriousDev
diegopds
Dom3000
Dom3000
Badstane
Callyde Jr
Unidade3d5
Callyde Jr
MarcosSchultz
MarcosSchultz
MarcosSchultz
Madson
Unidade3d5
Magnatah
dstaroski
lesgoy
zeca urubu
Ezequiel286
Gray_14
C3RB3RUS
NKKF
Gabryellx007
Phph09
sneffetsd
lucas85235
MarcosSchultz
MarcosSchultz
QueriaStarMorto
Rayllander
Callyde Jr
TioUV
NKKF
NKKF
gurgelg752
MarcosSchultz
MarcosSchultz
MarcosSchultz
guimaraf
fecirineu
LucioHenrique890
lesgoy
MarcosSchultz
Callyde Jr
Edw223
RafaelSquid1
QueriaStarMorto
natanael.olimpio
Callyde Jr

Dúvida sobre método de acesso as variáveis

Ir em baixo

DÚVIDA Dúvida sobre método de acesso as variáveis

Mensagem por guimaraf em Qua Jun 13, 2018 9:36 am

Olá pessoal, estudo a pouco tempo C#, orientação a objetos infelizmente ainda não é meu forte, mas estou melhorando bastante.
Ao acompanhar alguns vídeos, ler documentações sobre a engine e acompanhar aqui no forum sobre Unity, já vi diversas formas de acesso as variáveis, então resolvi perguntar aqui qual seria o método mais adequado e os motivos para tal.

Fiz um pequeno Script de teste com os métodos que vejo o pessoal usando, scripts bem simples mesmo para discutir a dúvida.

Código:
using UnityEngine;

public class ClasseOrigem : MonoBehaviour {

    public int valor = 1;
}

Código:
using UnityEngine;

public class ClasseTeste : MonoBehaviour
{
    int valorRecebe;
    int valorRecebe2;
    int valorRecebe3;

    public void Start()
    {
        valorRecebe = FindObjectOfType<ClasseOrigem>().valor; //Método 1

        valorRecebe2 = GetComponent<ClasseOrigem>().valor; //Método 2

        ClasseOrigem a = GetComponent<ClasseOrigem>(); //Método 3
        valorRecebe3 = a.valor;

        print(valorRecebe);
        print(valorRecebe2);
        print(valorRecebe3);
    }
}


Deixei da forma mais clara possível, quem souber responder, fico muito agradecido.
avatar
guimaraf
Avançado
Avançado

Masculino PONTOS : 607
REPUTAÇÃO : 24
Idade : 36
Áreas de atuação : Programação de jogos e técnico de informática
Respeito as regras :

Ver perfil do usuário http://guimaraf.github.io

Voltar ao Topo Ir em baixo

DÚVIDA Re: Dúvida sobre método de acesso as variáveis

Mensagem por MayLeone em Qua Jun 13, 2018 9:50 am

Os três estão certos, só o primeiro pode dar um resultado inesperado se tiver mais de um objeto na cena com esse script.
Eu uso sempre o segundo, mas dessa forma:

Código:
ClasseOrigem classe;
void Start(){
classe = GetComponent<ClasseOrigem>();
}

Mas isso claro, apenas se eu quiser ter acesso a outras propriedades da classe, e for utilizá-la mais de uma vez no código.

Agora, se a variável é algo que vale pro jogo todo e não é apenas uma propriedade de instância, como a vida do player por exemplo, que vai ser a mesma para todos os scripts, eu deixo ela como estática:

Código:
public class Teste{
public static int vida;}

E chamo ela assim externamente:

Código:
if(Teste.vida > 0)
avatar
MayLeone
ProgramadorMaster

Feminino PONTOS : 338
REPUTAÇÃO : 116
Áreas de atuação : Unity, Rpg Maker, Scratch, C#, PHP, HTML, CSS, JS, MYSQL, Blender
Respeito as regras :

Ver perfil do usuário http://compilemosfacil.blogspot.com.br

Voltar ao Topo Ir em baixo

DÚVIDA Re: Dúvida sobre método de acesso as variáveis

Mensagem por guimaraf em Qua Jun 13, 2018 10:48 am

Neste caso eu fiz este exemplo para discutir estes 3 métodos, não uso em projetos estes scripts, mas entendi o ponto.
Também conheço sobre variáveis e métodos estáticos.

Na questão de desempenho, tem alguma diferença?
avatar
guimaraf
Avançado
Avançado

Masculino PONTOS : 607
REPUTAÇÃO : 24
Idade : 36
Áreas de atuação : Programação de jogos e técnico de informática
Respeito as regras :

Ver perfil do usuário http://guimaraf.github.io

Voltar ao Topo Ir em baixo

DÚVIDA Re: Dúvida sobre método de acesso as variáveis

Mensagem por MayLeone em Qua Jun 13, 2018 11:41 am

@guimaraf escreveu:Neste caso eu fiz este exemplo para discutir estes 3 métodos, não uso em projetos estes scripts, mas entendi o ponto.
Também conheço sobre variáveis e métodos estáticos.

Na questão de desempenho, tem alguma diferença?
Sim, é um pouco óbvio que você não utilize isso, só demonstrei também uma outra forma de declaração além das citadas.

No caso de desempenho, o GetComponent dentro de métodos como o Update e o FixedUpdate pode não ser o mais recomendável de usar, como você pode ver nessa discussão no fórum da Unity: https://answers.unity.com/questions/712804/getcomponent-in-void-update.html portanto, o mais recomendável é sempre fazer essa referência no Start ou no Awake, como eu fiz no primeiro exemplo!

Já o FindObjectOfType é mais crítico, pois é como eu disse, ele pode gerar um resultado inesperado se mais de um objeto na cena tiver esse script, sem dizer o que a própria documentação da Unity cita:

Please note that this function is very slow. It is not recommended to use this function every frame. In most cases you can use the singleton pattern instead.
Não é recomendável usar esse comando em métodos como Update porque ele é lento e pode diminuir o frame rate do seu jogo.

Você pode ler um tópico mais detalhado sobre a diferença entre GetComponent e FindObjectOfType nesse link: https://stackoverflow.com/questions/30310847/gameobject-findobjectoftype-vs-getcomponent

Com relação à performance entre os outros 2, não tem muita diferença, o segundo e o terceiro métodos são praticamente a mesma coisa, só que o terceiro é mais extenso e nesse caso não há tanta necessidade de fazer isso. 
Mas há sempre o questionamento do que será melhor para seu código em determinada situação, porém na maioria dos casos, o segundo método é mais eficiente.

É óbvio que estamos discutindo esses métodos com relação à referência externa, mas no caso de querer ter acesso ao componente do próprio objeto que possui o script, o GetComponent é o ideal, aliás, essa é a função dele.
avatar
MayLeone
ProgramadorMaster

Feminino PONTOS : 338
REPUTAÇÃO : 116
Áreas de atuação : Unity, Rpg Maker, Scratch, C#, PHP, HTML, CSS, JS, MYSQL, Blender
Respeito as regras :

Ver perfil do usuário http://compilemosfacil.blogspot.com.br

Voltar ao Topo Ir em baixo

DÚVIDA Re: Dúvida sobre método de acesso as variáveis

Mensagem por guimaraf em Qua Jun 13, 2018 3:11 pm

Muito obrigado, você me ajudou bastante, não sabia da recomendação da Unity sobre este tipo de evento.

Esta discussão deixe bem claro os motivos, o que eu queria saber, além da sua explicação é claro.
https://stackoverflow.com/questions/30310847/gameobject-findobjectoftype-vs-getcomponent

Muito obrigado.

Caso alguém queira fechar o tópico.
avatar
guimaraf
Avançado
Avançado

Masculino PONTOS : 607
REPUTAÇÃO : 24
Idade : 36
Áreas de atuação : Programação de jogos e técnico de informática
Respeito as regras :

Ver perfil do usuário http://guimaraf.github.io

Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

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