Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Pregunta sobre 3d Text

Iniciado por Jazz, Enero 03, 2018, 08:55:13 PM

Tema anterior - Siguiente tema
Enero 03, 2018, 08:55:13 PM Ultima modificación: Enero 10, 2018, 12:10:31 PM por pioj
Hola amigos!
 
Tengo una pregunta, necesito que el botón "Siguiente" (que es un texto en 3D) aparezca solo después de presionar un cubo, ¿cómo puedo hacerlo?
Además necesito bloquear los otros cubos si presiono uno, este es mi código, por favor ayúdenme con el código porque soy tan novata en esto y no tengo suficiente tiempo. ¡¡¡Gracias!!!
 
Este es el código en caso de presionar el cubo "ch":
 
  
 

 if (hit.collider.tag == "Letra_ch") {
                        Destroy (hit.collider.gameObject);
                        aux++;
                        scoreAmount++;
                        letra = "ch";
                        if (GameManager.gm) {
                            GameManager.gm.targetHit (scoreAmount);
                        }
                        scoreFinal = PlayerPrefs.GetInt ("Score", scorePP) + scoreAmount;
                        PlayerPrefs.SetInt ("Score", scoreFinal);
                        Debug.Log ("Score en ch: " + scoreFinal);
                        Debug.Log ("ESTOY EN CH EN SCRIPT: " + letra);
                        PlayerPrefs.SetString ("Chado", letra.ToString ());
                    }

 

Pues suponiendo que tengas la referencia guardada es tan sencillo como hacer un "objetoSiguiente.SetActive(true)" dentro del if ese que has puesto y dejarlo oculto el resto del tiempo en la jerarquia

Enero 03, 2018, 11:01:47 PM #2 Ultima modificación: Enero 09, 2018, 10:10:12 PM por pioj
Cita de: Eskema date=1515015854Pues suponiendo que tengas la referencia guardada es tan sencillo como hacer un "objetoSiguiente.SetActive(true)" dentro del if ese que has puesto y dejarlo oculto el resto del tiempo en la jerarquia
   


Y como es esto de las referencias? la verdad soy muy nueva y lo unico que tengo en ese boton siguiente como script es:
 



   
       
   
   
      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
   
   
      public class ChadoSigScript : MonoBehaviour {
   
   
          void OnMouseDown(){
              Application.LoadLevel ("Level2LC");
   
   
      }
      }
   
   
       
   

[/quote]
 

Hola jazz, en el scrtipt que tengas la detección del click al cubo referenciás como te dicen arriba el gameObject que querés activar, lo desactivás (o por lo menos te asegurás de hacerlo) en start y cuando se de (click sobre un cubo) lo activás.
 

public GameObject siguiente = null;   //aca arrastras el gameObject "siguiente"
void Start()
{
siguiente.SetActive(false);   //lo desactivás al comenzar
}
 
//...
//...
//en el momento del click al cubo
siguiente.SetActive(true);

 
lo podés activar desde cualquier lado, en cualquier script siempre que tengas la referencia a él, pero si ya podés detectar el "evento" del  click sobre el cubo (que lo necesitás para activarlo) te conviene hacerlo en el mismo script (en donde tengas el primer código que posteaste).
 
Fijate que pensarlo así implica que "siguiente" es el sirviente de los cubos, se activa cuando ellos quieren, además de que si tuvieras multiples scripts tenés que andar referenciando multiples veces, quizás a futuro te interese que dentro de tu escena exista un estado, ponele "listoParaContinuar" y que "siguiente" solamente se active cuando se dé este estado, entonces independizas a los cubos de la referencia, y "siguiente" hace de la suya.
 
Fijate que Application.LoadLevel está obsoleta, no se que versión usas.
 
 

Cita de: lightbug date=1515044296Hola jazz, en el scrtipt que tengas la detección del click al cubo referenciás como te dicen arriba el gameObject que querés activar, lo desactivás (o por lo menos te asegurás de hacerlo) en start y cuando se de (click sobre un cubo) lo activás.
   
   

public GameObject siguiente = null;   //aca arrastras el gameObject "siguiente"
void Start()
{
siguiente.SetActive(false);   //lo desactivás al comenzar
}
 
//...
//...
//en el momento del click al cubo
siguiente.SetActive(true);

   
      lo podés activar desde cualquier lado, en cualquier script siempre que tengas la referencia a él, pero si ya podés detectar el "evento" del  click sobre el cubo (que lo necesitás para activarlo) te conviene hacerlo en el mismo script (en donde tengas el primer código que posteaste).
   
   
      Fijate que pensarlo así implica que "siguiente" es el sirviente de los cubos, se activa cuando ellos quieren, además de que si tuvieras multiples scripts tenés que andar referenciando multiples veces, quizás a futuro te interese que dentro de tu escena exista un estado, ponele "listoParaContinuar" y que "siguiente" solamente se active cuando se dé este estado, entonces independizas a los cubos de la referencia, y "siguiente" hace de la suya.
   
   
      Fijate que Application.LoadLevel está obsoleta, no se que versión usas.
   
   
       
   


Muchas gracias deberas me has salvado!! la verdad utilizo el Application.LoadLevel porque así lo encontré en un tutorial, cual debería utilizar ahora? hay algún problema si lo utilizo? De nuevo mil gracias!!

Cita de: Jazz date=1515530967Muchas gracias deberas me has salvado!! la verdad utilizo el Application.LoadLevel porque así lo encontré en un tutorial, cual debería utilizar ahora? hay algún problema si lo utilizo? De nuevo mil gracias!!
   


De nada. Todo lo que esté obsoleto no tiene soporte ni nada, es decir que podés tener un problema, incompatibilidad o te lo sacan de una versión a otra (o directamente no anda). Lo seguro es incluir "unityengine.scenemanagement" y usar el sceneManager:
 
https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.html
 
para cargar una escena usá LoadScene.
 
Saludos

Cita de: lightbug date=1515552970De nada. Todo lo que esté obsoleto no tiene soporte ni nada, es decir que podés tener un problema, incompatibilidad o te lo sacan de una versión a otra (o directamente no anda). Lo seguro es incluir "unityengine.scenemanagement" y usar el sceneManager:
   
   
      https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.html
   
   
      para cargar una escena usá LoadScene.
   
   
      Saludos
   


Que interesante no lo sabía, ya lo actualicé gracias! Una consulta más y disculpa mi abuso, pero para evitar que se haga clic en otros cubos, es decir si selecciona "ch" debo bloquear el "touch" sobre los demás como haría esto? de nuevo disculpa mi abuso.

Enero 10, 2018, 10:08:43 AM #7 Ultima modificación: Enero 10, 2018, 10:15:03 AM por Eskema
Para "evitar" esos clicks deberias tener un controller/manager que gestione la escena y los elementos de ella, para poder bloquear los clicks. O mas bien al contrario, es decir, el controller/manager gestiona los clicks y decide si se los envia al objeto tal o el objeto cual, asi el controller es quien gestiona tu escena, y no cada objeto de forma individual como estas haciendo.
 
Es cuestion de estudiar controllers/managers y gestion de grupos

Cita de: Jazz date=1515561849Que interesante no lo sabía, ya lo actualicé gracias! Una consulta más y disculpa mi abuso, pero para evitar que se haga clic en otros cubos, es decir si selecciona "ch" debo bloquear el "touch" sobre los demás como haría esto? de nuevo disculpa mi abuso.
   


Te contesto ahora porque me citaste pero es tal cual lo que dice @Eskema, necesitas manejar/administrar tu escena de alguna manera, llevar cuenta de todo (pensá a tu aplicación como una empresa), nadie puede hacer cosas de más ni tener incumbencias que no le correspondan.
 
Un ej simple, podrías "simular esos clicks" (ahora no que ya los tenés, si fuera que no tendrías nada en la escena), olvidate del cursor, y de los cubos esos , de los clicks, de la UI, etc , pensalo como que pasás de un cubo a otro simplemente apretando los números de tu teclado, y luego imprimi la información importante (con print, debug.log , OnGUI, UI, o como quieras):
 

Cubo actual : cubo1
"Siguiente" habilitado : True
Resto de los cubos habilitados : False
Boton X Habilitado : False;
.... (etc)

 
Entonces así te asegurás de que todo anda exactamente como quieras (lo de bloquear "esto" mientras está activo "esto otro" que pedís).Te vas a dar cuenta que la parte gráfica, los cubos, la UI, la detección del click, todo esto forma parte de algo "externo" a todo lo que mencioné arriba. Esto sirve para lograr abstracción de ciertos elementos de tu aplicación/escena. Si se te ocurriese cambiar el diseño original (en vez de UI, objetos 3D de la escena, en vez de clicks aprentando teclas del teclado, etc ) no tendrías ningun problema.
 
Saludos

Etiquetas: