Javiher 2 Report post Posted February 8, 2020 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 Share this post Link to post Share on other sites
nomoregames 35 Report post Posted February 8, 2020 Buenas tardes Javiher Probaste a usar Mathf.Clamp? float num = Mathf.Clamp(num,0,1); https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html Share this post Link to post Share on other sites
Javiher 2 Report post Posted February 8, 2020 Me funciono!!!! Muchas gracias nomoregames, estaba buscando una solución con Mathf pero no la encontraba. Share this post Link to post Share on other sites
francoe1 536 Report post Posted February 8, 2020 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. Share this post Link to post Share on other sites
nomoregames 35 Report post Posted February 8, 2020 Buenas francoe ,trato de entender tu script, pero no se para que sirven set, return y get, serias tan amable de explicar el funcionamiento... Share this post Link to post Share on other sites
francoe1 536 Report post Posted February 8, 2020 33 minutes ago, nomoregames said: Buenas 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. Share this post Link to post Share on other sites