UnityOSCをDLしてプロジェクトに追加しよう
UnityOSCをダウンロードしてプロジェクトに追加します。
ダウンロードしたファイルの中から、src
フォルダに張っている以下のファイルが必要になります。
UnityOSC-master
└src
└Editor/
└OSCHelper.cs
└OSC
└OSCBundle.cs
└OSCClient.cs
└OSCPacket.cs
└OSCServer.cs
└OSCHandler.cs
Editorのディレクトリは必ずAssets
フォルダ直下に置く必要がありますが、他は移動させても大丈夫です。
テスト用のコードを書こう
こちらのGitHubのサンプルを流用します。
ポート番号を外から変更できるように下記の変更を加えておきます
//...
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityOSC;
public class oscControl : MonoBehaviour {
#region Network Settings //----------追記
public int InComingPort; //----------追記
#endregion //----------追記
private Dictionary<string, ServerLog> servers;
// Script initialization
void Start() {
OSCHandler.Instance.Init(InComingPort); //init OSC //----------変更
servers = new Dictionary<string, ServerLog>();
}
// NOTE: The received messages at each server are updated here
// Hence, this update depends on your application architecture
// How many frames per second or Update() calls per frame?
void Update() {
OSCHandler.Instance.UpdateLogs();
servers = OSCHandler.Instance.Servers;
foreach( KeyValuePair<string, ServerLog> item in servers )
{
// If we have received at least one packet,
// show the last received from the log in the Debug console
if(item.Value.log.Count > 0)
{
int lastPacketIndex = item.Value.packets.Count - 1;
UnityEngine.Debug.Log(String.Format("SERVER: {0} ADDRESS: {1} VALUE 0: {2}",
item.Key, // Server name
item.Value.packets[lastPacketIndex].Address, // OSC address
item.Value.packets[lastPacketIndex].Data[0].ToString())); //First data value
}
}
}
}
OSCHandler.Instance.Init
のメソッドにポートを動的に渡せるようにしたので、引数の数が違うこのようなエラーができます。
OSCHandler.cs
には受け取った引数をポート番号として渡すように修正を加える必要があります。
public void Init(int inComingPort)//----------変更
{
//Initialize OSC clients (transmitters)
//Example:
//CreateClient("SuperCollider", IPAddress.Parse("127.0.0.1"), 5555);
//Initialize OSC servers (listeners)
//Example:
CreateServer("iPhone", inComingPort);//----------変更
}
これでエラーが消えます。
受信側のPC側のIPアドレスを調べよう
次にデータを送信するiPhone側の設定が必要なのですが、受信側のPCのIPアドレスが必要になるので調べておきましょう。 コンソールを立ち上げて下記のコマンドを入力します。
$ ifconfig
こんな感じのログが出てくるのでen0
のinet
のアドレスを控えておきます。
送信側のiPhoneの設定をしよう
次にiPhone側の設定をしましょう。
アプリは何でも大丈夫ですが、サンプルではTouch OSC
を使用しました。
設定画面では、先ほどのIPアドレスをHostに設定し、ポートの番号を確認します。
Unity側で設定をしよう
あとはUnity側での設定になります。
空のゲームオブジェクトを作成し、先ほど作成したプログラムoscControl.cs
をアタッチしましょう。
In ComingPortには送信側のiPhoneでチェックしたポート番号を入力します。
Window > OSCHelper
を開いて受信ができている事を確認しましょう。