Как копировать предметы в юнити
Unity hotkeys
This page gives an overview of the default Unity keyboard shortcuts. You can also download a PDF of the table for Windows and MacOSX. Where a command has Ctrl/Cmd as part of the keystroke, this indicates that the Control key should be used on Windows and the Command key on MacOSX.
The Mac trackpad also has a number of shortcuts for navigating the Scene view. See Scene view navigation to learn more about these.
Tools | |
“Горячая” клавиша | Command |
Q | Pan |
W | Move |
E | Rotate |
R | Scale |
T | Rect Tool |
Z | Pivot Mode toggle |
X | Pivot Rotation Toggle |
V | Vertex Snap |
CTRL/CMD+ЛКМ | Snap |
GameObject | |
Ctrl/Cmd+Shift+N | New empty game object |
Alt+Shift+N | New empty child to selected game object |
Ctrl/Cmd+Alt+F | Move to view |
Ctrl/Cmd+Shift+F | Align with view |
Shift+F or double-F | Locks the scene view camera to the selected GameObject |
Window | |
Ctrl/Cmd+1 | Scene |
Ctrl/Cmd+2 | Game |
Ctrl/Cmd+3 | Inspector |
Ctrl/Cmd+4 | Hierarchy |
Ctrl/Cmd+5 | Project |
Ctrl/Cmd+6 | Animation |
Ctrl/Cmd+7 | Profiler |
Ctrl/Cmd+9 | Asset store |
Ctrl/Cmd+0 | Version Control |
Ctrl/Cmd+Shift+C | Console |
Edit | |
Ctrl/Cmd+Z | Undo |
Ctrl+Y (Windows only) | Redo |
Cmd+Shift+Z (Mac only) | Redo |
Ctrl/Cmd+X | Cut |
Ctrl/Cmd+C | Copy |
Ctrl/Cmd+V | Paste |
Ctrl/Cmd+D | Duplicate |
Shift+Del | Delete |
F | Frame (centre) selection |
Ctrl/Cmd+F | Find |
Ctrl/Cmd+A | Select All |
Ctrl/Cmd+P | Play |
Ctrl/Cmd+Shift+P | Pause |
Ctrl/Cmd+Alt+P | Step |
Selection | |
Ctrl/Cmd+Shift+1 | Load Selection 1 |
Ctrl/Cmd+Shift+2 | Load Selection 2 |
Ctrl/Cmd+Shift+3 | Load Selection 3 |
Ctrl/Cmd+Shift+4 | Load Selection 4 |
Ctrl/Cmd+Shift+5 | Load Selection 5 |
Ctrl/Cmd+Shift+6 | Load Selection 6 |
Ctrl/Cmd+Shift+7 | Load Selection 7 |
Ctrl/Cmd+Shift+8 | Load Selection 8 |
Ctrl/Cmd+Shift+9 | Load Selection 9 |
Ctrl/Cmd+Alt+1 | Save Selection 1 |
Ctrl/Cmd+Alt+2 | Save Selection 2 |
Ctrl/Cmd+Alt+3 | Save Selection 3 |
Ctrl/Cmd+Alt+4 | Save Selection 4 |
Ctrl/Cmd+Alt+5 | Save Selection 5 |
Ctrl/Cmd+Alt+6 | Save Selection 6 |
Ctrl/Cmd+Alt+7 | Save Selection 7 |
Ctrl/Cmd+Alt+8 | Save Selection 8 |
Ctrl/Cmd+Alt+9 | Save Selection 9 |
Assets | |
Ctrl/Cmd+R | Refresh |
Note: The following Animation hotkeys only work in the Animation window.
Управление игровыми объектами (GameObjects) с помощью компонентов
В редакторе Unity вы изменяете свойства Компонента используя окно Inspector. Так, например, изменения позиции компонента Transform приведет к изменению позиции игрового объекта. Аналогично, вы можете изменить цвет материала компонента Renderer или массу твёрдого тела (RigidBody) с соответствующим влиянием на отображение или поведение игрового объекта. По большей части скрипты также изменяют свойства компонентов для управления игровыми объектами. Разница, однако, в том, что скрипт может изменять значение свойства постепенно со временем или по получению ввода от пользователя. За счет изменения, создания и уничтожения объектов в заданное время может быть реализован любой игровой процесс.
Обращение к компонентам
Наиболее простым и распространенным является случай, когда скрипту необходимо обратиться к другим компонентам, присоединенных к тому же GameObject. Как упоминалось во разделе Введение, компонент на самом деле является экземпляром класса, так что первым шагом будет получение ссылки на экземпляр компонента, с которым вы хотите работать. Это делается с помощью функции GetComponent. Типично, объект компонента сохраняют в переменную, это делается в C# посредством следующего синтаксиса:
В UnityScript синтаксис немного отличается:
Как только у вас есть ссылка на экземпляр компонента, вы можете устанавливать значения его свойств, тех же, которые вы можете изменить в окне Inspector:
Имейте ввиду, что нет причины, по которой вы не можете иметь больше одного пользовательского скрипта, присоединенного к одному и тому же объекту. Если вам нужно обратиться к одному скрипту из другого, вы можете использовать, как обычно, GetComponent, используя при этом имя класса скрипта (или имя файла), чтобы указать какой тип Компонента вам нужен.
Если вы попытаетесь извлечь Компонент, который не был добавлен к Игровому Объекту, тогда GetComponent вернет null; возникнет ошибка пустой ссылки при выполнении (null reference error at runtime), если вы попытаетесь изменить какие-либо значения у пустого объекта.
Обращение к другим объектам
Пусть иногда они и существуют изолированно, все же, обычно, скрипты отслеживают другие объекты. Например, преследующий враг должен знать позицию игрока. Unity предоставляет несколько путей получения других объектов, каждый подходит для конкретной ситуации.
Связывание объектов через переменные
Переменная будет видна в окне Inspector, как и любые другие:
Теперь вы можете перетащить объект со сцены или из панели Hierarchy в эту переменную, чтобы назначить его. Функция GetComponent и доступ к переменным компонента доступны как для этого объекта, так и для других, то есть вы можете использовать следующий код:
Кроме того, если объявить переменную с доступом public и заданным типом компонента в вашем скрипте, вы сможете перетащить любой объект, который содержит присоединенный компонент такого типа. Это позволит обращаться к компоненту напрямую, а не через игровой объект.
Соединение объектов через переменные наиболее полезно, когда вы имеете дело с отдельными объектами, имеющими постоянную связь. Вы можете использовать массив для хранения связи с несколькими объектами одного типа, но связи все равно должны быть заданы в редакторе Unity, а не во время выполнения. Часто удобно находить объекты во время выполнения, и Unity предоставляет два основных способа сделать это, описанных ниже.
Нахождение дочерних объектов
Иногда игровая сцена может использовать несколько объектов одного типа, таких как враги, путевые точки и препятствия. Может возникнуть необходимость отслеживания их в определенном скрипте, который управляет или реагирует на них (например, все путевые точки могут потребоваться для скрипта поиска пути). Можно использовать переменные для связывания этих объектов, но это сделает процесс проектирования утомительным, если каждую новую путевую точку нужно будет перетащить в переменную в скрипте. Аналогично, при удалении путевой точки придется удалять ссылку на отсутствующий объект. В случаях, наподобие этого, чаще всего удобно управлять набором объектов, сделав их дочерними одного родительского объекта. Дочерние объекты могут быть получены, используя компонент Transform родителя (так как все игровые объекты неявно содержат Transform):
Вы можете также найти заданный дочерний объект по имени, используя функцию Transform.Find:
Использование компонентов
Даже пустые игровые объекты имеют компонент Transform
Помните, что вы всегда можете использовать инспектор, чтобы увидеть, какие компоненты добавлены к выбранному игровому объекту. Компоненты добавляются и удаляются, а инспектор всегда покажет вам, какие из них находятся на объекте в настоящее время. Вы будете использовать инспектор, чтобы изменить все свойства любого компонента (включая скрипты)
Добавление компонентов
Пустой игровой объект с компонентом Rigidbody
Другой вариант заключается в использовании браузера компонентов ( Component Browser ), который может быть активирована с помощью кнопки Add Component в инспекторе объекта.
Браузер компонентов
Браузер обеспечивает удобную навигацию по компонентам с помощью категорий, а также имеет окно поиска, которое можно использовать, чтобы найти компоненты по имени.
Если вы хотите узнать больше об использовании каждого компонента, вы можете прочитать о любом из них на соответствующей странице справочника компонентов. Вы также можете получить доступ к указанной странице для компонента в Unity, нажав на маленький ? на заголовке компонента в инспекторе.
Редактирование компонентов
Одной из замечательных особенностей компонентов является гибкость. При подключении компонента к игровому объекту, существуют различные значения или свойства ( Properties ) в компоненте, которые могут изменяться в редакторе при создании игры или через скрипты в запущенной игре. Есть два основных типа свойств: значения ( Values ) и ссылки ( References ).
Теперь файл со звуковым эффектом назначен свойству Audio Clip
Компоненты могут включать ссылки на любые другие типы компонентов, игровых объектов или ассетов. Вы можете узнать больше о назначении ссылок на странице о редактировании свойств-ссылок.
Команды контекстного меню компонента
Контекстное меню для компонента имеет ряд полезных команд.
Контекстное меню компонента
Те же команды также доступны через иконку-шестеренку в крайнем верхнем правом углу панели компонента в инспекторе.
Сбросить
Эта команда восстанавливает значения свойств компонента, которые были до самой последней сессии редактирования.
Удалить
Команда Remove Component доступна в случаях, когда вы более не нуждаетесь в связи компонента с игровым объектом. Обратите внимание, что некоторые комбинации компонентов, которые зависят друг от друга, работают только когда Rigidbody также прикреплено; вы увидите предупреждающее сообщение, если вы попробуете удалить компоненты, которые зависят от каких-либо других компонентов.
Переместить Вверх/Вниз
Каждый компонент Image Effects применяет определенный визуальный эффект к итоговому изображению, но порядок, в котором эффекты применяются, важен. Контекстное меню имеет Move Up (поднять вверх) и Move Down (опустить вниз).
Скопировать/Вставить
Проверка свойств
Unity3D копировать параметры компонентов [РЕШЕНО]
Всем, доброго времени суток. Надеюсь, на форуме есть любители Unity3D.
есть GameObject go с компонентом ObjStates(скрипт), в котором хранятся некие данные.
Вопрос: как можно вытянуть эти данные и присвоить другому объекту с таким же компонентом и при этом первый объект удалить?
Заранее, благодарю. Очень буду рад любым попыткам мне помочь.)
Сначала получаешь ссылку на экземпляр класса хранящегося в объекте 1
Все понятно, кроме «GetDataFromOldClass». Это что-за функция такая?
Я пробовал по такому принципу:
controller = OBJ1.GetComponentinChildren ();
OBJ2.GetComponentinChildren () = controller;
или
OBJ1.GetComponentinChildren () =
OBJ2.GetComponentinChildren ();
Но при удалении первого объекта данныe во втором тоже удаляются(.
Ты присваиваешь ссылку, поэтому и удалется.
Ты должен создать новый компонент в новом объекте.
Взять старый компонент из старого объекта.
Присвоить поля от одного к другому, имено поля а не объекты, через рефлекшен или серелизатор юньки.
Потом удалить старый компонент из объекта.
Все заработало! Большое спасибо за помощь!!
Рабочий вариант:
Component new_comp;
GameObject g = (Instantiate(Resources.Load(path)) as GameObject); //Загрузил префаб
Component old_comp = g.GetComponent (); //взял ссылку
new_comp = gameObject.AddComponent ();// вот без этого не работало
// и вручную перетащил параметры
new_comp.texture = old_component.texture;
GameObject.Destroy(g);
Как создать простой инвентарь в Unity
Инвентарь — одна из важнейших деталей игр многих жанров. Однако создать его может быть не так просто, как кажется на первый взгляд.
Чтобы реализовать инвентарь, нужно уже уметь создавать простые игры и работать с интерфейсами.
Как создать окно инвентаря
Добавьте на карту элементы Canvas с именем InventoryCanvas и Panel, в котором будут находиться остальные элементы:
Пишет о разработке сайтов, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG.
В компоненте Canvas Scaller укажите в UI Scale Mode вариант Scale With Screen. Так размер инвентаря будет зависеть от разрешения экрана. Внутри Panel создайте еще одну панель и назовите ее Items:
Поменяйте цвет и добавьте компонент Grid Layout Group — он позволит расположить компоненты по сетке. Можно указать отступы и размер клеток. Затем добавьте название окна — это еще одна панель с текстом.
Теперь пора приступить к созданию ячеек. Внутри панели Items создайте кнопку и назовите ее Slot. Внутрь кнопки добавьте Image и назовите этот элемент Icon — в нем будет отображаться спрайт предмета. Также создайте пустой скрипт Slot.cs, а потом сохраните слот как префаб.
После этого можно создать несколько копий ячейки, которые автоматически расположатся по сетке.
Теперь нужен скрипт, который будет отвечать за открытие и закрытие инвентаря и другой функционал, — Inventory.cs. Прикрепите его к InventoryCanvas.
Вот как это выглядит:
Как создать предмет
Рассмотреть создание предметов можно на примере брони для танка. Она будет выглядеть так:
А на танке крепится так:
Для начала перетащите спрайт на карту и добавьте ему коллайдер с триггером:
Триггер нужен, чтобы его объект можно было «подбирать», наезжая на него. Добавьте скрипт Item.cs:
Вот как будет выглядеть подбор предмета:
Пока скрипт Items.cs не создан, поэтому попытка его вызова может привести к ошибке — закомментируйте строку obj.GetComponent ().AddItem (index);
Как подобрать предмет
Создайте скрипт Items.cs и добавьте его персонажу:
Перед запуском игры нужно немного изменить персонажа. Создайте пустой объект и перетащите ему все компоненты персонажа. Сам же спрайт поместите внутрь этого объекта. Также нужно создать объект Armor — ему будет задаваться спрайт текущей брони:
Как добавить предмет в инвентарь
Теперь нужно сделать так, чтобы подобранные предметы отображались в инвентаре. Для этого добавьте вот такой код в скрипт Slot.cs:
Чтобы новый скрипт работал, нужно добавить новый функционал в Inventory.cs:
Вот как выглядит инвентарь с предметами:
Как надеть предмет
За надевание предмета будет отвечать скрипт Items:
Теперь метод Equip () нужно прикрепить к слоту и указать его номер. Первая ячейка должна идти под номером 0, вторая — под 1 и так далее:
Теперь пора проверить, как всё это работает:
Заключение
Инвентарь — достаточно сложный игровой компонент. В этой статье был разобран лишь минимальный функционал. Кроме него, можно реализовать еще много всего интересного: влияние предметов на характеристики персонажа, выкидывание предметов, передачу их другим игрокам, лут и многое другое.
Если вы хотите лучше изучить работу с Unity, записывайтесь на курс «Профессия разработчик игр на Unity». Вы научитесь создавать все основные компоненты для игры и сможете работать над крупными проектами.