SlideShare a Scribd company logo
1 of 20
 HN :けのじ
 すきなこと :電子工作とかUnityとか
 Twitter :kxe2n4o0ji
 作ってたもの :
 1.VR に自作デバイスを組み合わせると楽しい話
 2.UnityでCOMポートを毎回選ばなくても
大丈夫な感じのやっつけをした話
VRコンテンツでは入力に何を利用していますか?
 PS・Xbox用コントローラ
 キーボード・マウス
 Vive,Touch,Move等のモーションコントローラ
 ハンドル,鉄騎,音ゲー等の専用コントローラ
 自作ってる。
 えとせとら。
ハードウェア自作は楽しいぞ。
 作成するコンテンツに合わせて作るため、操作の違
和感が少なく没入感が損なわれにくい。(はず)
 体験を見ている人に対しても何をやっているか伝わ
りやすい。(インパクトもある)
 ロマンがあって楽しい。(ココが一番大事)
 Arduinoを利用すれば非常に簡単に自作可能。
凹みtipsさんの記事を参考にすれば本当にすぐ連携できます
記事ページ:http://tips.hecomi.com/entry/2014/07/28/023525
 ブレッドボード等を利用すれば半田付けもほぼ不要
 HIDデバイスの代わりになれる機種もあるため、
キー入力のみであれば通信周りも書く必要なし。
ひとまず
 Arduino UNO  3,240
※HIDデバイスとして用いたい場合は、Arduino Leonard
 ブレッドボード 100~300
 ジャンパピン 100~300
(amazon価格)
+組み合わせたいもの(5V駆動だと尚良し)を買えば大体OK
互換基板であれば300~1,000ほどで購入可能です。
(初めてで互換基板を購入するのはおすすめしません)
 デバイス自作は意外と簡単
 デバイス自作は結構安い
 失敗しても数千円程度なのでレッツトライ!
(ゲームジャムとかでデバイス作っても面白いですよ)
 シリアル通信を利用するとき(Windowsの場合)、デバイ
スにはCOMポートという通信用の番号が割り振られる。
 COMポートの番号は差し込むUSBの口やマシンが異なる
と変わることがあるため、何らかの方法で通信を行うス
クリプトに接続先ポートを伝えなければいけない。
 そこでやっつけではあるが起動時に目的のデバイスを見
つけてそこに自動で接続できるようにしたという感じ。
(文字多めで申し訳ないです
 C#ではWMI(Windows Management Instrumentation)のWin32_PnPEntityクラス
を利用することでデバイスマネージャーに記載されてい
る内容を取得できる。
 上記を利用して接続されているデバイスのCOMポートの
番号とデバイス名を列挙するコンソールアプリケーショ
ンを作成した。
 作成したアプリケーションをUnity上から実行し、実行結
果文字列から検索を行い、合致したデバイス名を持つ
COMポートを設定することで、ポートが変わっても編集
を加えることなく接続を行えるようになった。
using System;
using System.Text.RegularExpressions;
using System.Management;
namespace GetComDevices
{
class Program
{
static void Main(string[] args)
{
Regex check = new Regex("(COM[1-9][0-9]?[0-9]?)");
ManagementClass mc = new ManagementClass("Win32_PnPEntity");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
var namepv = mo.GetPropertyValue("Name");
if (namepv == null) continue;
string name = namepv.ToString();
if (check.IsMatch(name))
{
Console.WriteLine(name+"t"+check.Match(name));
}
}
}
}
}
.exeファイルはプロジェクトフォルダの直下に配置。
//イベントハンドラの設定
p.OutputDataReceived += OutputDataHandler;
p.EnableRaisingEvents = true;
p.Exited += Process_Exit;
//実行
p.Start();
p.BeginOutputReadLine();
}
//出力を受け取るとたたかれる
private void OutputDataHandler(object sender, DataReceivedEventArgs args)
{
if (!string.IsNullOrEmpty(args.Data))
{
if (args.Data.IndexOf(SearchWord) != -1)
{
PortNum = args.Data.Split('t')[1].Trim();
}
}
}
//出力が終わったらSerialHandlerの設定用メソッドをたたく
private void Process_Exit(object sender, EventArgs e)
{
sh.SetPortName(PortNum);
Process proc = (Process)sender;
proc.Kill();
}
}
using System;
using System.Diagnostics;
using System.IO;
using UnityEngine;
using Debug = UnityEngine.Debug;
public class SearchCom : MonoBehaviour
{
public SerialHandler sh;
public String SearchWord; //ハードウェア名(部分一致でおk)
private String PortNum;
void Awake() {
ProcessStart();
}
/// <summary>
/// プロセスをたたく
/// </summary>
void ProcessStart()
{
Process p = new Process
{
StartInfo =
{
FileName =Directory.GetCurrentDirectory() +
@"GetComDevices.exe",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = false,
RedirectStandardInput = false,
CreateNoWindow = true
}
};
SearchCom.cs – コンソールアプリを実行,SerialHandlerへの代入処理
/*削除
void Awake()
{
Open();
}
削除*/
/*追加*/
//portNameを設定した後、ポートを開く
public void SetPortName(String Name)
{
portName = @"..." + Name;
Open();
}
//開くまで少し時間がかかるため、開いているか外からでも確認するため
public bool getIsRunning()
{
return isRunning_;
}
/*追加*/
SerialHandler.cs – 凹みtipsさんで掲載されていたプログラム
(http://tips.hecomi.com/entry/2014/07/28/023525)を一部書き換えて使用、変更箇所のみ
記載。
using System;
using UnityEngine;
using System.Collections;
public class SerialController : MonoBehaviour {
public SerialHandler serialhandler;
void Start()
{
//ポートが開くまで待つ
while (!serialhandler.getIsRunning()) { }
serialhandler.OnDataReceived += OnDataReceived;//イベンドハンドラ
}
/// <summary>
/// シリアルメッセージを受信したらここが叩かれる
/// </summary>
/// <param name="message">受信したメッセージ本文</param>
void OnDataReceived(string message)
{
Debug.Log(message);
}
}
SerialController.cs – 値のやり取りをするサンプル
ポートが開くのを待つ処理を追記
 本当はDll化等をしてUnityのみで完結するほうが良
いが、技量不足でできなかった。
 外部プロセスを叩く関係上、ポートが開くまで時間
がかかるので、アクセスするほかのスクリプト側の
対応も必要になってしまった。
 エディタ上だけでなくビルドしてからの実行でも問
題なく利用できたため、間に合わせではあるものの
展示等ではそこそこ便利かもと思った。
(そのうちどっかにちゃんと書きます
ご清聴ありがとうございました。

More Related Content

What's hot

「まもってふやそう!カブトガニ」 大好きなカブトガニの育成アナログゲームを開発したときに譲れなかったUIの話
「まもってふやそう!カブトガニ」 大好きなカブトガニの育成アナログゲームを開発したときに譲れなかったUIの話「まもってふやそう!カブトガニ」 大好きなカブトガニの育成アナログゲームを開発したときに譲れなかったUIの話
「まもってふやそう!カブトガニ」 大好きなカブトガニの育成アナログゲームを開発したときに譲れなかったUIの話
NatsukiAbe
 

What's hot (9)

「まもってふやそう!カブトガニ」 大好きなカブトガニの育成アナログゲームを開発したときに譲れなかったUIの話
「まもってふやそう!カブトガニ」 大好きなカブトガニの育成アナログゲームを開発したときに譲れなかったUIの話「まもってふやそう!カブトガニ」 大好きなカブトガニの育成アナログゲームを開発したときに譲れなかったUIの話
「まもってふやそう!カブトガニ」 大好きなカブトガニの育成アナログゲームを開発したときに譲れなかったUIの話
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
 
Unity study2018_1
Unity study2018_1Unity study2018_1
Unity study2018_1
 
Unity2015_No7_~Unity2D~
Unity2015_No7_~Unity2D~Unity2015_No7_~Unity2D~
Unity2015_No7_~Unity2D~
 
Unity&unreal engineハンズオン資料 unreal_4.8
Unity&unreal engineハンズオン資料 unreal_4.8Unity&unreal engineハンズオン資料 unreal_4.8
Unity&unreal engineハンズオン資料 unreal_4.8
 
はじめてのUnity教室 講義用ppt
はじめてのUnity教室 講義用pptはじめてのUnity教室 講義用ppt
はじめてのUnity教室 講義用ppt
 
講義用Ppt windows女子部
講義用Ppt windows女子部 講義用Ppt windows女子部
講義用Ppt windows女子部
 
【Unity道場Houdini編】Houdini Engine とプロシージャル法
【Unity道場Houdini編】Houdini Engine とプロシージャル法【Unity道場Houdini編】Houdini Engine とプロシージャル法
【Unity道場Houdini編】Houdini Engine とプロシージャル法
 
金沢工業大学電子計算機研究会新入生向けUnity講習会資料
金沢工業大学電子計算機研究会新入生向けUnity講習会資料金沢工業大学電子計算機研究会新入生向けUnity講習会資料
金沢工業大学電子計算機研究会新入生向けUnity講習会資料
 

Viewers also liked

2014.3.30 第二回裏Ocufes登壇資料 高校生的おきゅらす
2014.3.30 第二回裏Ocufes登壇資料 高校生的おきゅらす2014.3.30 第二回裏Ocufes登壇資料 高校生的おきゅらす
2014.3.30 第二回裏Ocufes登壇資料 高校生的おきゅらす
Keito Tanizaki
 

Viewers also liked (8)

2014.3.30 第二回裏Ocufes登壇資料 高校生的おきゅらす
2014.3.30 第二回裏Ocufes登壇資料 高校生的おきゅらす2014.3.30 第二回裏Ocufes登壇資料 高校生的おきゅらす
2014.3.30 第二回裏Ocufes登壇資料 高校生的おきゅらす
 
Oculus riftとペンタブレットを利用した作品作りについて
Oculus riftとペンタブレットを利用した作品作りについてOculus riftとペンタブレットを利用した作品作りについて
Oculus riftとペンタブレットを利用した作品作りについて
 
Touch demoを体験してみて
Touch demoを体験してみてTouch demoを体験してみて
Touch demoを体験してみて
 
腱鞘炎の効率厨がPC環境を改善するとこうなる(没ver)
腱鞘炎の効率厨がPC環境を改善するとこうなる(没ver)腱鞘炎の効率厨がPC環境を改善するとこうなる(没ver)
腱鞘炎の効率厨がPC環境を改善するとこうなる(没ver)
 
パソコンが光った
パソコンが光ったパソコンが光った
パソコンが光った
 
自作GPUへの道
自作GPUへの道自作GPUへの道
自作GPUへの道
 
お布団に入ったまま快適にパソコンがやりたい
お布団に入ったまま快適にパソコンがやりたいお布団に入ったまま快適にパソコンがやりたい
お布団に入ったまま快適にパソコンがやりたい
 
機械語プログラミング
機械語プログラミング機械語プログラミング
機械語プログラミング
 

VRコンテンツに自作デバイスを組み合わせると楽しい話