Pull to refresh
0
0
Акулов Александр @Djonny_D

Unity3d Developer(C#)

Send message
В последнем примере массив _writers не объявлен.
Лекция очень интересная и наполнена верными рассуждениями. Спасибо за ссылку!) P.S. Ну-ка, быстро за разработку!)
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 Мб. Смотрится хорошо, все работает, как надо.
Да, это упростило бы задачу, если бы не концепция дизайна игры.
На счет игры, было бы очень интересно посмотреть, как вы это реализовали)
Про атласы вопрос заставил врасплох, раньше не приходилось с ними работать( к сожалению), но на скорую руку собрал атлас из стран. И да, вы правы, схема ломается. Данный метод работает только, если текстурки отделены друг от друга.
С шейдерами тоже пока углубленно не сталкивался, слишком зелен для этого.

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity