Страница 1 из 1

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

СообщениеДобавлено: 05 ноя 2018, 19:40
Gidly
Мне нужно ограничить допустимые значения int переменной от -3 до 3, как это сделать? Вроде надо юзать Mathf.Clamp, но я не очень понял каким образом, заранее спасибо

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

СообщениеДобавлено: 05 ноя 2018, 19:50
1max1
int k = 5;
int clamp_k = Mathf.Clamp(k, -3, 3);

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

СообщениеДобавлено: 05 ноя 2018, 20:05
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);
        }
    }
}
 

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

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

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

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

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

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

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

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

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

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

Работает, спс

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

СообщениеДобавлено: 05 ноя 2018, 20:34
1max1
Изображение

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

СообщениеДобавлено: 05 ноя 2018, 20:54
DimaJoke
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? Ведь так намного удобнее, и код получается более удобный..

Блин, вот написал "нехочу вмешиваться" и вмешался =))