NOTE: CognitiveVR has been rebranded to Cognitive3D. Code references, methods, menus, and variables remain untouched.


Transactions are the primary way Cognitive3D collects telemetry data (user events) from your product. Other analytics platforms may have referred to these as events or data points. Calling them transactions allows us to go beyond simple one-off events with no context. Transactions can be instant or take time to complete.

There is no need to add custom variables or transactions on our dashboard. Simply send transactions and our platform will automatically contextualize them, no set-up required.

There are two types of transactions: Instant Transaction and Extended Transaction.

Transactions also automatically record x,y,z coordinates. This allows us to map every single transaction to a specific point in your VR experience. In conjunction with visual telemetry (gaze tracking), transactional coordinates gives you the ability to map out how your users are interacting with your product at a 3d level.

This page explains the concepts of Instant & Extended Transactions. See Code Reference for technical details

Instant Transactions

These five Blueprint nodes each send instant transactions. The only difference are the parameters sent.


Instant transactions are sent with a this code:

TSharedPtr<FAnalyticsProviderCognitiveVR> cognitive = FAnalyticsCognitiveVR::Get().GetCognitiveVRProvider();
cognitive.Get()->transaction->BeginEnd("Ninja Star Thrown");


Instant Transaction

Extended Transactions

Extended Transactions are longer form transactions that can be anything from in-game purchase events, to boss battles, to actual game sessions. These two pairs of Blueprint nodes Begin and End transactions


In this example, we treat an entire game session as an Extended Transaction. We begin() the transaction when we start our game:

void AnalyticsManager::StartGame()
    TSharedPtr<FAnalyticsProviderCognitiveVR> cognitive = FAnalyticsCognitiveVR::Get().GetCognitiveVRProvider();

When the game session is finished, we send our data and .end() the transaction. In this case, we create a simple Dictionary to package our game score and win outcome.

void AnalyticsManager::EndGame(bool didWin)
    TSharedPtr<FAnalyticsProviderCognitiveVR> cognitive = FAnalyticsCognitiveVR::Get().GetCognitiveVRProvider();


Extended Transaction

That's all there is to it. You simply add transactions within transactions and our system automatically contextualizes what your users have done. This enables our powerful Slicer tool to bring you powerful insights into your digital experiences.