tag:github.com,2008:https://github.com/RimuruDev/Unity-LocalizedImageBinder/releases Release notes from Unity-LocalizedImageBinder 2024-12-28T12:21:00Z tag:github.com,2008:Repository/909341564/v1.0.0.0 2024-12-28T12:23:23Z v1.0.0.0 <h1>LocalizedImageBinder</h1> <p><code>LocalizedImageBinder</code> — это компонент Unity, предназначенный для автоматизации процесса связывания <code>LocalizeSpriteEvent</code> с компонентом <code>Image</code>. Скрипт устраняет необходимость ручной настройки в инспекторе, автоматически добавляя и управляя обработчиками событий, связанными с локализацией спрайтов.</p> <h2>Основная задача</h2> <p>При использовании Unity Localization в связке с компонентами <code>Image</code> часто требуется вручную привязывать событие <code>OnUpdateAsset</code> к свойству <code>sprite</code> объекта <code>Image</code>. Это может быть трудоёмким и подверженным ошибкам процессом, особенно в проектах с большим количеством локализованных спрайтов. Этот компонент решает проблему автоматической привязки, что экономит время и снижает вероятность ошибок.</p> <h2>Особенности</h2> <ul> <li>Автоматическая привязка <code>LocalizeSpriteEvent</code> к <code>Image.sprite</code>.</li> <li>Удаление "висячих" подписок при удалении компонента.</li> <li>Работа в режиме редактора и игры.</li> <li>Гарантированное отсутствие дублирующихся подписок.</li> <li>Простая интеграция с существующими проектами.</li> </ul> <h2>Установка</h2> <ol> <li>Скопируйте скрипт <code>LocalizedImageBinder</code> в папку <code>Scripts</code> вашего Unity проекта.</li> <li>Убедитесь, что у вас установлены следующие зависимости: <ul> <li><a href="https://docs.unity3d.com/Packages/com.unity.ugui@latest" rel="nofollow">Unity UI</a>.</li> <li><a href="https://docs.unity3d.com/Packages/com.unity.localization@latest" rel="nofollow">Unity Localization</a>.</li> </ul> </li> </ol> <a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/85500556/399073099-6822d4a7-a013-4aac-822e-1fa2338db7ba.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjgyOTM2MTQsIm5iZiI6MTc2ODI5MzMxNCwicGF0aCI6Ii84NTUwMDU1Ni8zOTkwNzMwOTktNjgyMmQ0YTctYTAxMy00YWFjLTgyMmUtMWZhMjMzOGRiN2JhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjAxMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwMTEzVDA4MzUxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTEzZmUyNmUzN2QwYTVkNjU1ZjY4NmY4M2Y3ZjJmYTFmZTJkMjBiNWYzODBhZTZkNTg1OGNkMzY3NjdiNWQ1YWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.lyvZND6rFtg73jRkBBS10Anv6GMNcTKsVrxP11tN_Ug"><img width="779" alt="image" src="https://private-user-images.githubusercontent.com/85500556/399073099-6822d4a7-a013-4aac-822e-1fa2338db7ba.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjgyOTM2MTQsIm5iZiI6MTc2ODI5MzMxNCwicGF0aCI6Ii84NTUwMDU1Ni8zOTkwNzMwOTktNjgyMmQ0YTctYTAxMy00YWFjLTgyMmUtMWZhMjMzOGRiN2JhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjAxMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwMTEzVDA4MzUxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTEzZmUyNmUzN2QwYTVkNjU1ZjY4NmY4M2Y3ZjJmYTFmZTJkMjBiNWYzODBhZTZkNTg1OGNkMzY3NjdiNWQ1YWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.lyvZND6rFtg73jRkBBS10Anv6GMNcTKsVrxP11tN_Ug" content-type-secured-asset="image/png" style="max-width: 100%;"></a> <a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/85500556/399079038-8a3b6141-c9ce-40ac-a480-185931e318c3.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjgyOTM2MTQsIm5iZiI6MTc2ODI5MzMxNCwicGF0aCI6Ii84NTUwMDU1Ni8zOTkwNzkwMzgtOGEzYjYxNDEtYzljZS00MGFjLWE0ODAtMTg1OTMxZTMxOGMzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjAxMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwMTEzVDA4MzUxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYyNDQ1N2Q4NmVhNGMwMWQ5MDM3MmJjNDEwNDQ1MzAyYzc1NjBhM2JhN2VkYjIxNTk2ODQ3YzM1ODNhOTJjYzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.YycIbIVxfAQ78LWu5KFakQUvLAEsQ_4-vsPT7yKvObc"><img width="760" alt="image" src="https://private-user-images.githubusercontent.com/85500556/399079038-8a3b6141-c9ce-40ac-a480-185931e318c3.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjgyOTM2MTQsIm5iZiI6MTc2ODI5MzMxNCwicGF0aCI6Ii84NTUwMDU1Ni8zOTkwNzkwMzgtOGEzYjYxNDEtYzljZS00MGFjLWE0ODAtMTg1OTMxZTMxOGMzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjAxMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwMTEzVDA4MzUxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYyNDQ1N2Q4NmVhNGMwMWQ5MDM3MmJjNDEwNDQ1MzAyYzc1NjBhM2JhN2VkYjIxNTk2ODQ3YzM1ODNhOTJjYzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.YycIbIVxfAQ78LWu5KFakQUvLAEsQ_4-vsPT7yKvObc" content-type-secured-asset="image/png" style="max-width: 100%;"></a> <hr> <h2>Использование</h2> <ol> <li>Добавьте компонент <code>LocalizedImageBinder</code> на объект с компонентом <code>Image</code>.</li> <li>Убедитесь, что на том же объекте уже присутствует компонент <code>LocalizeSpriteEvent</code>. Если его нет, Unity автоматически добавит его благодаря атрибуту <code>[RequireComponent]</code>.</li> <li>В инспекторе настройте таблицу и записи локализации для компонента <code>LocalizeSpriteEvent</code>.</li> </ol> <hr> <h2>Пример :D</h2> <h3>До использования</h3> <p>Вручную настройте <code>LocalizeSpriteEvent</code>:</p> <ol> <li>Добавьте компонент <code>LocalizeSpriteEvent</code>.</li> <li>Вручную свяжите событие <code>OnUpdateAsset</code> с <code>Image.sprite</code>.</li> <li>Убедитесь, что подписка корректно настроена.</li> </ol> <h3>После использования</h3> <p>Просто добавьте компонент <code>LocalizedImageBinder</code> на объект, и всё произойдёт автоматически:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="[AddComponentMenu(&quot;0x_/Localization/LocalizedImageBinder&quot;)]"><pre><span class="pl-kos">[</span><span class="pl-s1">AddComponentMenu</span><span class="pl-kos">(</span><span class="pl-s">"0x_/Localization/LocalizedImageBinder"</span><span class="pl-kos">)</span><span class="pl-kos">]</span></pre></div> <h3>Результат</h3> <ul> <li><code>OnUpdateAsset</code> автоматически настроено на обновление <code>Image.sprite</code>.</li> <li>Подписка удаляется при удалении компонента.</li> </ul> <a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/85500556/399079149-02ba6d51-bc10-4b07-b84d-c82182512cb8.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjgyOTM2MTQsIm5iZiI6MTc2ODI5MzMxNCwicGF0aCI6Ii84NTUwMDU1Ni8zOTkwNzkxNDktMDJiYTZkNTEtYmMxMC00YjA3LWI4NGQtYzgyMTgyNTEyY2I4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjAxMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwMTEzVDA4MzUxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYwMTRlNDA0MWQ3NDkzOWEzNzRkNDRjOGFmZDE1N2IzMGY3MzFlNWE5MDQwZTQ0NTE4ZWIzMzg0N2MyNjRhM2ImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.lUJ2apk5c0UM_Gqag59QxZShrvbVGc0ZTIetGzgsjlk"><img width="522" alt="image" src="https://private-user-images.githubusercontent.com/85500556/399079149-02ba6d51-bc10-4b07-b84d-c82182512cb8.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjgyOTM2MTQsIm5iZiI6MTc2ODI5MzMxNCwicGF0aCI6Ii84NTUwMDU1Ni8zOTkwNzkxNDktMDJiYTZkNTEtYmMxMC00YjA3LWI4NGQtYzgyMTgyNTEyY2I4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjAxMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwMTEzVDA4MzUxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYwMTRlNDA0MWQ3NDkzOWEzNzRkNDRjOGFmZDE1N2IzMGY3MzFlNWE5MDQwZTQ0NTE4ZWIzMzg0N2MyNjRhM2ImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.lUJ2apk5c0UM_Gqag59QxZShrvbVGc0ZTIetGzgsjlk" content-type-secured-asset="image/png" style="max-width: 100%;"></a> <hr> <h2>Ограничения :3</h2> <ul> <li>Работает только с компонентом <code>Image</code>. Для других компонентов (например, <code>RawImage</code>) потребуется модификация скрипта.</li> <li>Динамическая привязка работает только для <code>LocalizeSpriteEvent</code> на том же объекте.</li> </ul> <hr> <h2>Проблемы, которые решает :3</h2> <ul> <li>Устранение ручной настройки связей между <code>LocalizeSpriteEvent</code> и <code>Image</code>.</li> <li>Предотвращение накопления ненужных подписок, которые могут вызывать утечки памяти или ошибки.</li> <li>Повышение удобства и автоматизация локализации спрайтов.</li> </ul> <hr> <h2>Как это работает :3</h2> <ol> <li>При добавлении компонента <code>LocalizedImageBinder</code>: <ul> <li>Проверяется наличие <code>LocalizeSpriteEvent</code> и <code>Image</code>.</li> <li>Если их нет, они добавляются автоматически.</li> <li>Настраивается связь между <code>OnUpdateAsset</code> и <code>Image.sprite</code>.</li> </ul> </li> <li>При удалении компонента: <ul> <li>Все подписки очищаются, чтобы избежать утечек.</li> </ul> </li> <li>В режиме редактора: <ul> <li>Обеспечивается возможность визуального контроля через инспектор.</li> </ul> </li> </ol> <hr> <h2>Атрибуты :3</h2> <ul> <li><code>[SelectionBase]</code>: Выделяет объект с компонентом <code>LocalizedImageBinder</code> при клике на дочерние объекты в сцене. Это упрощает выбор объекта в сложных иерархиях.</li> <li><code>[DisallowMultipleComponent]</code>: Запрещает добавлять несколько экземпляров компонента <code>LocalizedImageBinder</code> на один объект, предотвращая дублирование логики и возможные ошибки.</li> <li><code>[ExecuteAlways]</code>: Обеспечивает выполнение компонента как в режиме игры, так и в режиме редактора. Это полезно для автоматической настройки в редакторе.</li> <li><code>[RequireComponent]</code>: Гарантирует наличие необходимых компонентов <code>Image</code>, <code>LocalizeSpriteEvent</code> и <code>RectTransform</code>, предотвращая ошибки, если какой-либо из них отсутствует.</li> </ul> <hr> <h2>Лицензия ;3</h2> <p>Этот скрипт распространяется на условиях MIT License :3</p> <p><strong>Full Changelog</strong>: <a href="https://github.com/RimuruDev/Unity-LocalizedImageBinder/commits/v1.0.0.0">https://github.com/RimuruDev/Unity-LocalizedImageBinder/commits/v1.0.0.0</a></p> RimuruDev