Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Alazur

#1
Cita de: TheBullet date=1497872837 
   
   
      Ese código no está muy bien optimizado. Para empezar nunca deberías utilizar un GetComponent en Update, a parte, estás asignando el material a cada frame, aunque el material que se esté utilizando ya sea el mismo que vas a asignar. Una manera de arreglarlo un poco sería:
   
   

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class DisplayUITapa : MonoBehaviour
{
public string myString;
public Text myText;
public float fadeTime;
public bool displayInfo;
public Material MaterialA;
public Material MaterialB;
private Renderer ren;
public void Start ()
{
   myText = GameObject.Find ("TextTapa").GetComponent<Text> ();
   myText.color = Color.clear;
           ren = GetComponent<Renderer>();
}
public void Update ()
{
   FadeText ();
}
   
void OnMouseDown()
{
   if (displayInfo == false)
   {
      displayInfo = true;
                ren.material = MaterialB;
   }
   else
   {
      displayInfo = false;
                ren.material = MaterialA;
   }
}
   
void FadeText ()
{
   if(displayInfo)
   {
      myText.text = myString;
      myText.color = Color.Lerp (myText.color, Color.white, fadeTime * Time.deltaTime);
   }
   else
   {
      myText.color = Color.Lerp (myText.color, Color.clear, fadeTime * Time.deltaTime);
   }
}
}

   
       
   
   
       
   
   
      Si lo quisieras optimizar más podrías incluso hacer que el FadeText fuera un IEnumerator y activarlo desde el mouse down, así directamente te ahorrarías el Update, pero quizás esto ya es para un nivel más avanzado.
   
   
       
   
   
      Saludos.
   


Le pegaré un ojo, muchas gracias! ;D
#2
Al final, después de tantas pruebas para solucionar el problema, he añadido el siguiente código:
 

public Material MaterialA;
public Material MaterialB;
public void Update ()
{
   FadeText ();
   if (displayInfo == false)
   {
      GetComponent<Renderer> ().material = MaterialA;
   }
   else
   {
      GetComponent<Renderer> ().material = MaterialB;
   }
}

 
Por lo que el texto limpio y ordenado quedaría así:
 

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class DisplayUITapa : MonoBehaviour
{
public string myString;
public Text myText;
public float fadeTime;
public bool displayInfo;
public Material MaterialA;
public Material MaterialB;
public void Start ()
{
   myText = GameObject.Find ("TextTapa").GetComponent<Text> ();
   myText.color = Color.clear;
}
public void Update ()
{
   FadeText ();
   if (displayInfo == false)
   {
      GetComponent<Renderer> ().material = MaterialA;
   }
   else
   {
      GetComponent<Renderer> ().material = MaterialB;
   }
}
   
void OnMouseDown()
{
   if (displayInfo == false)
   {
      displayInfo = true;
   }
   else
   {
      displayInfo = false;
   }
}
   
void FadeText ()
{
   if(displayInfo)
   {
      myText.text = myString;
      myText.color = Color.Lerp (myText.color, Color.white, fadeTime * Time.deltaTime);
   }
   else
   {
      myText.color = Color.Lerp (myText.color, Color.clear, fadeTime * Time.deltaTime);
   }
}
}

 
Y el material deseado se selecciona donde indico en la imagen:
 
#3
Hola, muy buenas.
 
A penas sé nada de programar y me atiborro a tutoriales para ir avanzando, pero me he topado con un problema que me lleva de cabeza algún tiempo:

Resulta que he conseguido hacer que cuando haga click izquierdo con el ratón aparezca el texto sobre puesto con un canvas, y, al clicar nuevamente que desaparezca.


Además quiero que en la misma acción apareca o desaparezca el material, al mismo tiempo que lo hace el texto.


Mi problema es que no consigo hacer el cambio de material ("MaterialA" (cuando no aparece texto ) a "MaterialB" (cuando aparece el texto)), los tutoriales que he encontrado eran de anteriores versiones de Unity, y al parecer ya no funciona de la misma manera.


Adjunto código hasta ahora funcional, gracias de antemano!
 

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class DisplayUITapa : MonoBehaviour
{
public string myString;
public Text myText;
public float fadeTime;
public bool displayInfo;
public GameObject[] ItemGlow;
// Use this for initialization
public void Start ()
{
   myText = GameObject.Find ("TextTapa").GetComponent<Text> ();
   myText.color = Color.clear;
   //Screen.showCursor = false;
   //Screen.lockCursor = true;
}
// Update is called once per frame
public void Update ()
{
   FadeText ();
   /*if (Input.GetKeyDown (KeyCode.Escape))
        {
                Screen.lockCursor = false;
                 
        }*/
}
   
//Ratón sobre...
/*
void OnMouseOver()
{
   displayInfo = true;
}
void OnMouseExit()
{
   displayInfo = false;
}*/
 
//Clic sobre el objeto
void OnMouseDown()
{
   if (displayInfo == false)
   {
      displayInfo = true;
      GetComponent<Renderer>().materials[].color = Color.black;      
   }
   else
   {
      displayInfo = false;
   }
}
   
//Desvanecimiento
void FadeText ()
{
   if(displayInfo)
   {
      myText.text = myString;
      myText.color = Color.Lerp (myText.color, Color.white, fadeTime * Time.deltaTime);
   }
   else
   {
      myText.color = Color.Lerp (myText.color, Color.clear, fadeTime * Time.deltaTime);
   }
}
}

 
 
 
#4
General (Antiguo) / Resaltar objeto al clicar
Junio 06, 2017, 08:53:39 PM
Cita de: lightbug date=1496684959Hola, no me quedo bien en claro en proposito del post, osea buscas una opinion o tenes algun problema especifico? si buscas una opinion yo prefiero hacerle un outline, algo con algun shader supongo que resalte los bordes del objeto, que no tengo idea como hacerlo, pero debe haber varios ejemplos de codigo dando vuelta por ahi.
   
   
      Por el tema del click podes hacer este metodo, tiene un nombre bien feo pero seria algo asi como un OnCLick:
   
   
      https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseUpAsButton.html
   
   
      Se dispara cuando presionas y levantas el boton del mouse sobre el mismo GUI o un collider, una vez tengas eso andando es cuestion de aplicarle el shader o cambiarle el color.
   
   
       
   


Hola, muy buenas, Lightbug.

En verdad busco opinión, Unity lo he tocado muy poco y hay muchos conceptos que desconozco, gracias por la ayuda. 

Me encanta la idea del outliner, me recuerda mucho al Deus Ex, supongo que nos referimos a lo mismo. (Adjunto captura de google)


La diferencia es que en el Deus Ex sería una especie de hover.
 
#5
General (Antiguo) / Resaltar objeto al clicar
Junio 05, 2017, 07:07:38 PM
Hola muy buenas, quiero convertir este objeto en una especie de botón.
 
Me gustaría que al clicar sobre el modelo cambiara su color (a naranja, por ejemplo) mientras efectúa su animación y mantenga ese color hasta finalizar su animación. Y que al volver a clicar en él haga la animación inversa, pero manteniendo el color.
 
He pensado en el cambio de color por resaltarlo de alguna manera, si conocéis alguna manera mejor me gustaría escucharos.
 
¿Podríais echarme una mano?
 
Gracias de antemano.
 

 
#6
General (Antiguo) / Quiero crear una interfaz
Junio 02, 2017, 01:13:23 AM
Muchas gracias por la ayuda, mañana mismo me pondré a ver los tutoriales e iré probando. =)
#7
General (Antiguo) / Quiero crear una interfaz
Junio 01, 2017, 05:40:03 PM
Hola, muy buenas!

Para este día 20-Junio-2017 necesito presentar un proyecto a una empresa con el fin de insertarme laboralmente, y he de presentar un pequeño programa donde exponer un componente mecánico con interface de selección (Para el caso he seleccionado un motor eléctrico).

 
 
La idea es seleccionar haciendo click o tap en caso de una tablet para que al tocar la pieza directamente o un botón en la interface, esa pieza se desmonte y luego al volver a clicar, haga la animación inversa.

Unity 3D solamente lo he utilizado para hacer un pequeño museo con mis modelos y animaciones, así que mi conocimiento sobre el mismo podemos decir que es prácticamente básico.
 
Gracias de antemano!
#8
Hola, me apodo Alazur y me gustaría llegar a ser desarrollador de videojuegos algún día, por ahora voy aprendiendo de forma autodidacta en mis ratos libres.

Un placer unirme a este foro.