Como acesso uma variável em outro script?
5 participantes
Página 1 de 1
Como acesso uma variável em outro script?
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class VidaArovre : MonoBehaviour {
public float VidaArvore = 3f;
public GameObject Madeira;
public Transform PosicaoSpawnMa;
bool cortando;
void Start () {
}
void Update () {
if (VidaArvore == 0f) {
Instantiate (Madeira, PosicaoSpawnMa.position, PosicaoSpawnMa.rotation);
this.gameObject.SetActive (false);
}
if (Input.GetKeyDown (KeyCode.Mouse0) && cortando == true) {
VidaArvore -= 1;
}
}
void OnTriggerEnter(Collider Colisaun){
if(Colisaun.gameObject.tag == "Machado"){
Debug.Log ("CORTANDO");
cortando = true;
}
}
}
GabrielBs1409- Membro
- PONTOS : 2847
REPUTAÇÃO : 6
Respeito as regras :
Re: Como acesso uma variável em outro script?
Sim, existem vários métodos de comunicação entre classes, citarei três aqui:
1. Referencia
Nesse modelo é necessário que você criei um campo do tipo da classe que deseja acessar o seu membro e passe a classe via GetComponent<Type>();. Porém dessa forma é necessario que ambas as classes sejam MonoBehaviour e estejam no mesmo GameObject ou Filho (GetComponentInChildren) ou (GetComponentInParent) para os pais.
2. Referencia com Instanciação
Segue o mesmo principio da primeira, porém aqui ao invés de usar GetComponent, você ira usar a keyword "new" para fazer uma instância de uma nova classe.
3. Singleton
Esse modelo é o mais indicado para ser usado em classes que necessitam de controles globais (o que nao é uma boa prática, porém é a unica forma de se fazer na Unity)
Para saber mais leia:
https://pt.wikipedia.org/wiki/Singleton
https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/new
https://docs.unity3d.com/ScriptReference/GameObject.GetComponent.html
https://docs.unity3d.com/ScriptReference/GameObject.GetComponentInChildren.html
https://docs.unity3d.com/ScriptReference/GameObject.GetComponentInParent.html
1. Referencia
Nesse modelo é necessário que você criei um campo do tipo da classe que deseja acessar o seu membro e passe a classe via GetComponent<Type>();. Porém dessa forma é necessario que ambas as classes sejam MonoBehaviour e estejam no mesmo GameObject ou Filho (GetComponentInChildren) ou (GetComponentInParent) para os pais.
2. Referencia com Instanciação
Segue o mesmo principio da primeira, porém aqui ao invés de usar GetComponent, você ira usar a keyword "new" para fazer uma instância de uma nova classe.
3. Singleton
Esse modelo é o mais indicado para ser usado em classes que necessitam de controles globais (o que nao é uma boa prática, porém é a unica forma de se fazer na Unity)
Para saber mais leia:
https://pt.wikipedia.org/wiki/Singleton
https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/new
https://docs.unity3d.com/ScriptReference/GameObject.GetComponent.html
https://docs.unity3d.com/ScriptReference/GameObject.GetComponentInChildren.html
https://docs.unity3d.com/ScriptReference/GameObject.GetComponentInParent.html
Re: Como acesso uma variável em outro script?
https://www.schultzgames.com/t15-tutorial-acessar-variaveis-de-outros-scripts-variaveis-estaticas-javascript?highlight=Estáticas
Neste tutorial, o exemplo dado é em JavaScript, mas o comando serve para C# também
Neste tutorial, o exemplo dado é em JavaScript, mas o comando serve para C# também
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Como acesso uma variável em outro script?
Voces falaram sobre o GetComponentInChildren e GetComponentInParent!
Qual a diferença entre eles?
Quando é que se deve usar um ou outro?
Qual a diferença entre eles?
Quando é que se deve usar um ou outro?
Flávio- MembroAvançado
- PONTOS : 2830
REPUTAÇÃO : 29
Áreas de atuação : Aprendizagem em:
Programação C#;
Pixelart
Respeito as regras :
Re: Como acesso uma variável em outro script?
Flávio escreveu:Voces falaram sobre o GetComponentInChildren e GetComponentInParent!
Qual a diferença entre eles?
Quando é que se deve usar um ou outro?
Children = Filhos
Parent = Pais
Ou seja, você utiliza de acordo com a necessidade da hierarquia... Para pegar o componente ou no(ou nos com o GetComponents) filho ou pai... Abraços, até mais!
Re: Como acesso uma variável em outro script?
recagonlei escreveu:Flávio escreveu:Voces falaram sobre o GetComponentInChildren e GetComponentInParent!
Qual a diferença entre eles?
Quando é que se deve usar um ou outro?
Children = Filhos
Parent = Pais
Ou seja, você utiliza de acordo com a necessidade da hierarquia... Para pegar o componente ou no(ou nos com o GetComponents) filho ou pai... Abraços, até mais!
Certo mas por exemplo, eu tenho um objeto pai e um filho dentro dele, se eu quero pegar o componente do filho, eu tenho que usar o GetComponentInChildren? E se for o pai eu tenho que usar o GetComponentInParent?
Não basta usar o GetComponent comum para os dois?
Flávio- MembroAvançado
- PONTOS : 2830
REPUTAÇÃO : 29
Áreas de atuação : Aprendizagem em:
Programação C#;
Pixelart
Respeito as regras :
Re: Como acesso uma variável em outro script?
Por exemplo, se você tem acesso ao GameObject do filho, você pode usar apenas o GetComponent:
Isso pega o Rigid do filho, de acordo com o Objeto declarado, o script está no pai e a variável setada, por isso pode pegar com o GetComponent, por estar explícito o objeto!
Mas, se você quer apenas ir de acordo com um Objeto(o pai ou filho) sem declara-lo, você então usa o GetComponentInChildren(ou Parent se for o filho que está com o script ou em referência do método):
A variável gameObject se refere ao objeto que está o script, ou seja, se ele tenha um filho que tem um Rigidbody, então você pode acessar pelo seu pai!
Espero que tenha entendido, até!
- Código:
public GameObject m_myChild;
void Start(){
Rigidbody tempRb = m_myChild.GetComponent<Rigidbody>();
}
Isso pega o Rigid do filho, de acordo com o Objeto declarado, o script está no pai e a variável setada, por isso pode pegar com o GetComponent, por estar explícito o objeto!
Mas, se você quer apenas ir de acordo com um Objeto(o pai ou filho) sem declara-lo, você então usa o GetComponentInChildren(ou Parent se for o filho que está com o script ou em referência do método):
- Código:
void Start(){
Rigidbody tempRb = gameObject.GetComponentInChildren<Rigidbody>();
}
A variável gameObject se refere ao objeto que está o script, ou seja, se ele tenha um filho que tem um Rigidbody, então você pode acessar pelo seu pai!
Espero que tenha entendido, até!
Tópicos semelhantes
» Nao consigo alterar o valor da variavel de outro script
» Como acessar variável de um script usando outro script (Entre e entenda).
» Como acessar uma variável de outro script sem saber o objeto?
» Como acessar uma variável de um script utilizando como parâmetro uma variável nomescript
» Dúvida Definir Variável Enum por Outro Script
» Como acessar variável de um script usando outro script (Entre e entenda).
» Como acessar uma variável de outro script sem saber o objeto?
» Como acessar uma variável de um script utilizando como parâmetro uma variável nomescript
» Dúvida Definir Variável Enum por Outro Script
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos