Criar porta, como acessar variáveis de GameObjeto diferente com RayCast
4 participantes
Página 1 de 1
Criar porta, como acessar variáveis de GameObjeto diferente com RayCast
São três objetos o jogado, a porta ea maçaneta cada um tem um script.
1 Script de nome coletar é para o jogador disparar Ray cast se o Ray cast atingir um game Object com a tag Macantet ,
o script coletar tem que acessar uma variável que pertence um script chamado macaneta que estará no game Object da tag Macanetat,
essa variável chama-se TocouMacaneta.
2 O script que estará no gameObject com a tag macanetat o nome do Script é macaneta,
esse script tem que acessar o gameObjeto porta e procurar o script porta para alterar umas
variáveis dentro dela fazendo-a abrir e fechar.
3 o terceiro script só faz a porta rotacionar abrindo e fechando.
O script 2 e 3 estão funcionando corretamente o problema está no
primeiro quando aperto o do mouse para lançar o Raycast quando ele atinge a maçaneta da porta
não consegue acessar o script e mudar a variável TocouMacaneta para true.
(Script do jogador)
public class coletar : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetButtonDown("Fire1"))
{
RaycastHit hit = new RaycastHit();
Vector3 dir = transform.TransformDirection(Vector3.forward);
Debug.DrawRay(transform.position, dir * 5, Color.green);
if (Physics.Raycast(transform.position, dir, out hit, 10f))
{
if (hit.collider.gameObject.tag == "Macanetat")
{
hit.transform.GetComponent<Macaneta>().TocouMacaneta = true;
}
}
}
}
}
using UnityEngine;
using System.Collections;
public class Macaneta : MonoBehaviour {
public GameObject porta;
public Porta PortaCode;
public bool InteragirMacaneta;
public bool TocouMacaneta;
// Use this for initialization Macaneta
void Start () {
InteragirMacaneta = false;
TocouMacaneta = true;
}
// Update is called once per frame
void Update () {
if (TocouMacaneta == true)
{
if (InteragirMacaneta == true)
{
porta.GetComponent<Porta>().Abre = false;
porta.GetComponent<Porta>().movimento = true;
InteragirMacaneta = false;
TocouMacaneta = false;
}
else
if (InteragirMacaneta == false)
{
porta.GetComponent<Porta>().Abre = true;
porta.GetComponent<Porta>().movimento = true;
InteragirMacaneta = true;
TocouMacaneta = false;
}
}
}
}
O script da porta não postei Porque esta funcionando, na verdade o da Maçaneta tambem o problema é o Ray cast não alterar a variável da maçaneta
1 Script de nome coletar é para o jogador disparar Ray cast se o Ray cast atingir um game Object com a tag Macantet ,
o script coletar tem que acessar uma variável que pertence um script chamado macaneta que estará no game Object da tag Macanetat,
essa variável chama-se TocouMacaneta.
2 O script que estará no gameObject com a tag macanetat o nome do Script é macaneta,
esse script tem que acessar o gameObjeto porta e procurar o script porta para alterar umas
variáveis dentro dela fazendo-a abrir e fechar.
3 o terceiro script só faz a porta rotacionar abrindo e fechando.
O script 2 e 3 estão funcionando corretamente o problema está no
primeiro quando aperto o do mouse para lançar o Raycast quando ele atinge a maçaneta da porta
não consegue acessar o script e mudar a variável TocouMacaneta para true.
(Script do jogador)
public class coletar : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetButtonDown("Fire1"))
{
RaycastHit hit = new RaycastHit();
Vector3 dir = transform.TransformDirection(Vector3.forward);
Debug.DrawRay(transform.position, dir * 5, Color.green);
if (Physics.Raycast(transform.position, dir, out hit, 10f))
{
if (hit.collider.gameObject.tag == "Macanetat")
{
hit.transform.GetComponent<Macaneta>().TocouMacaneta = true;
}
}
}
}
}
using UnityEngine;
using System.Collections;
public class Macaneta : MonoBehaviour {
public GameObject porta;
public Porta PortaCode;
public bool InteragirMacaneta;
public bool TocouMacaneta;
// Use this for initialization Macaneta
void Start () {
InteragirMacaneta = false;
TocouMacaneta = true;
}
// Update is called once per frame
void Update () {
if (TocouMacaneta == true)
{
if (InteragirMacaneta == true)
{
porta.GetComponent<Porta>().Abre = false;
porta.GetComponent<Porta>().movimento = true;
InteragirMacaneta = false;
TocouMacaneta = false;
}
else
if (InteragirMacaneta == false)
{
porta.GetComponent<Porta>().Abre = true;
porta.GetComponent<Porta>().movimento = true;
InteragirMacaneta = true;
TocouMacaneta = false;
}
}
}
}
O script da porta não postei Porque esta funcionando, na verdade o da Maçaneta tambem o problema é o Ray cast não alterar a variável da maçaneta
Brian Victor- Membro
- PONTOS : 3333
REPUTAÇÃO : 3
Respeito as regras :
Re: Criar porta, como acessar variáveis de GameObjeto diferente com RayCast
usa a caixa de código do fórum para postar script, fica mais facil visualizar e mantem a identação do script
- Código:
[code][/code]
Re: Criar porta, como acessar variáveis de GameObjeto diferente com RayCast
- Código:
public class coletar : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetButtonDown("Fire1"))
{
RaycastHit hit = new RaycastHit();
Vector3 dir = transform.TransformDirection(Vector3.forward);
Debug.DrawRay(transform.position, dir * 5, Color.green);
if (Physics.Raycast(transform.position, dir, out hit, 10f))
{
if (hit.collider.gameObject.tag == "Macanetat")
{
hit.transform.GetComponent().TocouMacaneta = true;
}
}
}
}
}
- Código:
using UnityEngine;
using System.Collections;
public class Macaneta : MonoBehaviour {
public GameObject porta;
public Porta PortaCode;
public bool InteragirMacaneta;
public bool TocouMacaneta;
// Use this for initialization Macaneta
void Start () {
InteragirMacaneta = false;
TocouMacaneta = true;
}
// Update is called once per frame
void Update () {
if (TocouMacaneta == true)
{
if (InteragirMacaneta == true)
{
porta.GetComponent().Abre = false;
porta.GetComponent().movimento = true;
InteragirMacaneta = false;
TocouMacaneta = false;
}
else
if (InteragirMacaneta == false)
{
porta.GetComponent().Abre = true;
porta.GetComponent().movimento = true;
InteragirMacaneta = true;
TocouMacaneta = false;
}
}
}
}
Brian Victor- Membro
- PONTOS : 3333
REPUTAÇÃO : 3
Respeito as regras :
Re: Criar porta, como acessar variáveis de GameObjeto diferente com RayCast
Você deveria ter jogado o código direto do seu editor para a codebox aqui do fórum... assim o código perdeu os componentes no "GetComponent"... tem como ajeitar os scripts para que possamos ver?
Re: Criar porta, como acessar variáveis de GameObjeto diferente com RayCast
MarcosSchultz escreveu:Você deveria ter jogado o código direto do seu editor para a codebox aqui do fórum... assim o código perdeu os componentes no "GetComponent"... tem como ajeitar os scripts para que possamos ver?
É a primeira vez que to usando esse site ainda não sei todos os recursos mas joguei dentro de uma caixa que tava escrito Code. vou jogar denovo os doi codigos
- Código:
using UnityEngine;
using System.Collections;
public class coletar : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetButtonDown("Fire1"))
{
RaycastHit hit = new RaycastHit();
Vector3 dir = transform.TransformDirection(Vector3.forward);
Debug.DrawRay(transform.position, dir * 5, Color.green);
if (Physics.Raycast(transform.position, dir, out hit, 10f))
{
if (hit.collider.gameObject.tag == "Macanetat")
{
hit.transform.GetComponent<Macaneta>().TocouMacaneta = true;
}
}
}
}
}
- Código:
using UnityEngine;
using System.Collections;
public class Macaneta : MonoBehaviour {
public GameObject porta;
public Porta PortaCode;
public bool InteragirMacaneta;
public bool TocouMacaneta;
// Use this for initialization Macaneta
void Start () {
InteragirMacaneta = false;
TocouMacaneta = true;
}
// Update is called once per frame
void Update () {
if (TocouMacaneta == true)
{
if (InteragirMacaneta == true)
{
porta.GetComponent<Porta>().Abre = false;
porta.GetComponent<Porta>().movimento = true;
InteragirMacaneta = false;
TocouMacaneta = false;
}
else
if (InteragirMacaneta == false)
{
porta.GetComponent<Porta>().Abre = true;
porta.GetComponent<Porta>().movimento = true;
InteragirMacaneta = true;
TocouMacaneta = false;
}
}
}
}
Brian Victor- Membro
- PONTOS : 3333
REPUTAÇÃO : 3
Respeito as regras :
Re: Criar porta, como acessar variáveis de GameObjeto diferente com RayCast
Coloca um Debug.Log("mensagem"); em baixo disto:
se debugar, está mudando a variável e o problema é no script da Maçaneta mesmo... por que pelo que pude ver, o próprio script, quando a variável fica verdadeira, já a deixa falsa de novo
- Código:
hit.transform.GetComponent<Macaneta>().TocouMacaneta = true;
se debugar, está mudando a variável e o problema é no script da Maçaneta mesmo... por que pelo que pude ver, o próprio script, quando a variável fica verdadeira, já a deixa falsa de novo
Re: Criar porta, como acessar variáveis de GameObjeto diferente com RayCast
Cara pelo que entendi você criou as classes "Coletar", "Macaneta" e "Porta". Quando o ponto de colisão do raycast da classe "Coletar" atingir um gameobject com a tag "Macanetat" deve setar a variável booleana "TocouMacaneta" para verdadeiro.
Só q neste trecho abaixo da classe "Macaneta" você verifica que se caso o "TocouMacaneta" for verdadeiro, verifica o estado de "InteragirMacaneta" que também é booleana e mesmo se for verdadeiro ou falso, seta o "TocouMacaneta" como falso.
Então a todo momento o "TocouMacaneta" fica como falso.
Será necessário revisar a condição abaixo.
Só q neste trecho abaixo da classe "Macaneta" você verifica que se caso o "TocouMacaneta" for verdadeiro, verifica o estado de "InteragirMacaneta" que também é booleana e mesmo se for verdadeiro ou falso, seta o "TocouMacaneta" como falso.
Então a todo momento o "TocouMacaneta" fica como falso.
Será necessário revisar a condição abaixo.
- Código:
// Update is called once per frame
void Update () {
if (TocouMacaneta == true)
{
if (InteragirMacaneta == true)
{
porta.GetComponent().Abre = false;
porta.GetComponent().movimento = true;
InteragirMacaneta = false;
TocouMacaneta = false;
}
else
if (InteragirMacaneta == false)
{
porta.GetComponent().Abre = true;
porta.GetComponent().movimento = true;
InteragirMacaneta = true;
TocouMacaneta = false;
}
}
}
#N31- Membro
- PONTOS : 3389
REPUTAÇÃO : 11
Idade : 30
Respeito as regras :
Tópicos semelhantes
» como acessar variáveis de outros scripts
» Acessar variáveis do Network Manager
» Como Criar uma nova classe com as mesmas variaveis?
» Problema com animaç]ao de fechar porta ao clicar com mouse raycast
» Acessar variáveis
» Acessar variáveis do Network Manager
» Como Criar uma nova classe com as mesmas variaveis?
» Problema com animaç]ao de fechar porta ao clicar com mouse raycast
» Acessar variáveis
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos