This page has been translated automatically.
Основы UNIGINE
1. Введение
2. Виртуальные миры и работа с ними
3. Подготовка 3D моделей
4. Материалы
5. Камеры и освещение
6. Реализация логики приложения
7. Создание кат-сцен и запись видео
8. Подготовка проекта к релизу
9. Физика
10. Основы оптимизации
11. ПРОЕКТ2: Шутер от первого лица
12. ПРОЕКТ3: Аркадная гонка по пересеченной местности от 3-го лица

Добавление нового интерактивного объекта

Let's add a new type of interactable object that we can grab, hold, and throw (it will be inherited from the VRInteractable component) with an additional feature: some visual effect (for example, smoke) will appear when we grab the object and, it will disappear when we release the object.Давайте добавим новый тип интерактивного объекта, который мы также сможем захватывать, удерживать и бросать (т.е. это будет наследник VRInteractable) с дополнительной функцией: появление визуального эффекта (например, пара) при захвате и исчезновение эффекта при отпускании.

  1. Create a new VRObjectVFX component and add the following code to it:Создайте новый компонент, назовите его VRObjectVFX и скопируйте в него следующий код:

    Исходный код (C++)
    #pragma once
    #include <UnigineComponentSystem.h>
    #include <UnigineLog.h>
    #include "../Framework/Components/VRInteractable.h"
    class VRObjectVFX :
        public VRInteractable
    {
    public:
    	COMPONENT(VRObjectVFX, VRInteractable);
    	COMPONENT_INIT(init);
    	COMPONENT_UPDATE(update,);
    
    	// имя name
    	PROP_NAME("VRObjectVFX");
    
    	// *.node-ассет, содержащий визуальный эффект
    	PROP_PARAM(File, vfx_asset);
    
    // методы взаимодействия
    	void grabIt(VRPlayer* player, int hand_num) override;
    	void throwIt(VRPlayer* player, int hand_num) override;
    
    protected:
    	void init();
    	void update();
    
    private:
    	// внутреннее состояние "захвачено"
    	bool grabbed = false;
    	// нода визуального эффекта, созданная из указанного ассета
    	Unigine::NodePtr vfx;
    };
    Исходный код (C++)
    #include "VRObjectVFX.h"
    
    using namespace Unigine;
    
    REGISTER_COMPONENT(VRObjectVFX);
    
    void VRObjectVFX::init()
    {
    	// проверка, указан ли ассет с визуальным эффектом
    	if (vfx_asset.nullCheck())
    	{
    		Log::error("Ошибка Node %s (VRObjectVFX): 'vfx_asset' не назначен.\n", node->getName());
    		ComponentSystem::get()->removeComponent<VRObjectVFX>(node);
    		return;
    	}
    	else
    	{
    		// если указан — создать новую ноду из заданного *.node-ассета
    		vfx = NodeReference::create(FileSystem::guidToPath(FileSystem::getGUID(vfx_asset.getRaw())));
    		
    		// и скрыть эту ноду (эффект)
    		vfx->setEnabled(false);
    	}
    }
    
    // этот метод вызывается каждый кадр для объекта, с которым можно взаимодействовать
    void VRObjectVFX::update()
    {
    	// обновление трансформации эффекта, если объект захвачен
    	if(grabbed)
    		vfx->setWorldTransform(node->getWorldTransform());
    }
    
    // метод, вызываемый при захвате ноды
    void VRObjectVFX::grabIt(VRPlayer* player, int hand_num)
    {
    	// установить текущее состояние объекта в 'GRABBED'
    	grabbed = true;
    
    	// показать эффект
    	vfx->setEnabled(true);
    }
    
    // метод, вызываемый при броске (освобождении) ноды
    void VRObjectVFX::throwIt(VRPlayer* player, int hand_num)
    {
    	// отключить состояние 'GRABBED'
    	grabbed = false;
    
    	// скрыть эффект
    	vfx->setEnabled(false);
    }
  2. Select the cylinder (NodeReference) node and click Edit to modify its contents. Add the VRObjectVFX property to the cylinder(ObjectMeshStatic) node.Выделите ноду cylinder (NodeReference) и щелкните Edit чтобы изменить ее содержимое. Добавьте свойство (property) VRObjectVFX ноде cylinder(ObjectMeshStatic).

  3. Drag the vr/particles/smoke.node asset to the Vfx Node field. This node stores the particle system representing the smoke effect. It is available in the vr/particles folder of the UNIGINE Starter Course Projects add-on.В поле Vfx Node перетащите ассет vr/particles/smoke.node, содержащий систему частиц с эффектом пара. Этот ассет находится в папке vr/particles аддона UNIGINE Starter Course Projects.

  4. Select the cylinder (NodeReference) node again and click Apply to save your changes to the NodeReference. Выделите ноду cylinder (NodeReference) и щелкните Apply чтобы сохранить изменения в NodeReference.

    Save changes (Ctrl+S) and run the application via SDK Browser.Сохраните мир (Ctrl+S) и запустите приложение через SDK Browser.

Now, if you grab and hold the cylinder, it will generate smoke:Теперь при захвате и удержании цилиндра от него будет идти пар:

Информация, представленная на данной странице, актуальна для версии UNIGINE 2.20 SDK.

Последнее обновление: 20.06.2025
Build: ()