Skip to content

Commit

Permalink
Merge pull request #18 from BRomans/unity-examples
Browse files Browse the repository at this point in the history
📝 updated README-Unity.md code examples with new naming convention
  • Loading branch information
dmedine authored Oct 28, 2021
2 parents bb0f510 + 048aaa2 commit d1ce342
Showing 1 changed file with 42 additions and 37 deletions.
79 changes: 42 additions & 37 deletions README-Unity.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ LSL.cs includes a Unity interface to liblsl as a [Unity native plug-in](https://
1. When the cube is selected, in the Inspector click on "Add Component", and create a new script called LSLInput.
1. In the Project viewer, double click on LSLInput.cs. This should launch Visual Studio or another IDE.
1. Fill in the script. Use [LSL4Unity AInlet](https://github.com/labstreaminglayer/LSL4Unity/blob/master/Scripts/AInlet.cs) for inspiration.
* There is [currently a bug](https://github.com/sccn/liblsl/issues/29) that prevents liblsl in Unity from resolving streams from _other_ computers while running in editor, and also the built product but only when using `ContinuousResolver`. For this reason we recommend using `liblsl.resolve_stream` instead.
* There is [currently a bug](https://github.com/sccn/liblsl/issues/29) that prevents liblsl in Unity from resolving streams from _other_ computers while running in editor, and also the built product but only when using `ContinuousResolver`. For this reason we recommend using `LSL.resolve_stream` instead.

```cs
using System.Collections;
Expand All @@ -32,19 +32,22 @@ public class LSLInput : MonoBehaviour
{
public string StreamType = "EEG";
public float scaleInput = 0.1f;
LSL.StreamInfo[] streamInfos;
LSL.StreamInlet streamInlet;

StreamInfo[] streamInfos;
StreamInlet streamInlet;

float[] sample;
private int channelCount = 0;

void Update()
{
if (streamInlet == null)
{

streamInfos = LSL.resolve_stream("type", StreamType, 1, 0.0);
if (streamInfos.Length > 0)
{
streamInlet = new LSL.StreamInlet(streamInfos[0]);
streamInlet = new StreamInlet(streamInfos[0]);
channelCount = streamInlet.info().channel_count();
streamInlet.open_stream();
}
Expand Down Expand Up @@ -79,41 +82,43 @@ public class LSLInput : MonoBehaviour

1. Attach a new component called LSLPosOutput to the cube.
1. Edit it as follows:
```cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LSL;
```cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LSL;

public class LSLOutput : MonoBehaviour
{
private LSL.StreamOutlet outlet;
private float[] currentSample;
public class LSLOutput : MonoBehaviour
{
private StreamOutlet outlet;
private float[] currentSample;

public string StreamName = "Unity.ExampleStream";
public string StreamType = "Unity.StreamType";
public string StreamId = "MyStreamID-Unity1234";

// Start is called before the first frame update
void Start()
{
LSL.StreamInfo streamInfo = new LSL.StreamInfo(StreamName, StreamType, 3, Time.fixedDeltaTime * 1000, liblsl.channel_format_t.cf_float32);
LSL.XMLElement chans = streamInfo.desc().append_child("channels");
chans.append_child("channel").append_child_value("label", "X");
chans.append_child("channel").append_child_value("label", "Y");
chans.append_child("channel").append_child_value("label", "Z");
outlet = new LSL.StreamOutlet(streamInfo);
currentSample = new float[3];
}
public string StreamName = "Unity.ExampleStream";
public string StreamType = "Unity.StreamType";
public string StreamId = "MyStreamID-Unity1234";

// Update is called once per frame
void FixedUpdate()
{
Vector3 pos = gameObject.transform.position;
currentSample[0] = pos.x;
currentSample[1] = pos.y;
currentSample[2] = pos.z;
outlet.push_sample(currentSample);
}
// Start is called before the first frame update
void Start()
{
StreamInfo streamInfo = new StreamInfo(StreamName, StreamType, 3, Time.fixedDeltaTime * 1000, LSL.channel_format_t.cf_float32);
XMLElement chans = streamInfo.desc().append_child("channels");
chans.append_child("channel").append_child_value("label", "X");
chans.append_child("channel").append_child_value("label", "Y");
chans.append_child("channel").append_child_value("label", "Z");
outlet = new StreamOutlet(streamInfo);
currentSample = new float[3];
}
```


// Update is called once per frame
void FixedUpdate()
{
Vector3 pos = gameObject.transform.position;
currentSample[0] = pos.x;
currentSample[1] = pos.y;
currentSample[2] = pos.z;
outlet.push_sample(currentSample);
}
}
```

0 comments on commit d1ce342

Please sign in to comment.