Как получать значения из массива, не запоминая координаты?

21

Fichiers attachés

Les fichiers suivants ont été attachés à ce tutoriel:

Statistiques

3,702 visites, 5,325 vues

Outils

Partager

Traductions

Ce tutoriel n'a pas été traduit.

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

Published on 13 Aug, 2019.

Всем привет, в этом уроке я расскажу как, имея подобный массив с характеристиками персонажей, получать значения, и при этом:

  • Не запоминать координаты
  • Не соблюдать имеющуюся последовательность при добавлении новых столбцов, строк.

Предупреждение: вероятно, настоящий программист добился бы результата проще и эффективнее. Автор урока — обычный уральский UX-дизайнер.

Урок рассчитан на продвинутых пользователей, знакомых с уроком «Массивы для начинающих».

Итак, в проекте существует массив с данными, из которого вы устали получать значения указывая координаты. Теперь для получения значений, вместо координат мы будем использовать названия столбцов и строк.

На ум приходит нечто подобное: Array.At(Хомяк-ниндзя, Ловкость)

Просто так взять и получить ловкость хомяка-ниндзя у нас не получится. Нам нужно найти X ячейки в которой значение «Хомяк-ниндзя» и Y ячейки в которой «Ловкость». Вернее, нам надо, чтобы программа сама это определяла.

Найти Х столбца, зная только его название, нам поможет выражение IndexOf("Хомяк-ниндзя"). Чтобы выражение сработало, названия персонажей должны быть в самой первой строке массива.

Мы уже имеем: Array.At(IndexOf("Хомяк-ниндзя"), Ловкость).

Попробуйте вставить вместо слова «Ловкость» числовую Y координату, например 2. Напоминаю, в массиве строки/столбцы нумеруются с нуля. Попробуйте вывести значение в текстовый объект.

Если видите ожидаемое значение, идём дальше, нет — ищите ошибку.

Пример ниже:

Найти Y ячейки со словом «Ловкость» нам поможет связка For each XY element с подсобытием Current Value="Ловкость"

Условие For each XY element перебирает все ячейки (в первом Z-уровне).

Условие Current Value проверяет перебираемые ячейки на содержимое. В тот момент, когда программа «наткнётся» на «Ловкость» у нас появляется возможность получить Y этой ячейки с помощью выражения Cur.Y

Всё, что нам нужно:

Теперь в текстовом объекте вы получите значение ловкости хомяка-ниндзя.

В принципе это всё.

Пример использования

В массиве я храню характеристики для противников, и переходя на новую сцену я сталкиваюсь с одним из них. С каким — известно заранее и записывается в переменную. Её я использую в выражениях.

Для наглядности я создал одноимённые глобальные переменные для характеристик, в них будут заданы значения из массива.

Мы не просто так создавали подсобытие для Current Value, в каждом таком подсобытии происходит проверка на содержимое ячейки. И присвоение переменным значений из массива.

Если я добавлю новую характеристику, достаточно будет скопировать подсобытие и изменить слово, на которое будет ориентироваться алгоритм при переборе.

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

Спасибо за внимание.

.CAPX
  • 4 Comments

  • Order by
Want to leave a comment? Login or Register an account!
  • На самом деле спасибо за хороший тутор. После Unity конечно вроде все легко, а другой стороны нифига не понятно. Кодом написать три минуты, но тут так сложно выглядит ))

  • System.linq я так понимаю нет )))))

  • Но почему такие сложности? Сама задумка возможна в реализации, но я считаю что минусы перевешивают плюсы.

    Плюсы:

    -не нужно запоминать координаты массива

    Минусы:

    -удар по производительности из-за циклов, которые проходят много лишних элементов, при получении значений из массива

    -усложнение читаемости кода.

    Как по мне, лучше писать документацию к проекту, присваивать различным сущностям локальный id. То, что описано в статье, в принципе, работать будет, но это явно не Best Practices.

  • О.о а что списков нет? и вызова из списка значений? ну навг такие сложности