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

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

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

Я знаю что можно использовать 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);

            }
        }
 

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

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

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

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

СообщениеДобавлено: 12 июл 2018, 07:38
jetyb
В общем, как именно можно определять координаты того места на текстуре куда я тыкнул? А не координаты относительно мира

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

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

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

СообщениеДобавлено: 12 июл 2018, 07:42
1max1
jetyb писал(а):
В общем, как именно можно определять координаты того места на текстуре куда я тыкнул? А не координаты относительно мира

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

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


Вот блин, а я велосипеды изобретал))

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

СообщениеДобавлено: 12 июл 2018, 08:10
Friend123
Я сделал еще проще, нашел на известном варезе сей ассет и дело в шляпе: https://assetstore.unity.com/packages/templates/systems/world-map-strategy-kit-55121

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

СообщениеДобавлено: 12 июл 2018, 08:28
1max1
Ну это уже слишком круто)

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

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

Этот пак получше выглядит https://assetstore.unity.com/packages/t ... tion-41890
Если поискать, то там есть и более простые и более дешевые или бесплатные версии.

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

СообщениеДобавлено: 12 июл 2018, 16:59
SuxoiKorm
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 редакторе?
Про вторые координаты не совсем понял, как и куда записать?