Integration with Game Engines
Unity
Integration with Unity can be done only using C# binding. We tested it only on Windows, but it may work on Linux and MacOS too. Android and IOS are not supported.
Setup
You can build C# binding from source or download precompiled package directly from Nuget.
Here we will provide steps to configure it using precompiled package from Nuget.
Download the latest NuGet Unity package from NuGetForUnity
Open your Unity project
Click on NuGetForUnity.x.x.x.unitypackage and add it into your project
In the Unity editor, go to NuGet/Manage NuGet Packages
Search for mindrove and click Install
After building your game for production don’t forget to copy *Unmanaged(C++)* libraries to a folder where executable is located. ( for example on 64-bit Windows you should copy .dll files from MindRoveSDK )
Now, you are able to use MindRove API in your Unity project.
Examples
For this demo we will create a simple script to read data from the board.
Add a game object to the Scene and attach script below.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using mindrove;
using mindrove.math;
public class SimpleGetData : MonoBehaviour
{
private BoardShim board_shim = null;
private int sampling_rate = 0;
// Start is called before the first frame update
void Start()
{
try
{
BoardShim.set_log_file("mindrove_log.txt");
BoardShim.enable_dev_board_logger();
MindRoveInputParams input_params = new MindRoveInputParams();
int board_id = (int)BoardIds.SYNTHETIC_BOARD;
board_shim = new BoardShim(board_id, input_params);
board_shim.prepare_session();
board_shim.start_stream(450000, "file://mindrove_data.csv:w");
sampling_rate = BoardShim.get_sampling_rate(board_id);
Debug.Log("Mindrove streaming was started");
}
catch (MindRoveError e)
{
Debug.Log(e);
}
}
// Update is called once per frame
void Update()
{
if (board_shim == null)
{
return;
}
int number_of_data_points = sampling_rate * 4;
double[,] data = board_shim.get_current_board_data(number_of_data_points);
// check https://mindrove.readthedocs.io/en/stable/index.html for api ref and more code samples
Debug.Log("Num elements: " + data.GetLength(1));
}
// you need to call release_session and ensure that all resources correctly released
private void OnDestroy()
{
if (board_shim != null)
{
try
{
board_shim.release_session();
}
catch (MindRoveError e)
{
Debug.Log(e);
}
Debug.Log("Mindrove streaming was stopped");
}
}
}
Fixing errors
If you get the error: “Failed to load ‘Assets/Packages/mindrove.x.x.x/lib/BoardController32.dll’, expected x64 architecture, but was x86 architecture.” Or similar error for other native libraries from MindRove you should open this library in Unity editor and fix checkboxes for CPU.
Find Assets/Packages/mindrove.x.x.x/lib/BoardController32.dll inside Unity Editor and click on properties in context menu
In the properties window, on the left tab, under CPU, select “x86”
In the properties window, on the right tab, select ONLY the “x86” checkbox
Restart Unity Editor
Unreal Engine
We provide Unreal Engine Plugin with instructions how to compile and use it. Check Readme for installtion details.
This blog post can help if you want to write your own plugin or extend existing one.
CryEngine
CryEngine uses CMake, build MindRove by yourself first and check C++ examples for instructions to integrate MindRove into CMake projects.
Keep in mind MSVC runtime linking, default in MindRove is static, you can provide -DMSVC_RUNTIME=dynamic
or -DMSVC_RUNTIME=static
to control it.