Гексовое поле

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

Гексовое поле

Сообщение Kroid 24 авг 2011, 22:03

Приветствую, форум. Я хочу сделать такую сцену: поле боя, состоит из клеток(гексов). На одном из гексов игрок. При нажатии мышкой на любой из гексов герой перемещается к нему.

В общих чертах, я буду делать так:
создаю модель гекса (например, в 3ds max);
делаю на сцене terrain, поверх него укладываю модели гексов, обзываю каждый гекс по-разному;
пишу скрипт с логикой вида: "Щелкнул мышкой, узнал координаты, получил название гекса, заставил героя встать на него".

Хотелось бы узнать, можно ли сделать подобное попроще (а то кажется, что велосипед изобретаю)? И можно ли, вместо того, чтобы прокладывать гексы поверх террайна(как асфальт поверх земли), сам terrain разбить на клетки?
Kroid
UNец
 
Сообщения: 8
Зарегистрирован: 22 авг 2011, 09:27

Re: Гексовое поле

Сообщение WereVarg 24 авг 2011, 23:39

второй вопрос: смешать текстуру с гексами поверх текстуры террейна простым проецированием сверху


первый: по идее от гексов которые могут быть не видимы тебе нужны только х и у и в принципе их координаты определены раз и навсегда
хоть в массив

вот и анализируй ближе к которой игрок кликнул
Merry Cubes HD Magic Sorter Playroom - Lessons with Max
Аватара пользователя
WereVarg
UNIт
 
Сообщения: 88
Зарегистрирован: 12 авг 2011, 01:11

Re: Гексовое поле

Сообщение Kroid 25 авг 2011, 00:38

WereVarg писал(а):второй вопрос: смешать текстуру с гексами поверх текстуры террейна простым проецированием сверху


Даже не задумывался о таком способе :) Тогда в догонку вопрос:

Например мне понадобится изменять цвет гекса(если наведу на него мышь) или еще что-нибудь с ним делать. С отдельными объектами-шестиугольниками это можно сделать( например, сделать 3 вида текстур:доступный для хода, недоступный и наведенный мышкой; и при изменения состояния накладывать соответствующую текстуру).
Однако, если я покрою весь терейн одной текстурой, я больше не смогу изменить какой-нибудь отдельный гекс, верно?
Kroid
UNец
 
Сообщения: 8
Зарегистрирован: 22 авг 2011, 09:27

Re: Гексовое поле

Сообщение ArtUni3d 25 авг 2011, 01:01

Вы просто создайте не 3 текстуры, а 3 материала. И меняйте не текстуру, а сам материал гекса.
Аватара пользователя
ArtUni3d
UNITрон
 
Сообщения: 249
Зарегистрирован: 27 апр 2011, 22:12

Re: Гексовое поле

Сообщение WereVarg 25 авг 2011, 13:14

Kroid писал(а):Однако, если я покрою весь терейн одной текстурой, я больше не смогу изменить какой-нибудь отдельный гекс, верно?

теоретически можно умело манипулировать несколькими материалами/текстурами и использовать между ними маску
белый хекс на черном фоне

смещая UV маски можно попробовать добиться эффекта
Merry Cubes HD Magic Sorter Playroom - Lessons with Max
Аватара пользователя
WereVarg
UNIт
 
Сообщения: 88
Зарегистрирован: 12 авг 2011, 01:11

Re: Гексовое поле

Сообщение Kroid 25 авг 2011, 16:44

Простейшую гексовую карту собрал (решил наложить гексы на терррайн), заставил монстра (куб) поворачивать и перемещаться с одного гекса на другой. И, куда ж без этого, опять проблема возникла.

по идее от гексов которые могут быть не видимы тебе нужны только х и у и в принципе их координаты определены раз и навсегда
хоть в массив

вот и анализируй ближе к которой игрок кликнул


Гекс отличается от, скажем, круга тем, что не все точки гекса (ближе к периметру) равноудалены друг от друга.

Например, игрок щелкнул на гексе мышкой. Я считываю координаты клика, ищу центр ближайшего гекса и выделяю его. Проблема в том, что вершина гекса находится от центра дальше, чем ближайшая точка другого гекса. Соответственно, если игрок будет нажимать "абы-как" и тыкать на самый край гекса, будут ошибки, путаница и куча проблем.

Заносить в базу всевозможные координаты точек для каждого гекса (а не его центра) - верх идиотизма получится. А как делать по-другому - не могу понять. Существует ли функция, которая ищет любой объект на сцене в заданных координатах? Как вообще в играх выделение объекта делается?

Изображение
вот рисунок в качестве примера. Если искать ближайший к точке клика центр гекса, то будет неправильный результат. Например, эти 2 точки клика находятся на примерно одинаковом расстоянии от центра нижнего гекса.
Kroid
UNец
 
Сообщения: 8
Зарегистрирован: 22 авг 2011, 09:27

Re: Гексовое поле

Сообщение Order 26 авг 2011, 04:15

находи по декартовым координатам мышки, координаты в гексе, бери гекс по радиусу от этой точки.
Я так делал.
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Гексовое поле

Сообщение waruiyume 26 авг 2011, 05:16

А если представить 6-угольник как 6 треугольников?
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Гексовое поле

Сообщение Kroid 26 авг 2011, 08:50

Спасибо всем за советы. Сделал так(вдруг кому еще пригодится):
Запихнул гекс в префаб, добавил туда скрипт:
Синтаксис:
Используется csharp
void OnMouseDown() {
        geks = gameObject.transform;
        enemy = GameObject.Find("Enemy").transform;
}
 

Теперь через geks.position я могу узнать координаты центра гекса, на который кликнул мышью. Через enemy.position узнаем координаты игрока и ищем ближайшие координаты центра гекса. Осталось написать алгоритмы: поиска пути и передвижения игрока на соседнюю клетку.
Kroid
UNец
 
Сообщения: 8
Зарегистрирован: 22 авг 2011, 09:27

Re: Гексовое поле

Сообщение ArtUni3d 26 авг 2011, 13:24

Еще можно сделать гексы триггер колайдером и сделать еще одиин коллайдер в координатах мыши, который будет наступать на гексы.
Аватара пользователя
ArtUni3d
UNITрон
 
Сообщения: 249
Зарегистрирован: 27 апр 2011, 22:12


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

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

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