Classes and Components Overview
When you first open your project based on the VR Sample and see a lot of different classes you might get confused a bit. But let's take a quick look at each of them and see what they actually do and how they are related to each other.
VRInteractable Class#
This is a base class for all objects, that you can interact with. It defines a basic set of interactions, in other words: here you define what can a user do with your object. You can add your own type of interaction here.
The following component classes are inherited from the VRInteractable:
ObjMovable | This component type can be used for all objects, that can be grabbed, held and thrown (it can be a ball, a pistol, whatever you can take, carry and drop). |
---|---|
ObjHandle | This component type can be used for all objects, that can be turned or moved while being held (various handles, levers, valves, etc.). |
ObjSwitch | This component type can be used for all objects, that can be switched by grabbing (all sorts of buttons and on-off switches, including rotary ones). |
ObjButton | This component type demonstrates animated text, when grabbed, and can be used in combination with the ObjSwitch component to provide additional effects. |
ObjLaserPointer | This component enables casting a laser ray by the object. The laser pointer object in the VR Sample world has ObjMovable and ObjLaserPointer components attached. |
VRPlayer Class#
This is a base class for all players. It contains declaration of baseline controls, common basic player operations, callback management etc.
The following component classes are inherited from the VRPlayer:
VRPlayerSpawner Class#
This class registers all VRPlayer components in the Component System, checks which VR plugin is loaded and creates a player of the corresponding type (VRPlayerOcculus or VRPlayerVive). It also enables and shows necessary controllers.
OculusProxy and ViveProxy Classes#
Both plugins implementing HMD support (Oculus and Vive) have UnigineScript interface. So, in order to use them in our C++ project we need a proxy class (sort of API "translator") for each of them, wrapping UnigineScript methods in C++.
GuiSample Class#
This component type is used to create various graphic user interfaces (GUI). Here you can add widgets (labels, buttons, etc.) and implement event handlers for them.
Framework#
Framework includes the Component System which implements the core functionality of components and a set of utility classes and functions used for playing sounds, auxiliary math and 3d math functions, callback system implementation .
Triggers Class#
Triggers is a framework class used to mark room obstacles for the VR Player (e.g. room walls, objects, etc.) and give a warning if there is an obstacle on the way (as the player gets closer to an obstacle, controllers' vibration becomes more intense).
You can simply create primitives for walls and objects in your room and add them as children to the node dummy named Obstacles, which is a child of the VR dummy node (see the hierarchy in the Editor below).
All children of the Obstacles node will be automatically switched to invisible mode and will be used only to inform the player and prevent collisions with objects in the real room.