ゲーミングtoio - toio SDK for UnityでLEDを操る
概要
toio SDK for UnityでLEDを操ります。フルカラーLEDといえばレインボー(ゲーミングPC風)
GitHub repository
WebGL sample
toioキューブが必要です。
https://zurachu.github.io/toio-rainbow-led/
動画(Twitter)
ゲーミング #toio pic.twitter.com/SY7y8FkjLZ
— ヅラChu (@zurachu) January 12, 2021
技術情報
UnityEngine.Colorをtoioランプ制御で使うカラー値に変換するUtility
前回のかるたでもそうでしたが、キューブの接続順(どのキューブがプレイヤー1か?2か?)を認識するために画面表示とLEDの色を合わせるのは、良くある手な気がします。
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段階かけて行います。
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;
}
Author And Source
この問題について(ゲーミングtoio - toio SDK for UnityでLEDを操る), 我々は、より多くの情報をここで見つけました https://qiita.com/zurachu/items/b74eebb21d4043500578著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .