|
0 / 0 / 0
Регистрация: 08.05.2018
Сообщений: 8
|
|
Изменение спрайта по клику на объект08.05.2018, 21:26. Показов 8165. Ответов 7
Метки нет (Все метки)
Доброго времени суток!
Уже всю голову сломал, надежда на форум... Есть инвентарь, который состоит, стандартно, из панели, ячеек и префаба, который хранит в себе спрайт иконки предмета. Я хочу, что бы по клику на иконку из инвентаря курсор в центре экрана менялся на эту иконку. Сам курсор представляет собой просто image, засунутый в центр экрана. Что я делаю: создаю префаб, в который закидываю image, пишу маленький скрипт на замену спрайта и вышаю его на контейнер. Вот скрипт: Кликните здесь для просмотра всего текста
using System.Collections;
using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class cursor_change : MonoBehaviour { public Image img; public GameObject container; void Awake() { Cursor.visible = false; } void OnGUI() { if (Input.GetMouseButtonDown(0)) { img.enabled = true; img.GetComponent<Image>().sprite = container.GetComponent<Image>().sprite; } } } В итоге спрайт в префабе (который в ассетах лежит) меняется, а в image - нет. Иногда спрайт в image меняется после того как отжать "Play". Что я делаю не так?
0
|
|
| 08.05.2018, 21:26 | |
|
Ответы с готовыми решениями:
7
Динамическое изменение спрайта
|
|
3 / 3 / 1
Регистрация: 16.03.2012
Сообщений: 54
|
|||||||||||
| 09.05.2018, 12:00 | |||||||||||
Второй вариант, с типом Image:
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 08.05.2018
Сообщений: 8
|
|
| 09.05.2018, 14:15 [ТС] | |
|
SPLER, к сожалению - не работает. Точнее, работает так же, как раньше: в префабе, который в ассетах лежит, спрайт меняется, а в том, что на сцене - нет.
0
|
|
|
3 / 3 / 1
Регистрация: 16.03.2012
Сообщений: 54
|
|
| 09.05.2018, 16:07 | |
|
Вы в img поместили тот, что со сцены? если нет, то поместите. На 2018.1 работает, да думаю не в версии дело.
На всякий случай, img - объект со сцены, container - префаб в ассетах.
1
|
|
|
0 / 0 / 0
Регистрация: 08.05.2018
Сообщений: 8
|
|
| 10.05.2018, 02:46 [ТС] | |
|
Дело в том, что со сцены в первую строчку я не могу перенести ничего. Только из ассетов.
При попытке перенести курсор меняется на запрещающий. Добавлено через 31 минуту Возможно, проблема в том, что этот курсор (image) у меня находится в дочерних объектах канваса? Добавлено через 3 минуты Или в том, что на канвасе лежит скрипт DontDestroyOnLoad?
0
|
|
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|||||||||||
| 10.05.2018, 02:52 | |||||||||||
|
Вообще, всю работу с UI лучше в отдельный класс. Так проще рефакторить и/или расширять. Да и связность уменьшается.
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 08.05.2018
Сообщений: 8
|
|
| 10.05.2018, 09:30 [ТС] | |
|
Спасибо! Это действительно шикарный скрипт!
Но, как говорится, есть несколько НО (которые меня удивляют): 1. public Sprite cursorInventory; - не могу переместить сюда префаб контейнера (в котором хранится спрайт иконки предмета инвентаря) 2. Если я переделываю public Sprite cursorInventory; в public GameObject cursorInventory; и меняю, соответственно, cursorImage.sprite = cursorInventory; на cursorImage.sprite = cursorInventory.GetComponent<Image>().sp rite;, то происходит вот что: Юнити считает, что я беру спрайт именно контейнера, а не его содержимого и сбрасывает cursorImage.sprite в None. Второе для меня удивительно, ведь если я иду по пути, предложенному SPLERом, то все в порядке, .GetComponent<Image>().sprite; берется именно иконка. Добавлено через 2 часа 45 минут Я смог разобраться! Фух, семь потов сошло. Предполагаю, что сделал криво, но сделал. В скрипте Cr0cа я таки изменил public Sprite cursorInventory; в public GameObject cursorInventory (изменив cursorImage.sprite = cursorInventory на cursorImage.sprite = cursorInventory.GetComponent<Image>().sp rite) и кладу туда созданный префаб Cursor. В этот префаб я кладу изображение курсора. На сцене создал "пустышку" и навесил на нее скрипт Cr0cа. В cursor image положил изображение курсора со сцены, в cursor default - выбрал спрайт курсора ручками, в cursor inventory - закинул префаб Cursor из ассетов. Осталось только по щелчку сделать UIcontroller.Instance.SetCursorInventory () как все заработало! Если что-то сделал криво - ругайте, исправлю. Всем огромное спасибо!
0
|
|
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
| 10.05.2018, 10:16 | |
|
motoro, этот скрипт надо (можно) ложить куда угодно. Он без поиска работать будет. Туда же (в скрипт) и остальную работу с UI ложить.
0
|
|
| 10.05.2018, 10:16 | |
|
Помогаю со студенческими работами здесь
8
Получить объект по клику мыши Есть кнопка и объект. Как по клику на кнопку закрасить объект?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|