Карта с нажатием на страны

Общие вопросы о Unity3D

Карта с нажатием на страны

Сообщение SuxoiKorm 11 июл 2018, 23:11

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

Я знаю что можно использовать texture.GetPixel и получить цвета нужного пикселя, но у меня не получается правильно определить координаты того места куда я тыкнул. На данный момент весь код выглядит так, но он не работает
Синтаксис:
Используется csharp
if (Input.GetMouseButton(0))
        {
            Vector2 curPointV2 = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y);
            RaycastHit2D hit = Physics2D.Raycast(curPointV2, Vector2.zero, Mathf.Infinity);
            if (hit)
            {
                GameObject hitedObj = hit.collider.gameObject;
                Texture2D texture = hitedObj.GetComponent<SpriteRenderer>().sprite.texture;

                Debug.Log((int)curPointV2.x + " " + (int)curPointV2.y);

                Color pixelColor = texture.GetPixel((int)curPointV2.x, (int)curPointV2.y);

                //Debug.Log(texture.width +" " + texture.height);

                Debug.Log(pixelColor.r + " " + pixelColor.b + " " + pixelColor.g);

            }
        }
 

В общем, как именно можно определять координаты того места на текстуре куда я тыкнул? А не координаты относительно мира
SuxoiKorm
UNец
 
Сообщения: 20
Зарегистрирован: 11 фев 2012, 16:49

Re: Карта с нажатием на страны

Сообщение 1max1 12 июл 2018, 06:47

Делал для другого парня, ему надо было дырки в спрайте делать, но думаю тебе тоже подойдет, надеюсь разберешься)
https://mega.nz/#!7d4i1RCQ!zyud9tBCQcJa ... DwFqOZ3qhg
Аватара пользователя
1max1
Адепт
 
Сообщения: 1282
Зарегистрирован: 28 июн 2017, 10:51

Re: Карта с нажатием на страны

Сообщение jetyb 12 июл 2018, 07:38

В общем, как именно можно определять координаты того места на текстуре куда я тыкнул? А не координаты относительно мира

См Physics.Raycast, RaycastHit
Натянуть на карту коллайдер, простой рэйкастинг будет возвращать
2 текстурных координаты точки, индекс треугольника меша, барицентрическую координату. Этого вполне достаточно.

Можно даже не определять страну по уникальному цвету текстуры, а писать индекс страны во вторые uv координаты вершин страны.
jetyb
Адепт
 
Сообщения: 1334
Зарегистрирован: 31 окт 2011, 17:21

Re: Карта с нажатием на страны

Сообщение 1max1 12 июл 2018, 07:42

jetyb писал(а):
В общем, как именно можно определять координаты того места на текстуре куда я тыкнул? А не координаты относительно мира

См Physics.Raycast, RaycastHit
Натянуть на карту коллайдер, простой рэйкастинг будет возвращать
2 текстурных координаты точки, индекс треугольника меша, барицентрическую координату. Этого вполне достаточно.

Можно даже не определять страну по уникальному цвету текстуры, а писать индекс страны во вторые uv координаты вершин страны.


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

Re: Карта с нажатием на страны

Сообщение Friend123 12 июл 2018, 08:10

Я сделал еще проще, нашел на известном варезе сей ассет и дело в шляпе: https://assetstore.unity.com/packages/templates/systems/world-map-strategy-kit-55121
Аватара пользователя
Friend123
UNITрон
 
Сообщения: 320
Зарегистрирован: 26 фев 2012, 22:12
Откуда: Тверь
  • ICQ

Re: Карта с нажатием на страны

Сообщение 1max1 12 июл 2018, 08:28

Ну это уже слишком круто)
Аватара пользователя
1max1
Адепт
 
Сообщения: 1282
Зарегистрирован: 28 июн 2017, 10:51

Re: Карта с нажатием на страны

Сообщение getAlex 12 июл 2018, 10:50

Friend123 писал(а):Я сделал еще проще, нашел на известном варезе сей ассет и дело в шляпе: https://assetstore.unity.com/packages/templates/systems/world-map-strategy-kit-55121

Этот пак получше выглядит https://assetstore.unity.com/packages/t ... tion-41890
Если поискать, то там есть и более простые и более дешевые или бесплатные версии.
getAlex
Адепт
 
Сообщения: 1693
Зарегистрирован: 10 авг 2013, 18:30

Re: Карта с нажатием на страны

Сообщение SuxoiKorm 12 июл 2018, 16:59

jetyb писал(а):
В общем, как именно можно определять координаты того места на текстуре куда я тыкнул? А не координаты относительно мира

См Physics.Raycast, RaycastHit
Натянуть на карту коллайдер, простой рэйкастинг будет возвращать
2 текстурных координаты точки, индекс треугольника меша, барицентрическую координату. Этого вполне достаточно.

Можно даже не определять страну по уникальному цвету текстуры, а писать индекс страны во вторые uv координаты вершин страны.

В общем, удалось сделать с каким то непонятными костылями вот так
Синтаксис:
Используется csharp
if (Input.GetMouseButton(0))
        {
            RaycastHit hit2;
            Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit2);
            Texture2D mapText = hit2.collider.gameObject.GetComponentInParent<SpriteRenderer>().sprite.texture;
            Vector2 pixelUV = hit2.textureCoord;

            pixelUV.x = mapText.width - (pixelUV.x * mapText.width);
            pixelUV.y = mapText.height - (pixelUV.y * mapText.height);

            Color pixelColor = mapText.GetPixel((int)pixelUV.x, (int)pixelUV.y);
            Debug.Log(255 * pixelColor.r + " " + 255 * pixelColor.g + " " + 255 * pixelColor.b);
        }

С этими мешами вообще не понятно, кое как сделал в юнити, но походу их правильно делать в каком-то 3D редакторе?
Про вторые координаты не совсем понял, как и куда записать?
SuxoiKorm
UNец
 
Сообщения: 20
Зарегистрирован: 11 фев 2012, 16:49


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10