Как копировать объекты в юнити

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
QPan
WMove
ERotate
RScale
TRect Tool
ZPivot Mode toggle
XPivot Rotation Toggle
VVertex Snap
CTRL/CMD+ЛКМSnap
GameObject
Ctrl/Cmd+Shift+NNew empty game object
Alt+Shift+NNew empty child to selected game object
Ctrl/Cmd+Alt+FMove to view
Ctrl/Cmd+Shift+FAlign with view
Shift+F or double-FLocks the scene view camera to the selected GameObject
Window
Ctrl/Cmd+1Scene
Ctrl/Cmd+2Game
Ctrl/Cmd+3Inspector
Ctrl/Cmd+4Hierarchy
Ctrl/Cmd+5Project
Ctrl/Cmd+6Animation
Ctrl/Cmd+7Profiler
Ctrl/Cmd+9Asset store
Ctrl/Cmd+0Version Control
Ctrl/Cmd+Shift+CConsole
Edit
Ctrl/Cmd+ZUndo
Ctrl+Y (Windows only)Redo
Cmd+Shift+Z (Mac only)Redo
Ctrl/Cmd+XCut
Ctrl/Cmd+CCopy
Ctrl/Cmd+VPaste
Ctrl/Cmd+DDuplicate
Shift+DelDelete
FFrame (centre) selection
Ctrl/Cmd+FFind
Ctrl/Cmd+ASelect All
Ctrl/Cmd+PPlay
Ctrl/Cmd+Shift+PPause
Ctrl/Cmd+Alt+PStep
Selection
Ctrl/Cmd+Shift+1Load Selection 1
Ctrl/Cmd+Shift+2Load Selection 2
Ctrl/Cmd+Shift+3Load Selection 3
Ctrl/Cmd+Shift+4Load Selection 4
Ctrl/Cmd+Shift+5Load Selection 5
Ctrl/Cmd+Shift+6Load Selection 6
Ctrl/Cmd+Shift+7Load Selection 7
Ctrl/Cmd+Shift+8Load Selection 8
Ctrl/Cmd+Shift+9Load Selection 9
Ctrl/Cmd+Alt+1Save Selection 1
Ctrl/Cmd+Alt+2Save Selection 2
Ctrl/Cmd+Alt+3Save Selection 3
Ctrl/Cmd+Alt+4Save Selection 4
Ctrl/Cmd+Alt+5Save Selection 5
Ctrl/Cmd+Alt+6Save Selection 6
Ctrl/Cmd+Alt+7Save Selection 7
Ctrl/Cmd+Alt+8Save Selection 8
Ctrl/Cmd+Alt+9Save Selection 9
Assets
Ctrl/Cmd+RRefresh

Note: The following Animation hotkeys only work in the Animation window.

Источник

Создание объектов

Некоторые игры имеют постоянное количество объектов на сцене, однако обычно персонажи, пули, сокровища и другие объекты создаются и удаляются во время игры. В Unity, игровой объект (GameObject) может быть создан через функцию Instantiate, которая делает копию существующего объекта. Объект, который мы будем клонировать, должен быть prefab’ом и сохранен в папке Resources.

Сейчас ты напишешь пару скриптов, с помощью которых можно научиться создавать (spawn’инть) игровые объекты, например, для того, чтобы реализовать механику вот такой ловушки:

Как копировать объекты в юнити. %D0%9B%D0%BE%D0%B2%D1%83%D1%88%D0%BA%D0%B0. Как копировать объекты в юнити фото. Как копировать объекты в юнити-%D0%9B%D0%BE%D0%B2%D1%83%D1%88%D0%BA%D0%B0. картинка Как копировать объекты в юнити. картинка %D0%9B%D0%BE%D0%B2%D1%83%D1%88%D0%BA%D0%B0Ловушка

Подготовка

Тебе понадобятся четыре игровых объекта и скрипт, с которым ты уже знаком:

Stone

По нашему плану нам понадобятся камни, которые будут создаваться над головой Игрока. Выбери 3D-модель, которая тебе понравилась, добавь ей компоненты Rigidbody и два коллайдера: Capsule и Box. Box коллайдер должен быть чуть больше, чем Capsule, а также иметь включенным свойство Trigger.

После этого добавь этому игровому объекту скрипт OnTriggerSceneLoader и укажи в его свойствах название текущей сцены (а еще не забудь добавить ее в Build Settings).

Как копировать объекты в юнити. Stone %D0%B8 %D0%B5%D0%B3%D0%BE %D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B. Как копировать объекты в юнити фото. Как копировать объекты в юнити-Stone %D0%B8 %D0%B5%D0%B3%D0%BE %D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B. картинка Как копировать объекты в юнити. картинка Stone %D0%B8 %D0%B5%D0%B3%D0%BE %D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8BStone и его компоненты

Не забудь сохранить объект Stone, как prefab, в папке Resources!

Программирование

Тебе понадобятся два новых скрипта, чтобы все работало как нужно: Spawner.cs и TrapSwitch.cs

Spawner

Как мы уже говорили, в Unity есть функция Instantiate, которая делает копию существующего объекта:

В нашем случаем наш объект будет физическим, так что ты можешь сразу объявить Rigidbody, также понадобится переменная, в которой ты будешь указывать необходимое количество клонов:

Теперь нужно написать публичный метод, который ты будешь вызывать скриптом TrapSwitch.cs, стандартные методы Update() и Start() нам не понадобятся, так что их можно удалить:

Чтобы выполнить функцию Instantiate несколько раз, используй цикл, например, do while:

Технически, скрипт готов, но, если оставить все как есть, то во время выполнения метода Spawn(), практически, одновременно в одной точке появятся все amount (число) клоны. Из-за того, что наши клоны содержат в себе компоненты Rigidbody и коллайдер, клоны просто разлетятся в разные стороны, что выглядит не очень. При этом, шанс, что хотя бы один клон-камень попадет в Игрока будет очень низок. Поэтому добавь немного рандома и сделай так, чтобы каждый следующий камень создавался выше предыдущего на i:

Теперь все работает как нужно. Продолжим.

TrapSwitch

TrapSwitch будет размещен на объекте с триггером, когда Игрок будет его касаться, TrapSwitch будет запускать метод Spawn() у объекта Spawner. Напомним про коллайдеры и триггеры:

Сейчас тебе понадобиться метод OnTriggerEnter. Он выполняется, когда объект только вошел в зону триггера один раз. Создай такой скрипт:

Ты собираешься взаимодействовать с двумя игровыми объектами и объектом Spawner. Их нужно объявить:

Теперь необходимо убедиться, что объект, который войдет в триггер является Игроком. Это можно сделать, используя тег, как в OnTriggerSceneLoader:

Теперь последовательно напиши все необходимые команды внутрь условия: удаление (уничтожение) объекта TrapOn, включение объекта TrapOff, выполнение метода Spawn() и удаление (уничтожения) себя.

Все скрипты написаны. Поздравляем! Осталось правильно разместить все объекты на сцене и не забыть указать им друг на друга.

Источник

Управление игровыми объектами (GameObjects) с помощью компонентов

В редакторе Unity вы изменяете свойства Компонента используя окно Inspector. Так, например, изменения позиции компонента Transform приведет к изменению позиции игрового объекта. Аналогично, вы можете изменить цвет материала компонента Renderer или массу твёрдого тела (RigidBody) с соответствующим влиянием на отображение или поведение игрового объекта. По большей части скрипты также изменяют свойства компонентов для управления игровыми объектами. Разница, однако, в том, что скрипт может изменять значение свойства постепенно со временем или по получению ввода от пользователя. За счет изменения, создания и уничтожения объектов в заданное время может быть реализован любой игровой процесс.

Обращение к компонентам

Наиболее простым и распространенным является случай, когда скрипту необходимо обратиться к другим компонентам, присоединенных к тому же GameObject. Как упоминалось во разделе Введение, компонент на самом деле является экземпляром класса, так что первым шагом будет получение ссылки на экземпляр компонента, с которым вы хотите работать. Это делается с помощью функции GetComponent. Типично, объект компонента сохраняют в переменную, это делается в C# посредством следующего синтаксиса:

В UnityScript синтаксис немного отличается:

Как только у вас есть ссылка на экземпляр компонента, вы можете устанавливать значения его свойств, тех же, которые вы можете изменить в окне Inspector:

Имейте ввиду, что нет причины, по которой вы не можете иметь больше одного пользовательского скрипта, присоединенного к одному и тому же объекту. Если вам нужно обратиться к одному скрипту из другого, вы можете использовать, как обычно, GetComponent, используя при этом имя класса скрипта (или имя файла), чтобы указать какой тип Компонента вам нужен.

Если вы попытаетесь извлечь Компонент, который не был добавлен к Игровому Объекту, тогда GetComponent вернет null; возникнет ошибка пустой ссылки при выполнении (null reference error at runtime), если вы попытаетесь изменить какие-либо значения у пустого объекта.

Обращение к другим объектам

Пусть иногда они и существуют изолированно, все же, обычно, скрипты отслеживают другие объекты. Например, преследующий враг должен знать позицию игрока. Unity предоставляет несколько путей получения других объектов, каждый подходит для конкретной ситуации.

Связывание объектов через переменные

Переменная будет видна в окне Inspector, как и любые другие:

Как копировать объекты в юнити. GameObjectPublicVar. Как копировать объекты в юнити фото. Как копировать объекты в юнити-GameObjectPublicVar. картинка Как копировать объекты в юнити. картинка GameObjectPublicVar

Теперь вы можете перетащить объект со сцены или из панели Hierarchy в эту переменную, чтобы назначить его. Функция GetComponent и доступ к переменным компонента доступны как для этого объекта, так и для других, то есть вы можете использовать следующий код:

Кроме того, если объявить переменную с доступом public и заданным типом компонента в вашем скрипте, вы сможете перетащить любой объект, который содержит присоединенный компонент такого типа. Это позволит обращаться к компоненту напрямую, а не через игровой объект.

Соединение объектов через переменные наиболее полезно, когда вы имеете дело с отдельными объектами, имеющими постоянную связь. Вы можете использовать массив для хранения связи с несколькими объектами одного типа, но связи все равно должны быть заданы в редакторе Unity, а не во время выполнения. Часто удобно находить объекты во время выполнения, и Unity предоставляет два основных способа сделать это, описанных ниже.

Нахождение дочерних объектов

Иногда игровая сцена может использовать несколько объектов одного типа, таких как враги, путевые точки и препятствия. Может возникнуть необходимость отслеживания их в определенном скрипте, который управляет или реагирует на них (например, все путевые точки могут потребоваться для скрипта поиска пути). Можно использовать переменные для связывания этих объектов, но это сделает процесс проектирования утомительным, если каждую новую путевую точку нужно будет перетащить в переменную в скрипте. Аналогично, при удалении путевой точки придется удалять ссылку на отсутствующий объект. В случаях, наподобие этого, чаще всего удобно управлять набором объектов, сделав их дочерними одного родительского объекта. Дочерние объекты могут быть получены, используя компонент Transform родителя (так как все игровые объекты неявно содержат Transform):

Вы можете также найти заданный дочерний объект по имени, используя функцию Transform.Find:

Источник

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);

Источник

Object.Instantiate

Успех!

Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.

Ошибка внесения изменений

По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста попробуйте снова через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.

Параметры

originalAn existing object that you want to make a copy of.
positionPosition for the new object (default Vector3.zero).
rotationOrientation of the new object (default Quaternion.identity).

Возврат значений

Object A clone of the original object.

Описание

This function makes a clone of an object in a similar way to the Duplicate command in the editor. If you are cloning a GameObject, or something attached to a GameObject, then you can also optionally specify its position and rotation.

If you are cloning a Component, then the GameObject it is attached to will also be cloned.

When you clone a GameObject or Component, all child objects and components will also be cloned, along with their properties. However, the parent property of the cloned object will be null, so it will not be part of the object hierarchy of the original.

The active status of a GameObject at the time of cloning will be passed, so if the original is inactive then the clone will be created in an inactive state too.

For an in-depth tutorial of Instantiate and its uses, visit: In depth Prefab Instantiate discussion.

In this example, we instantiate 10 copies of a prefab object in a line along the x axis.

Instantiate can also clone script instances directly. The game object hierarchy will be cloned and the cloned script instance will be returned.

After cloning an object you can also use GetComponent to set properties on a specific component attached to the cloned object.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *