#mopsicus: заметки с тегом интерфейс https://mopsicus.ru/tags/interface/ об играх, разработке на Unity и личном опыте Игорь Лопатин ru E2 (v3572; Aegea) Игорь Лопатин об играх, разработке на Unity и личном опыте Градиентный текст в Unity 205 https://mopsicus.ru/all/full-text-gradient-tmp-unity/ Tue, 12 May 2020 15:48:53 +0300 Игорь Лопатин https://mopsicus.ru/all/full-text-gradient-tmp-unity/ <p>В пакете TextMeshPro уже есть встроенная градиентная заливка, но для моей задачи она не совсем подходила, потому что работает для каждого символа отдельно. Выглядит это так:</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Градиент для каждой буквы</h3><h4 style="display: none;" itemprop="description">Градиент для каждой буквы</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/gradient-before-character.png" width="512" height="128" alt="Градиент для каждой буквы" /> </div> <p>Пришлось написать небольшой скрипт, который вешается на текстовый компонент, берёт цвета градиента из свойств и применяет его для всего текста. Стало выглядеть так:</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Градиент для всего текста</h3><h4 style="display: none;" itemprop="description">Градиент для всего текста</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/gradient-after-full.png" width="512" height="128" alt="Градиент для всего текста" /> </div> <p>Принцип простой: разбиваем градиент для количество букв и потом по порядку применяем для каждой буквы свой диапазон.</p> <p><a href="https://gist.github.com/mopsicus/9d344451ca614d7e9937bc0c6da2b21d">Исходник</a></p> <p class="foot">Теперь будет гуглится по <i>full text gradient unity</i> :)</p> Анимации в UX 180 https://mopsicus.ru/all/animation-ux-guide/ Wed, 02 Oct 2019 11:06:56 +0300 Игорь Лопатин https://mopsicus.ru/all/animation-ux-guide/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/animation-in-app-guide.gif" width="1920" height="960" alt="" /> </div> <p>Отличная статья про <a href="https://ux.pub/polnoe-rukovodstvo-po-pravilnomu-ispolzovaniyu-animatsii-v-ux">использование анимаций в UX</a>. Просто и понятно. Примеры того, как делать не надо. В общем, однозначно в закладки.</p> <p>В догонку, есть старый <a href="https://easings.net/ru">сайтик с примерами функций плавности (easing)</a>.</p> Полезные ассеты и расширения #4 148 https://mopsicus.ru/all/assets-list-4/ Wed, 27 Feb 2019 10:51:48 +0300 Игорь Лопатин https://mopsicus.ru/all/assets-list-4/ <h2><a href="https://github.com/mminer/hierarchy-icons">Hierarchy Icons</a></h2> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/heirarchy-icons-asset.png" width="660" height="466" alt="" /> </div> <p>Позволяет быстро оценить и увидеть какие типы объектов находятся у вас на сцене и как они расположены в иерархии. Не нужно каждый раз смотреть в инспектор.</p> <h2><a href="https://github.com/mminer/selection-history-navigator">Selection History Navigator</a></h2> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/selection-history-asset.png" width="2048" height="1280" alt="" /> </div> <p>Интересный ассет от автора предыдущего — позволяет быстро перемещаться по истории выделенных объектов. Есть хоткеи для Mac и Windows.</p> <h2><a href="https://github.com/mob-sakai/SoftMaskForUGUI">SoftMaskForUGUI</a></h2> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/soft-mask-asset.png" width="866" height="289" alt="" /> </div> <p>Да, снова «мягкая» альфа маска для UI :) Но этот бесплатный ассет примечателен тем, что <a href="https://mopsicus.ru/all/soft-alpha-mask-for-ui/">работает внутри стандартной маски</a> и поддерживает TextMeshPro.</p> <h2><a href="https://github.com/Unity-Technologies/ZombieObjectDetector">ZombieObjectDetector</a></h2> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/zombie-detector.png" width="548" height="277" alt="" /> </div> <p>Ассет от Unity, позволяет диагностировать сцену и находить «зомби-объекты», которые где-то не очистились, зависли и не используются. Лог пишется в отдельный файл, который потом можно изучить.</p> <h2><a href="https://assetstore.unity.com/packages/tools/gui/lunar-mobile-console-free-82881">Luna console free</a></h2> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/luna-console-asset.jpg" width="270" height="480" alt="" /> </div> <p>Неплохой ассет мобильной консоли для дебага непосредственно на устройстве. Есть поиск, фильтры, копирование в буфер и отправка на почту, <a href="https://github.com/SpaceMadness/lunar-unity-console">исходный код</a> открыт.</p> Обновил Infinite Scroll 128 https://mopsicus.ru/all/update-infinite-scroll/ Fri, 07 Sep 2018 15:00:47 +0300 Игорь Лопатин https://mopsicus.ru/all/update-infinite-scroll/ <p>Был у меня старый скрипт для <a href="https://mopsicus.ru/all/infinity-scroll-unity/">бесконечных списков в Unity</a>. Но там было одно ограничение — ячейки должны были быть одной высоты. Но сейчас это стало необходимо, поэтому пришлось переписать скрипт.</p> <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/cUkDoX_AR2U" frameborder="0" allowfullscreen></iframe></div></div> <p>Теперь все ячейки могут быть любой высоты! Работает также быстро и с помощью одного скрипта.</p> <p><a href="https://github.com/mopsicus/infinite-scroll-unity">Ссылка на Github</a></p> Двойной слайдер на Unity 123 https://mopsicus.ru/all/unity-twin-dual-slider/ Tue, 07 Aug 2018 14:25:59 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-twin-dual-slider/ <p>Понадобилось тут сделать двойной слайдер... И я не придумал ничего проще, чем использовать уже имеющиеся слайдеры, просто объединив два в один :)</p> <p>Получилось как-то так:</p> <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/bz4ts58xugg" frameborder="0" allowfullscreen></iframe></div></div> <p>Можно настраивать как и обычные слайдеры, также есть опция ограничения между ползунками, ну и выбор цвета, картинки для заполнителя между ними.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/twinslider-script.png" width="561" height="180" alt="" /> <div class="e2-text-caption">Скрипт</div> </div> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/twinslider-structure.png" width="305" height="144" alt="" /> <div class="e2-text-caption">Структура префаба</div> </div> <p><a href="https://github.com/mopsicus/unity-twin-slider">Исходники на Github</a></p> Unity Mobile Input 113 https://mopsicus.ru/all/unity-mobile-input-plugin/ Tue, 10 Apr 2018 11:31:43 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-mobile-input-plugin/ <p>Выложил на Github плагин нативного ввода для мобильных устройств. Это небольшая надстройка над стандартным Unity InputField UI. Работает на iOS и Android.</p> <p>Зачем он нужен:</p> <ol start="1"> <li>Нативное поле ввода и клавиатура</li> <li>Отсутствует раздражающее дополнительное поле над клавиатурой в Android</li> <li>Для iOS можно добавить кнопку «Готово»</li> <li>Настройка кнопки Return для клавиатуры: стандартная, далее, готово, поиск</li> <li>Для работы нужно просто повестить скрипт <b>MobileInput</b> на родной InputField UI</li> </ol> <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/181jrTj2Upg" frameborder="0" allowfullscreen></iframe></div></div> <p>До этого, было <a href="https://mopsicus.ru/all/hide-mobile-input-android-unity/">временное решение</a>, которое не обладало необходимыми опциями, да и ошибки были. Собственно, на то оно и временное :) Но в Unity до сих пор нет таких возможностей для ввода, поэтому пришлось сделать такой плагин.</p> <p class="foot">В моей версии исправлены ошибки и отрефакторен почти весь код от старого и неподдерживаемого плагина <a href="https://github.com/kmbang/UnityNativeEdit">UnityNativeEdit</a>.</p> <p><a href="https://github.com/mopsicus/UnityMobileInput">Исходники на Github</a></p> Автоподстановка полей в UI 75 https://mopsicus.ru/all/unity-ui-autoreferencer/ Fri, 20 Oct 2017 00:26:36 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-ui-autoreferencer/ <p>Нашёл интересное решение, которое сохранит дорогое время разработки, взяв на себя рутинные операции по присвоению объектов со сцены полям класса. Как-то так.</p> <p class="lead">Например: вы сделали новый объект интерфейса, создали для него класс, добавили соответствующие поля и потом ручками в инспекторе Unity присвоили текстовое поле к <i>Text</i> и кнопку к <i>Button</i>.</p> <p>А если таких полей 10-15? И окошек столько же... Я думаю мысль понятна.</p> <p>.lead Вот как раз для таких дел этот скрипт и есть. Только делает он всё сам. Работает это так:</p> <pre class="e2-text-code"><code class="">using UnityEngine; using UnityEngine.UI; public class DialogWindow : AutoReferencer&lt;DialogWindow&gt; {    public Text DialogLabel;    public Button ConfirmButton; }</code></pre><div class="e2-text-picture"> <div class="fotorama" data-width="676" data-ratio="5.044776119403"> <img src="https://mopsicus.ru/pictures/unity-ui-autoref-1.png" width="676" height="134" alt="" /> <img src="https://mopsicus.ru/pictures/unity-ui-autoref-2.png" width="772" height="202" alt="" /> </div> <div class="e2-text-caption">Главное, чтобы названия полей и имена объектов совпадали. И типы соответственно.</div> </div> <p>Ну и сам скрипт. Конечно, вряд ли есть возможность использовать его везде — всё-таки архитектура приложения у всех отличается, однако, полезность какая-то в нём есть.</p> <pre class="e2-text-code"><code class="">using System.Linq; using UnityEngine; public class AutoReferencer&lt;T&gt; : MonoBehaviour where T : AutoReferencer&lt;T&gt; {    #if UNITY_EDITOR    // Этот метод вызывается один раз, когда мы добавляем компонент на объект    protected new virtual void Reset()    {        // Магия рефлексии        // Для каждого поля в классе/компоненте, мы ищем только пустые или null        foreach (var field in typeof(T).GetFields().Where(field =&gt; field.GetValue(this) == null))        {            // Теперь ищем объект с таким же именем            Transform obj;            if (transform.name == field.Name)            {                obj = transform;            }            else            {                obj = transform.Find(field.Name); // Или нужно сделать рекурсию, чтобы пойти глубже по иерархии            }            // Если находим объект с таким же именем как и поле - пытаемся присвоить его к этому полю            if (obj!=null)            {                field.SetValue(this, obj.GetComponent(field.FieldType));            }        }    }    #endif }</code></pre><p><a href="http://blog.theknightsofunity.com/optimize-part-1/">Подглядел</a> на The Knights of Unity ;)</p> Emoji в Unity https://mopsicus.ru/all/emoji-in-unity/ https://mopsicus.ru/all/emoji-in-unity/ Tue, 07 Feb 2017 11:35:17 +0300 Игорь Лопатин https://mopsicus.ru/all/emoji-in-unity/ <p><i>Обновлено 09.11.2021</i><br /> <i>Можно использовать <a href="https://forum.unity.com/threads/full-emoji-support-api-emoji-sequen.660310/#post-4420162">готовый пакет для работы с эмоджи</a>. Отличие в том, что не нужно создавать шрифт, спрайты будут браться из атласа.</i></p> <p>Как добавить поддержку эмоджи в Unity? К сожалению, решения из коробки нет. Но есть самый лучший ассет для работы с текстом <a href="http://u3d.as/7CF">Text Mesh Pro</a>. <s>Да, он не дешевый, но он этого стоит. Может когда-нибудь Unity его купит, и это будет стандартным решением, как они сделали с <a href="http://u3d.as/GGE">Anima2D</a></s>.</p> <p>В версии TMP, которая скоро должна пойти в релиз, разработчик добавил поддержку <b>Emoji</b>. Точнее, можно делать свои атласы, юникод эмоджи будет автоматически заменяться на картинку. Чтобы были доступны все эмоджи, нужен большой атлас. Я использовал <a href="http://emojione.com">EmojiOne</a>. Также понадобится одна отличная программа — <a href="https://www.codeandweb.com/texturepacker">TexturePacker</a> и расширение для Unity <a href="http://u3d.as/7d2">TexturePacker Importer</a>.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/texture-packer-emoji.png" width="2557" height="1369" alt="" /> </div> <ol start="1"> <li>Загружаем все эмоджи в программу и экспортируем в формат <b>Unity — Texture2D sprite sheet</b>.</li> <li>После этого меняем <i>Data format</i> на <b>JSON (Array)</b> и делаем экспорт еще раз.</li> <li>Теперь полученные три файла: Emoji.png, Emoji.json и Emoji.tpsheet загружаем в Unity.</li> </ol> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/tmp-sprite-importer.png" width="653" height="297" alt="" /> </div> <p>Осталось с помощью TMP Sprite Importer сгенерировать атлас для Text Mesh Pro. В результате, на iOS и Android можно использовать эмоджи.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/unity-screen-emoji.png" width="1490" height="1368" alt="" /> </div> Как убрать InputBox в Android над клавиатурой https://mopsicus.ru/all/hide-mobile-input-android-unity/ https://mopsicus.ru/all/hide-mobile-input-android-unity/ Fri, 30 Dec 2016 16:30:05 +0300 Игорь Лопатин https://mopsicus.ru/all/hide-mobile-input-android-unity/ <p><i>Обновлено 04.10.2018</i><br /> <i>Моя <a href="https://mopsicus.ru/all/unity-mobile-input-plugin/">версия «unity mobile input»</a> для iOS и Android.</i></p> <p>Если вы не знаете, о чем речь, то эта заметка не для вас :)</p> <p>Другие же, наверняка гуглили «unity hide mobile input». И не находили стандартного решения — потому что его нет. Все написано <a href="https://docs.unity3d.com/ScriptReference/TouchScreenKeyboard-hideInput.html">в документации</a>:</p> <blockquote> <p>Note: Android: only TouchScreenKeyboard.visible input field is supported, hence this value is always false.</p> </blockquote> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/inputfield-unity.png" width="540" height="960" alt="" /> </div> <p>Конечно, пользовательский ввод в играх нужно сводить к нулю, но бывают исключения. Ради такого исключения, чтобы избавиться от панели над клавиатурой, я сделал этот плагин.</p> <p>Идея в том, что на экран добавляется нативное невидимое поле ввода откуда потом забирается текст. Все просто. Да, это не изящное решение, а грязный хак, но он работает — верхнего поля ввода нет и появляется стандартная клавиатура Android или iOS. Если к этому добавить ассет <b>Text Mesh Pro</b>, то будут еще и эмоджи. Да, еще не видно курсора. Я думаю над этим... :)</p> <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/g2YR_NDA7i8" frameborder="0" allowfullscreen></iframe></div></div> <p>Если есть более красивое решение — киньте ссылку :)</p> <p><a href="https://github.com/mopsicus/unity-keyboard-hack">Ссылка на Github</a></p> Unity UI data binding https://mopsicus.ru/all/unity-ui-data-binding/ https://mopsicus.ru/all/unity-ui-data-binding/ Wed, 21 Dec 2016 10:47:19 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-ui-data-binding/ <p>Как отделить логику от интерфейса в Unity, чтобы не получилась каша?</p> <p>Есть давно устоявшиеся паттерны и «best practices». Хотя для Unity последних не так уж и много, как например для node.js. Можно использовать эвенты, делегаты, обсерверы, вот это все, если говорить об использовании C# в Unity. Есть и <a href="http://u3d.as/baL">готовые ассеты</a> в Asset Store.</p> <p>В общем, это то, что я начал писать сам, но вовремя нашел почти готовое решение, которое меня устраивает. После небольшого допиливания будет вообще супер — библиотека для простого биндинга в Unity.</p> <p>Работает все очень просто:</p> <ol start="1"> <li>Импортируете <i>DataBind.unitypackage</i> в Unity</li> <li>Добавляете скрипт <i>DataBindContext</i> к родительскому объекту</li> <li>Добавляете скрипт <i>Bind[нужный тип]</i> к основным объектам</li> <li>Вызываете <i>dataBindContext[key] = value</i> для биндинга</li> <li>Все. Присвоили значение переменной — оно поменялось в UI Text, например.</li> </ol> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/bind-property.png" width="481" height="147" alt="" /> </div> <p>Можно связывать любые параметры, использовать готовые биндинги которые идут в пакете, можно написать свой. И все достаточно просто и не ресурсоемко.</p> <p><a href="https://github.com/paidgeek/DataBind">Ссылка на Github</a></p> <p><i>Обновление 25.01.2017</i><br /> У Leopotam «прокачанная» версия биндинга <a href="https://github.com/Leopotam/LeopotamGroupLibraryUnity/tree/master/SystemUi/DataBinding">https://github.com/Leopotam/LeopotamGroupLibraryUnity/tree/master/SystemUi/DataBinding</a></p> Использование альфа маски https://mopsicus.ru/all/soft-alpha-mask-for-ui/ https://mopsicus.ru/all/soft-alpha-mask-for-ui/ Mon, 21 Nov 2016 15:47:44 +0300 Игорь Лопатин https://mopsicus.ru/all/soft-alpha-mask-for-ui/ <p><i>Обновлено 19.10.2018</i><br /> <i>Эта маска не работает внутри стандартной маски и RectMask2D :(</i></p> <p>В Unity стандартная маска (компонент Mask) работает без альфа канала, т. е. красивые «мягкие» края сделать не получится. Особенно это актуально, если у вас маска сложной формы.</p> <p>Но тут нас спасет очень хорошая библиотека скриптов от Simon Jackson — <a href="https://bitbucket.org/UnityUIExtensions/unity-ui-extensions">Unity UI Extensions</a>. И один из скриптов из этой библиотеки как раз и позволяет делать «soft smooth ui alpha mask».</p> <p>Нужно скопировать в свой проект скрипт <b>SoftMaskScript.cs</b> и шейдер с таким же именем. И кинуть скрипт на UI Image.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/ui-soft-mask-script.png" width="551" height="289" alt="" /> </div> <p>Получим такой результат. Намного лучше чем стандартная маска.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/ui-soft-mask-result.png" width="579" height="384" alt="" /> </div> <p>Да и вообще, в этой либе много других интересных и полезных вещей, рекомендую.</p> Раскрашиваем папки в Unity https://mopsicus.ru/all/unity-rainbow-folders/ https://mopsicus.ru/all/unity-rainbow-folders/ Fri, 11 Nov 2016 14:39:30 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-rainbow-folders/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/unity-rainbow-folders.png" width="813" height="401" alt="" /> </div> <p>Просто супер расширение для редактора Unity. Позволяет назначать папкам различные цвета. Очень удобно. Рекомендую!</p> <p><a href="https://github.com/PhannGor/unity3d-rainbow-folders">https://github.com/PhannGor/unity3d-rainbow-folders</a></p> Бесконечный скроллинг в Unity https://mopsicus.ru/all/infinity-scroll-unity/ https://mopsicus.ru/all/infinity-scroll-unity/ Mon, 29 Aug 2016 11:30:29 +0300 Игорь Лопатин https://mopsicus.ru/all/infinity-scroll-unity/ <p><i>Обновлено 07.09.2018</i><br /> <i>Теперь можно использовать ячейки разной высоты!</i><br /> <i>Добавил новые демки</i></p> <p>Когда делаешь игру под мобильную платформу, пусть Android или iOS, иногда хочется использовать стандартные для этой платформы компоненты, потому что они проверены, оптимизированы и быстро работают. Например, списки. Кто делал в Unity интерфейс с большим количеством прокручивающихся элементов в Scrollrect, наверняка замечали, что после определенного количества, вся эта конструкция начинает притормаживать. Наиболее оптимально использовать т. н. <i>data driving</i> подход, когда количество видимых элементов не меняется, а данные подгружаются динамически в нужную ячейку.</p> <p>Для одного проекта понадобилось сделать списки друзей и лидеров. Количество пользователей сотни тысяч. Естественно, создавать такое количество ячеек было бы неверно. Быстрый поиск показал несколько <a href="https://www.assetstore.unity3d.com/en/#!/content/27615">рабочих вариантов</a>, но после тестов на реальных устройствах, при быстрых прокрутках лаги все равно были заметны и еще по ряду причин не подошли. Последний найденый вариант лег в основу и после доработок, отлично функционирует.</p> <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/NQQWdAd2i9c" frameborder="0" allowfullscreen></iframe></div></div> <p>Была сделана такая знакомая мобильным разработчикам функция, как <b>pull-to-refresh</b>, также, ячейки можно настраивать как угодно под ваш проект, нужное количество создается автоматически в зависимости от высоты экрана. <s>Единственное ограничение — высота ячейки не динамическая.</s></p> <p>Использовать очень легко — все делает один скрипт, вещаем его на Scrollview настраиваем параметры и коллбеки и все. Демо есть. Если будут какие-то вопросы и пожелания, не стесняйтесь писать. Удачи!</p> <p><a href="https://github.com/mopsicus/infinite-scroll-unity">Ссылка на Github</a></p> Применение материала к нескольким объектам https://mopsicus.ru/all/apply-material-multiple-objects-unity/ https://mopsicus.ru/all/apply-material-multiple-objects-unity/ Mon, 15 Aug 2016 12:48:11 +0300 Игорь Лопатин https://mopsicus.ru/all/apply-material-multiple-objects-unity/ <p>На самом деле, заголовок не полностью отображает возможности этого скрипта — изменять можно не только материал, а вообще производить над объектами какие-либо манипуляции: изменение параметров, добавление компонентов, и т. д. Нужно лишь немного изменить код.</p> <p>Суть в том, что когда сцена построена, а вам необходимо применить изменения к 30 объектам (или больше), то это может занять время. Конечно, нужно обязательно все делать через префабы, чтобы такие случаи свести к минимуму, но все же, ситуации бывают разные.</p> <pre class="e2-text-code"><code class="">using UnityEngine; using System; using UnityEditor; using UnityEngine.UI; public class AssignMaterial : ScriptableWizard { public bool isRecursively = true; public Material material; string label = &quot;Select Game Objects&quot;; GameObject[] objects; void OnWizardUpdate () { helpString = label; isValid = (material != null); } void OnWizardCreate () { objects = Selection.gameObjects; foreach (GameObject go in objects){ changeMaterial(go); } } void changeMaterial (GameObject go) { if (go.GetComponent&lt;YOUR_COMPONENT&gt; ()) { go.GetComponent&lt; YOUR_COMPONENT&gt; ().material = material; } if (isRecursively) { for (int i = 0; i &lt; go.transform.childCount; i++) { changeMaterial(go.transform.GetChild(i).gameObject); } } } [MenuItem (&quot;Custom/Assign Material&quot;, false, 4)] static void assignMaterial () { ScriptableWizard.DisplayWizard (&quot;Assign Material&quot;, typeof(AssignMaterial), &quot;Assign&quot;); } }</code></pre><p>Создав такой скрипт и положив его в папку <b>Editor</b> вы создадите свой пункт в главном меню Unity. Выбираете <b>Custom → Assign Material</b> и появляется окно применения материала. Выбираете нужный материал, а на сцене объекты к которым его применить и жмете <b>Assign</b>. Готово.</p> <p>В данном примере, я применял новый материал к компоненту <b>Image</b>.</p>