1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ゲーミングtoio - toio SDK for UnityでLEDを操る

Posted at

概要

toio SDK for UnityでLEDを操ります。フルカラーLEDといえばレインボー(ゲーミングPC風) :rainbow:

GitHub repository

WebGL sample

toioキューブが必要です。
https://zurachu.github.io/toio-rainbow-led/

動画(Twitter)

技術情報

UnityEngine.Colorをtoioランプ制御で使うカラー値に変換するUtility

前回のかるたでもそうでしたが、キューブの接続順(どのキューブがプレイヤー1か?2か?)を認識するために画面表示とLEDの色を合わせるのは、良くある手な気がします。

ToioLedUtility.cs
using UnityEngine;
using toio;

public static class ToioLedUtility
{
    public static void TurnLedOn(Cube cube, Color color, int durationMs, Cube.ORDER_TYPE order = Cube.ORDER_TYPE.Strong)
    {
        cube.TurnLedOn(ColorByteValue(color.r), ColorByteValue(color.g), ColorByteValue(color.b), durationMs, order);
    }

    public static Cube.LightOperation LightOperationOf(Color color, int durationMs)
    {
        return new Cube.LightOperation(durationMs, ColorByteValue(color.r), ColorByteValue(color.g), ColorByteValue(color.b));
    }

    public static byte ColorByteValue(float value)
    {
        return (byte)Mathf.Clamp(value * 255, 0, 255);
    }
}

レインボーグラデーション

#ff0000#ffff00#00ff00#00ffff#0000ff#ff00ff#ff0000のグラデーションするUnityEngine.Color配列を作ってから、先ほどのCube.LightOperationに変換して、キューブに送信します。
Cube.TurnOnLightWithScenarioに一度に送れるLightOperationの上限が29
https://toio.github.io/toio-spec/docs/ble_light#operation-%E3%81%AE%E6%95%B0
なので、4<(29÷6)<5より、1色のグラデーションを4段階かけて行います。

SampleScene.cs
    public async void OnClickConnect()
    {
        var cube = await cubeManager.SingleConnect();
        if (cube == null)
        {
            return;
        }

        var colors = new List<Color>();
        colors.AddRange(Gradation(Color.red, Color.yellow, 4));
        colors.AddRange(Gradation(Color.yellow, Color.green, 4));
        colors.AddRange(Gradation(Color.green, Color.cyan, 4));
        colors.AddRange(Gradation(Color.cyan, Color.blue, 4));
        colors.AddRange(Gradation(Color.blue, Color.magenta, 4));
        colors.AddRange(Gradation(Color.magenta, Color.red, 4));

        cube.TurnOnLightWithScenario(0, colors.ConvertAll(_color => ToioLedUtility.LightOperationOf(_color, 100)).ToArray());
    }

    private List<Color> Gradation(Color fromColor, Color toColor, int division)
    {
        var colors = new List<Color>();
        for (var i = 0; i < division; i++)
        {
            colors.Add(Color.Lerp(fromColor, toColor, (float)i / division));
        }

        return colors;
    }
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?