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,);
    
    	// property name
    	PROP_NAME("VRObjectVFX");
    
    	// *.node asset containing the effect
    	PROP_PARAM(File, vfx_asset);
    
    // interaction methods
    	void grabIt(VRPlayer* player, int hand_num) override;
    	void throwIt(VRPlayer* player, int hand_num) override;
    
    protected:
    	void init();
    	void update();
    
    private:
    	// internal 'grabbed' state
    	bool grabbed = false;
    	// vfx-node created from the specified asset
    	Unigine::NodePtr vfx;
    };
    Исходный код (C++)
    #include "VRObjectVFX.h"
    
    using namespace Unigine;
    
    REGISTER_COMPONENT(VRObjectVFX);
    
    void VRObjectVFX::init()
    {
    	// check if the asset with the visual effect is specified
    	if (vfx_asset.nullCheck())
    	{
    		Log::error("Node %s (VRObjectVFX) error: 'vfx_asset' is not assigned.\n", node->getName());
    		ComponentSystem::get()->removeComponent<VRObjectVFX>(node);
    		return;
    	}
    	else
    	{
    		// if specified, create a new node from the specified *.node asset
    		vfx = NodeReference::create(FileSystem::guidToPath(FileSystem::getGUID(vfx_asset.getRaw())));
    		
    		// and hide this node (effect)
    		vfx->setEnabled(false);
    	}
    }
    
    // this method is called for the interactable object each frame
    void VRObjectVFX::update()
    {
    	// update transformation of the effect if the object is grabbed
    	if(grabbed)
    		vfx->setWorldTransform(node->getWorldTransform());
    }
    
    // method to be called on grabbing a node
    void VRObjectVFX::grabIt(VRPlayer* player, int hand_num)
    {
    	// set the current object state to 'GRABBED'
    	grabbed = true;
    
    	// show the effect
    	vfx->setEnabled(true);
    }
    
    // method to be called on trowing (releasing) a node
    void VRObjectVFX::throwIt(VRPlayer* player, int hand_num)
    {
    	// turn the 'GRABBED' state off 
    	grabbed = false;
    
    	// hide the effect
    	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:Теперь при захвате и удержании цилиндра от него будет идти пар:

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