Задать вопрос
  • Как делаются такие игры?

    flexer1992
    @flexer1992
    Unity Developer
    Есть варианты с тем, чтобы резать меш. Но, там, с большой долей вероятности упретесь в производительность, причем жестко упретесь. Поэтому единственный адекватный вариант, это использовать заранее нарезанные модели предметов.
    Ответ написан
    Комментировать
  • Как из листа взять все числа в случайном порядке, без повторений?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    почему то значения в r1 r2 другие, хоть и приближенные

    правильно
    Random.Range(numbers[0], numbers[2]);
    никогда (или с очень малой веорятностью) не вернет ни numbers[0], ни numbers[2]. вы же задаете их как границы диапазона будущего случайного значения. обычно вы получите действительно значение где то между границ

    немого забегая вперед, раз уж у вас cлучайное значение, то numbers.Remove(r1); скорее всего ни чего не удаляет из списка. для удаления надо укзать значение, которое там действительно существует

    а r3 всегда равен min

    естественно (причины выше, вы никогда, ни чего не удаляе из списка)
    numbers = new List<float>() { min, mid, max };
    ...
    r3 = numbers[0];


    вероятно вам надо что то в этом духе
    numbers = new List<float>() { min, mid, max };
    // тут без изменений
    // далее различаем индексы и сами значения
    i1 = Random.Range(0, numbers.Count-1);
    r1 = numbers[i1]
    numbers.RemoveAt(i1);
    // ну или как вариант
    i_n = Random.Range(0, numbers.Count-1);
    r_n = numbers[i_n]
    numbers.Remove(r_n);
    // как видите, ни одной строки не убавилось. а удаление по индексу точно быстрее
    // полную совместимость с Unity это уж сами проверьте
    // естественно n ни когда не должно превышать исходного размера списка
    // и еще - средства раскраски синтаксиса напомнили in это зарезервированное
    // ключевое слово ;))


    ps и хочу предупредить - я не в курсе как в юнити с авто приведениями типов. беглое гугление, поазало, что Random.Range() возвращает float, а в качестве индекса должно использоваться int. в традиционном дотнете, приведение местами пойдет автоматически, но где то придется использовать явные приемы приведения типов

    pps
    freeExec, в каментах, утрверждает что верхняя граница ни когда не возваращается рандомайзером
    если это действительно так, можео смело шпарить
    ...i_n = Random.Range(0, numbers.Count);
    на любой фазе. ведь numbers.Count всегда вернет актуальное значение размера. его нельзя использовать в качесве индекса. но нас только что заверили, что рандомайзер не возвращает верхнюю грницу. значит такой код и короче и корректнее
    Ответ написан
    3 комментария