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 (variuos 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.
AppOculusProxy and AppViveProxy Classes#
Both plugins implementing HMD support (AppOculus and AppVive) 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 .