Noticias

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

Temas recientes

Limitar el valor de una variable?

Iniciado por Javiher, Febrero 08, 2020, 04:51:48 PM

Tema anterior - Siguiente tema
Hola buenas
 
Como puedo limitar el valor que puede almacenar una variable? Tengo una de tipo float y quiero hacer que no pase del valor 1, en otras partes del script le asigno valores y en una de esas partes este valor es mas grande que uno, pero yo no quiero que pase mas allá del valor que quiero.
 
Gracias

Buenas tardes Javiher
 
Probaste a usar Mathf.Clamp? 
 

float num = Mathf.Clamp(num,0,1);

 
https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html

Me funciono!!!! Muchas gracias nomoregames, estaba buscando una solución con Mathf pero no la encontraba.

El uso de Mathf.Clamp es correcto, pero si vas a asignar la variable desde múltiples lugares te recomiendo utilizar propiedades.
 

private float m_value = 0;
public float Value { get {return m_value;} set { m_value = Mathf.Clamp(m_value, 0, 1);} }

 
De este modo cada vez que asignes Value se va a aplicar la limitación.

Buenas
 
francoe ,trato de entender tu script, pero no se para que sirven set, return y get, serias tan amable de explicar el funcionamiento... 

Febrero 08, 2020, 10:58:53 PM #5 Ultima modificación: Febrero 08, 2020, 11:01:29 PM por francoe1
Cita de: nomoregames date=1581197261Buenas
   
   
      francoe ,trato de entender tu script, pero no se para que sirven set, return y get, serias tan amable de explicar el funcionamiento... 


Un campo es una variable que se declara directamente en una clase o estructura. Una clase o estructura puede tener campos de instancia o campos estáticos o ambos. En general, debe usar campos solo para variables que tengan accesibilidad privada o protegida . Los datos que su clase expone al código del cliente se deben proporcionar a través de métodos, propiedades e indexadores. Al utilizar estas construcciones para el acceso indirecto a los campos internos, puede protegerse contra valores de entrada no válidos.
 
Ejemplo
 

public class MiClase
{
public float MiCampo = 0;
}

 
Una propiedad es un miembro que proporciona un mecanismo flexible para leer, escribir o calcular el valor de un campo privado. Las propiedades se pueden usar como si fueran miembros de datos públicos, pero en realidad son métodos especiales llamados accesores . Esto permite acceder fácilmente a los datos y aún así ayuda a promover la seguridad y flexibilidad de los métodos . Las propiedades permiten que una clase exponga una forma pública de obtener y establecer valores, al tiempo que oculta el código de implementación o verificación. Se utiliza un descriptor de acceso de propiedad get para devolver el valor de la propiedad, y un descriptor de acceso set se utiliza para asignar un nuevo valor.
 
Ejemplo
 

public class MiClase
{
private float m_miPropiedadValue = 0;
public float MiPropiedadBidireccional { get; set;}   
public float MiPropiedadUnidireccionalGET { get { return m_miPropiedadValue; } }
public float MiPropiedadUnidireccionalSET { set { m_miPropiedadValue = value; } } //VALUE es el valor que se le esta asignando a una variable.
}

 
Entonces podemos decir que un campo es la forma de representar libremente una variable. Mientras que una propiedad es un forma de enmascarar un campo o valor, las propiedades tambien se pueden utilizar para realizar cálculos u otra combinación de información.
 
Ejemplo
 

public class PlayerStatistics
{
  public int Defense;
  public int Attack;
  public int Velocity;
 
  public int Range { get { return (Defense + Attack + Veloctiy) / 3; } }
  //Desde la versión 4.7 de C# se pueden utilzar las arrow propertys
  //La desventaja es que solo son para propiedades de solo lectura.
  public int Range => (Defense + Attack + Veloctiy) / 3;
}

 
Aparte de esta explicaciones básica existe diferencias en el MSIL pero esto ya es más técnico.

Etiquetas: