1. Просто страны, к сожалению, нарисованы немного коряво, приходится подгонять размеры по реальной карте. Для Image не нужно менять Scale, на сколько я знаю если использовать SpriteRenderer и разный scale, то автоматический батчинг работать не будет, поправьте меня, если я не прав.
3-4. Вы правы, использование PointerClick дает много возможностей, однако, мне в данной задаче нужно только нажатие.
5. Спасибо, буду изучать.
Как мне кажется Python набирает серьезные обороты, особенно в сфере тестирования Веб-сервисов. Он прост, понятен. Отталкиваясь от него легко можно перейти на любой другой язык ООП. Для изучения, он прекрасен.
Спасибо, за ваши замечания. Я понимаю, что у меня получилось не превосходное решение, однако учитывая мой опыт и сжатые сроки, это оптимальное решение.
Я же все таки, надеюсь, что статья кому-то, да пригодиться, хотя бы в плане ознакомления.
1. Канвас использовал, как удобный инструмент для соединения стран в одну карту.
2. Редактировать я замучаюсь каждый раз. Мне проще пару строк кода написать.
3-4. Судя по вашей логике, чем вам тогда OnMouseDown не угодил?
5. Согласен, шейдер бы здесь помог, к сожалению я их еще не познал. Надеюсь, что вы посоветуете некоторые источники по их изучению.
1. Как я думаю, не обязательно это должно быть верным, если есть Texture read/write значит это зачем то нужно, и это нужно использовать. Пожалуйста, разъясните, почему и как это делает невозможным, сжимать текстуры, я сжал атлас стран до 2 Мб, при этом они имеют презентабельный вид, даже лучше чем раньше, до написания статьи. Да и на производительность, я не заметил, что сказывается. Если имеется ввиду что нельзя применить формат Compressed, то да я с вами согласен, нельзя. Но для моего случая это оказалось не критичным.
2.Как я уже говорил в сторону шейдеров, возможности посмотреть не было, и да по примерам, это действительно было бы лучше. Но я привел все это как пример, мало ли кому пригодиться.
В общем, на счет атласов, провел я не большое исследование, и сразу хочу сказать огромное спасибо, что направили в эту сторону! Уменьшились DrawCalls, да и памяти текстуры стали меньше кушать. Раньше я подозревал, что атласы использовать мудро, но слабо представлял почему.
На счет работы схемы, нужно дописать пару строк, что бы все работало так же прекрасно, а именно:
private bool IsAlphaPoint(PointerEventData eventData)
{
Vector2 localCursor;
RectTransformUtility.ScreenPointToLocalPointInRectangle(GetComponent<RectTransform>(), eventData.position, eventData.pressEventCamera, out localCursor);
Rect r = RectTransformUtility.PixelAdjustRect(GetComponent<RectTransform>(), GetComponent<Canvas>());
Vector2 ll = new Vector2(localCursor.x - r.x, localCursor.y - r.y);
//Найдем пиксель где начинается спрайт нужной страны в атласе - локальный (0,0)
Vector2 pixelStart=new Vector2(CountryImg.sprite.texture.width*CountryImg.sprite.uv[2].x,
CountryImg.sprite.texture.height*CountryImg.sprite.uv[2].y);
int x = (int)(ll.x / r.height * CountryImg.sprite.textureRect.height );
int y = (int)(ll.y / r.height * CountryImg.sprite.textureRect.height);
//вычесляем координаты относительно атласа
pixelStart+=new Vector2(x,y);
print("itog:" + pixelStart.x + " " + pixelStart.y);
return IsAlphaPoint((int)pixelStart.x, (int)pixelStart.y);
}
Правда есть один нюанс касательно чтения пикселей из атласа. Если формат атласа используется Compressed(как я понял все разновидности) то будет возникать такие исключения:
x == 0 && y == 0 && blockWidth == dataWidth && blockHeight == dataHeight
UnityEngine.Texture2D:GetPixel(Int32, Int32)
Следствием чего работать не будет (ну еще бы оно с ошибками работало…).
Это очень печальное ограничение, текстура с форматом ARGB32 например будет занимать 16 Мб…а в памяти и того больше.
Но благо есть ARGB16… в общем поджал атлас до 2 Мб. Смотрится хорошо, все работает, как надо.
На счет игры, было бы очень интересно посмотреть, как вы это реализовали)
Про атласы вопрос заставил врасплох, раньше не приходилось с ними работать( к сожалению), но на скорую руку собрал атлас из стран. И да, вы правы, схема ломается. Данный метод работает только, если текстурки отделены друг от друга.
С шейдерами тоже пока углубленно не сталкивался, слишком зелен для этого.
3-4. Вы правы, использование PointerClick дает много возможностей, однако, мне в данной задаче нужно только нажатие.
5. Спасибо, буду изучать.
Я же все таки, надеюсь, что статья кому-то, да пригодиться, хотя бы в плане ознакомления.
2. Редактировать я замучаюсь каждый раз. Мне проще пару строк кода написать.
3-4. Судя по вашей логике, чем вам тогда OnMouseDown не угодил?
5. Согласен, шейдер бы здесь помог, к сожалению я их еще не познал. Надеюсь, что вы посоветуете некоторые источники по их изучению.
2.Как я уже говорил в сторону шейдеров, возможности посмотреть не было, и да по примерам, это действительно было бы лучше. Но я привел все это как пример, мало ли кому пригодиться.
На счет работы схемы, нужно дописать пару строк, что бы все работало так же прекрасно, а именно:
Правда есть один нюанс касательно чтения пикселей из атласа. Если формат атласа используется Compressed(как я понял все разновидности) то будет возникать такие исключения:
Следствием чего работать не будет (
ну еще бы оно с ошибками работало…).Это очень печальное ограничение, текстура с форматом ARGB32 например будет занимать 16 Мб…а в памяти и того больше.
Но благо есть ARGB16… в общем поджал атлас до 2 Мб. Смотрится хорошо, все работает, как надо.
Про атласы вопрос заставил врасплох, раньше не приходилось с ними работать( к сожалению), но на скорую руку собрал атлас из стран. И да, вы правы, схема ломается. Данный метод работает только, если текстурки отделены друг от друга.
С шейдерами тоже пока углубленно не сталкивался, слишком зелен для этого.