Ограничение значения int

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Ограничение значения int

Сообщение Gidly 05 ноя 2018, 19:40

Мне нужно ограничить допустимые значения int переменной от -3 до 3, как это сделать? Вроде надо юзать Mathf.Clamp, но я не очень понял каким образом, заранее спасибо
Аватара пользователя
Gidly
UNIт
 
Сообщения: 61
Зарегистрирован: 07 июл 2018, 19:20
Откуда: Из Бангладеша

Re: Ограничение значения int

Сообщение 1max1 05 ноя 2018, 19:50

int k = 5;
int clamp_k = Mathf.Clamp(k, -3, 3);
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Ограничение значения int

Сообщение Gidly 05 ноя 2018, 20:05

1max1 писал(а):int k = 5;
int clamp_k = Mathf.Clamp(k, -3, 3);

Не работает. Я что-то не так написал? Вот код(см. сверху)
Синтаксис:
Используется csharp
using UnityEngine;


public class MyOrsenal : MonoBehaviour {

    public GameObject M4A4;
    public GameObject Gun;
    public GameObject Shotgun;
    public GameObject icon_gun;
    public GameObject icon_m4;
    public GameObject icon_shotgun;
    public GameObject icon_fist;
    public GameObject Text;
    Animator_controller animator_con;
    AimScript aimScript;
    Animator animator;
    public int zoom;
    int clamp_zoom;
   
    void Start()
    {
        animator_con = GetComponent<Animator_controller>();
        animator = GetComponent<Animator>();
        aimScript = GetComponent<AimScript>();      
    }

    void Update ()
    {
        clamp_zoom = Mathf.Clamp(zoom, -3, 3);
        zoom += (int)Input.GetAxis("Mouse ScrollWheel");

        if (zoom == 1)
        {
            Gun.SetActive(true);
            Shotgun.SetActive(false);
            M4A4.SetActive(false);
            icon_gun.SetActive(true);
            icon_m4.SetActive(false);
            icon_shotgun.SetActive(false);
            icon_fist.SetActive(false);
        }
         if (zoom == 2)
        {
            Gun.SetActive(false);
            M4A4.SetActive(true);
            Shotgun.SetActive(false);
            icon_gun.SetActive(false);
            icon_m4.SetActive(true);
            icon_shotgun.SetActive(false);
            icon_fist.SetActive(false);
        }
        if (zoom == 3)
        {
            Gun.SetActive(false);
            M4A4.SetActive(false);
            Shotgun.SetActive(true);
            icon_gun.SetActive(false);
            icon_m4.SetActive(false);
            icon_shotgun.SetActive(true);
            icon_fist.SetActive(false);
        }
        if (Input.GetKeyDown(KeyCode.T) & aimScript.enabled == false)
        {
            Gun.SetActive(false);
            Shotgun.SetActive(false);
            M4A4.SetActive(false);
        }
        if (!Gun.activeSelf & !M4A4.activeSelf & !Shotgun.activeSelf)
        {
            icon_gun.SetActive(false);
            icon_m4.SetActive(false);
            icon_shotgun.SetActive(false);
            icon_fist.SetActive(true);
            Text.SetActive(false);
        }
        else
        {
            Text.SetActive(true);
        }
    }
}
 
Аватара пользователя
Gidly
UNIт
 
Сообщения: 61
Зарегистрирован: 07 июл 2018, 19:20
Откуда: Из Бангладеша

Re: Ограничение значения int

Сообщение DimaJoke 05 ноя 2018, 20:08

Это будет довольно странно, ноооооооооооооооооооо..
Синтаксис:
Используется csharp
int i = 2;
if(i > 3) i = 3;
if(i < -3) i = -3;
 

Должно работать

Почему бы и нет
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

Re: Ограничение значения int

Сообщение Anonymyx 05 ноя 2018, 20:15

Действительно странно, зачем это если есть Clamp().
По теме: вы приводите возвращаемое значение (float, -0.1f, 0.1f) к int, т.е. значение округляется и получается 0. Т.е. к переменной zoom вы всегда прибавляете 0.
Можно без второй переменной, zoom = Mathf.Clamp(zoom + Input.GetAxis("Mouse ScrollWheel"), -3f, 3f);.
Последний раз редактировалось Anonymyx 05 ноя 2018, 20:16, всего редактировалось 1 раз.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Ограничение значения int

Сообщение Gidly 05 ноя 2018, 20:15

DimaJoke писал(а):Это будет довольно странно, ноооооооооооооооооооо..
Синтаксис:
Используется csharp
int i = 2;
if(i > 3) i = 3;
if(i < -3) i = -3;
 

Должно работать

Почему бы и нет

Работает, спс
Аватара пользователя
Gidly
UNIт
 
Сообщения: 61
Зарегистрирован: 07 июл 2018, 19:20
Откуда: Из Бангладеша

Re: Ограничение значения int

Сообщение 1max1 05 ноя 2018, 20:34

Изображение
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Ограничение значения int

Сообщение DimaJoke 05 ноя 2018, 20:54

Gidly писал(а):
1max1 писал(а):int k = 5;
int clamp_k = Mathf.Clamp(k, -3, 3);

Не работает. Я что-то не так написал? Вот код(см. сверху)
Синтаксис:
Используется csharp
using UnityEngine;


public class MyOrsenal : MonoBehaviour {

    public GameObject M4A4;
    public GameObject Gun;
    public GameObject Shotgun;
    public GameObject icon_gun;
    public GameObject icon_m4;
    public GameObject icon_shotgun;
    public GameObject icon_fist;
    public GameObject Text;
    Animator_controller animator_con;
    AimScript aimScript;
    Animator animator;
    public int zoom;
    int clamp_zoom;
   
    void Start()
    {
        animator_con = GetComponent<Animator_controller>();
        animator = GetComponent<Animator>();
        aimScript = GetComponent<AimScript>();      
    }

    void Update ()
    {
        clamp_zoom = Mathf.Clamp(zoom, -3, 3);
        zoom += (int)Input.GetAxis("Mouse ScrollWheel");

        if (zoom == 1)
        {
            Gun.SetActive(true);
            Shotgun.SetActive(false);
            M4A4.SetActive(false);
            icon_gun.SetActive(true);
            icon_m4.SetActive(false);
            icon_shotgun.SetActive(false);
            icon_fist.SetActive(false);
        }
         if (zoom == 2)
        {
            Gun.SetActive(false);
            M4A4.SetActive(true);
            Shotgun.SetActive(false);
            icon_gun.SetActive(false);
            icon_m4.SetActive(true);
            icon_shotgun.SetActive(false);
            icon_fist.SetActive(false);
        }
        if (zoom == 3)
        {
            Gun.SetActive(false);
            M4A4.SetActive(false);
            Shotgun.SetActive(true);
            icon_gun.SetActive(false);
            icon_m4.SetActive(false);
            icon_shotgun.SetActive(true);
            icon_fist.SetActive(false);
        }
        if (Input.GetKeyDown(KeyCode.T) & aimScript.enabled == false)
        {
            Gun.SetActive(false);
            Shotgun.SetActive(false);
            M4A4.SetActive(false);
        }
        if (!Gun.activeSelf & !M4A4.activeSelf & !Shotgun.activeSelf)
        {
            icon_gun.SetActive(false);
            icon_m4.SetActive(false);
            icon_shotgun.SetActive(false);
            icon_fist.SetActive(true);
            Text.SetActive(false);
        }
        else
        {
            Text.SetActive(true);
        }
    }
}
 

Я не хочу вмешиваться, но почему бы тебе иконки менять не как SetActive, а создать скрипт GameUI, и там, в зависимости от выбранного оружия менять спрайт UI image? Ведь так намного удобнее, и код получается более удобный..

Блин, вот написал "нехочу вмешиваться" и вмешался =))
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 25