読者です 読者をやめる 読者になる 読者になる

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

HoloLens で UDP 通信を行う方法について調べてみた

フルプラ FURUPLA 通販 プレゼント フルプラ ダイヤスプレープレッシャー式噴霧器7L 7760, 税込 送料無料 7760 平日PM3時までカード注文⇒即日出荷

  • ★フルプラ ( FURUPLA ) フルプラ ダイヤスプレープレッシャー式噴霧器7L 7760, 【税込・送料無料】7760 平日PM3時までカード注文⇒即日出荷
  • LVpVOBYh
  • 10000円-36%-6400円
  • >



    >
    送料無料キャンペーンコード:【smtb-TK】
    ご注文後は、【発送のご案内】→【送り状No連絡】→【納品書と領収書メール】の各メールをお送りします。
    納品書・領収書は、PCのメールアドレスにのみ、PDFでお送りします。
    名義変更などあれば、後からでも再発行させて頂きます。
    <
    【kk9n0d18p】h4e2

     【商品の説明】
    ●使いやすさと耐久性に優れます。
    ●伸縮式ノズル(ステンレス)で高所・遠所の散布が楽です。
    ●二頭式噴口で作業が早くできます。


    ●園芸用。


    ●ノズル:二頭口●ノズル長さ(mm):950~3000●ホース長さ(m):5●容量(L):7●質量(kg):3.2

はじめに

前回のデモで iPad と HoloLens を OSC で通信しようとした際に通信周りが面倒だったのでまとめておきます。

tips.hecomi.com

ちなみに OSC はアドレス付きのデータを扱えるプロトコルで、UDP ベースのものがよく使われます。

薄いプラス・テク スプリングホース SP-19T 50m, 3,240円(税込)以上のご購入で送料無料!
なので速いですし、生の UDP よりもアドレスや型情報がついている分、圧倒的に使いやすいのでオススメです。

デモ

前回の一例ですが、ここではタッチ座標を iPad から OSC で送信して、それを HoloLens 側で受け取って、その位置に線を描く、というものになっています。

概要

Unity では System.Net.Sockets.UdpClient クラスを利用して簡単に UDP 通信が可能です。

using UnityEngine;
using System.Net;
using System.Net.Sockets;
public class UdpTest : MonoBehaviour
{
    [SerializeField]
    int listenPort = 3333;
    UdpClient udpClient_;
    IPEndPoint endPoint_;
    void Start()
    {
        endPoint_ = new IPEndPoint(IPAddress.Any, listenPort);
        udpClient_ = new UdpClient(endPoint_);
    }
    void Update()
    {
        while (udpClient_.Available > 0) {
            byte[] data = udpClient_.Receive(ref endPoint_);
            // data を使って何か処理する
        }
    }
}

ただ、HoloLens 上で動く UWP アプリでは UdpClient クラスが含まれていません。

代わりに、Windows.Networking.Sockets.DatagramSocket を使う必要があります。

参考: Hololens UDP server? — Hololens Developer Community

コード

ここでは UDP 経由で受け取ったデータは OSC のメッセージに変換して処理するものとします。例として OSC への変換には keijiro さんの unity-osc を利用しています。

github.com

using UnityEngine;
using UnityEngine.Assertions;
#if UNITY_EDITOR
using System.Net;
using System.Net.Sockets;
#else
using System;
using System.IO;
using Windows.Networking.Sockets;
#endif
public class TouchOscServer : MonoBehaviour
{
    [SerializeField]
    int listenPort = 3333;
    Osc.Parser osc_ = new Osc.Parser();
    void OnMessage(Osc.Message msg)
    {
        // ここで適当に処理する
        Debug.LogFormat("{0} => {1}", msg.path, msg.data[0]);
    }
#if UNITY_EDITOR
    UdpClient udpClient_;
    IPEndPoint endPoint_;
    void Start()
    {
        Assert.IsNotNull(handler, "should set handler.");
        endPoint_ = new IPEndPoint(IPAddress.Any, listenPort);
        udpClient_ = new UdpClient(endPoint_);
    }
    void Update()
    {
        while (udpClient_.Available > 0) {
            var data = udpClient_.Receive(ref endPoint_);
            osc_.FeedData(data);
        }
        while (osc_.MessageCount > 0) {
            var msg = osc_.PopMessage();
            OnMessage(msg);
        }
    }
#else
    DatagramSocket socket_;
    object lockObject_ = new object();
    const int MAX_BUFFER_SIZE = 1024;
    byte[] buffer = new byte[MAX_BUFFER_SIZE];
    async void Start()
    {
        try {
            socket_ = new DatagramSocket();
            socket_.MessageReceived += OnMessage;
            await socket_.BindServiceNameAsync(listenPort.ToString());
        } catch (System.Exception e) {
            Debug.LogError(e.ToString());
        }
    }
    void Update()
    {
        lock (lockObject_) {
            while (osc_.MessageCount > 0) {
                var msg = osc_.PopMessage();
                OnMessage(msg);
            }
        }
    }
    async void OnMessage(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
    {
        using (var stream = args.GetDataStream().AsStreamForRead()) {
            await stream.ReadAsync(buffer, 0, MAX_BUFFER_SIZE);
            lock (lockObject_) {
                osc_.FeedData(buffer);
            }
        }
    }
#endif
}
}

Unity と UWP 側で UDP の処理を切り分けています。Unity Eidtor 上の C# プロジェクトでは #else ブロックの内容が補完付きで編集できませんが、ビルド後の C# プロジェクトの中であれば補完付きで編集やデバッグもできるので、手を加えたい場合はビルド後のプロジェクトに対してやるのをオススメします。

本例では OSC 側でデータをキューに詰めてもらってますが(Osc.Parser.FeedData())、生の 送料無料!農機具シーダーテープ播種機楽まきシーダー, 送料無料!!簡単に楽しく種まきができます。
のデータとして使いたい場合も同様に受信部でキューしておいて、メインスレッドで処理されるよう次回の Update 時にキューから取り出して処理、みたいな流れになると思います。

おわりに

HoloLens といろんなものを連携させて是非遊んでみてください。

CodkagalmudugishaLagaHeloWararkaXaqiiqda | ishaWararkaSuganeeSomaliaThursday,April27th,2017HomeWararkaMaantaWararkaDalkaWararkaGalmudugBanaadirNewsEnglishWararkamaantaDHAGEYSO:WaxgaradkaGalmudugookuhanjabayinfarogelindegdegahkusameyndoonaan…-Apr27,2017WaxaaodayaashadhaqankaGalmudug,markiiuguhoreysaykahadleendoorashadamadaxweynahamaamulkaoodib...Akhriso:BooqashadaFarmaajoEeTurkigaIyoHehiisyadaTaariikhigaAhEeLabadaDhinac-Apr27,2017MadaxweynahaSoomaaliyaMaxamedCabdullahiFarmaajoiyowafdiuuhogaaminayoayaahaatanbooqasho3maalmood...WARDEGDEG:LaboWiilooWalaaloahoosixungoordhowloogudilayMuqdisho(Magacyadooda)-Apr27,2017WararkanagasoogaarayodegmadaWadajirayaakuwaramayainlagudilayxaafadaSiliga...Top:DFoobillowdayqorshihiiciidanka&SidalooguqeybiyeyMaamulada-Apr27,2017WasiirkaDifaacaXukumaddaSoomaaliyaC/rashiidC/llaahiMaxamedayaabilaabaydiyaarintaCiidamadaXooggaeedhawaan...XOG:BeelishortaagtayMasuuluuMagacaabayRWkheyreiyoMDFarmaajooofarogeliyay-Apr27,2017CuleesbadanayaadhankabeeshaDaaroodkagayimidMadaxweyneFarmaajoKadibmarkiiladamcay...WarDegDeg:-Al-shabaabooWeerarKuahHoteeloayDeganYihiinWasiiradaSoomaliya-Apr27,2017IlolagukalsoonankaroayaaxaqiijiyayinDagaalyahanaxXarakadaAl-shabaabayweerarkuyihiinHoteelo...Sawirro:14RuuxooShubanBiyoodugugeeriyootaydeegaankaGadoon-Apr27,2017DeegaankaGadoonoohoostagadegmadaDhuusamareebeeGobolkaGalgaduudayaatodobaadkanwaxaacudurkaShuban...WarDegDegah:-Ra’iisulWasaarahaSoomaaliyaooMuqdishokulaShirsanHogaamiyahaGuudEeAhlusunna-Apr26,2017Ra'iisulWasaarahaXukumaddaSoomaaliyaXasanCaliKheyrreayaaCaawaKulanlalehGuddoomiyahaGuud...WARDEGDEGAH:MadaxweyneFarmaajoooYuusufJeelleumagacaabayXilCusub-Apr26,2017MadaxweynahaSoomaaliyaMaxamedC/llaahiFarmaajoayaamaantaumagaacabayMaareeyahaGuudeeHey’addaSaadaasha...(WarCusub);-MusharraxiintaMadaxweynahaMaamulkaGalmudugooMudoKoobanLooQabtay..-Apr26,2017GuddigadoorashadaGalmudugayaamuddo24-saacahgudaheedugayeeraydegmadaCadaadoineyku...FAALLO:YaadiiddanDowladdaMadaxweyneFarmaajo?-Apr26,2017Waxaanfalanqeyn-taydansikoobanugusharraxayaaindadbadanaysiqaldanuisticmaalayaan...DHAGEYSO:MahadSalaad”MadaxdaQarankaeeGodkakuridayaCiidamadawaaninlaFadeexeeyalanaMaxkamadeeyo”+(XildhibaanDamu-Jadiid)..-Apr26,2017ildhibaanMahadMaxamedSalaadookamidahXildhibaanadaBaarlamaankaSoomaaliyaayaasheegayin...DEGDEG:DagaalculusoocaawakadhaxqaraxayAl-ShabaabiyoEthiopia-Apr26,2017WararkainagasoogaarayaGobolkaHiiraanayaawaxaaaysheegayaaninDagaalculusuu...DAAWO:MadaxweyneFarmaajooosiweynloogusoodhaweeyayTurkiga-Apr26,2017MadaxweynahaDFSMudaneMaxamedCabdullahiFarmaajoayaagoordhowgaaraymagaaladdaAnkaraeecaasimaddadalka...WararkiiugudanbeeyayshirxasaasiahoocaawausocdaRWKheyre&MadaxdaAhlusuna-Apr26,2017WararkalagahelayomagaaladaMuqdishoayaasheegayainuushirxasaasiahcaawausocdo...­­­MusharaxMadaxweyneXaafDucaaleGeelleoowadaQorshelaguHormarinayoBulshadaGalmudug”Sawiro”-Apr25,2017MusharaxaMadaxweynahaDowladGoboleedkaGalmudugMudaneXaafDucaaleGeelleookamidaMusharaxiintaUgu...Wardegdegah-:JenGabreooweerarAfkaahkuqaadayMadaxweynahaSoomaaliya.-Apr25,2017JenGabreookamidahsaraakiishaciidamadaEthiopiaayaabartauukuleeyahay...UlajeedkaSafarkaMadaxweyneFarmaajoEeDalkaTurkiga-Apr25,2017MadaxweynahaSoomaaliyaMaxamedCabdullahiFarmaajoayaasaacadahasoosocdakusiijeedadalkaTurkiga,...DEGDEG:AskaridilayWiiliyoAabihiisoogoordhowlatoogtay-Apr25,2017WararkainagasoogaarayaMagaaladaBaydhaboeeGobolkaBaayayaawaxaaaysheegayaanin...WARCULUS:DiyaaradodagaalooduqeeyayGedo&HaliskujirtaNoloshaSaraakiilShabaabcaanah..-Apr25,2017WararkanagasoogaarayagobolkaGedoayaasheegayainhalkaasayxalaykadhaceen...EnglishNewsSomalia:Healthyherdshelpcommunitiessurvive-Jan6,2017Inacrowdedpenmadeofthornyshrubbrushesandtwigs,aherderpulls...U.S.airstrikeinSomaliakilledlocalmilitia,notalShabaab-Nov10,2016ASeptemberU.S.airstrikeinSomaliakilledlocalmilitiaforcesandnotal...SaudikingsendscongratulationstoSomalia,butonwrongday-Oct23,2016SaudiArabia'sKingSalmanhascongratulatedSomalia"ontheanniversaryofthecountry'snational...Somalipiratesfreeforeignsailors‘for3mransom’-Oct22,2016ThecrewofafishingvesselhijackedbySomalipiratesfourandahalf...AMISOMapologisesforshootingdeadacivilianinSomalia-Oct21,2016TheAfricanUnionpeacekeepingmissioninSomalia(AMISOM)onThursdayapologisedforshootingdeada...SomalisecurityforcesapprehendAljazeerajournalist-Oct19,2016TheSomalisecurityforcesarrestedAljazeerajournalist,HamzaMohamedtogetherwiththreeotherjournalists...7DeadasSomaliTroopsFightAl-ShababinTownNearCapita-Oct19,2016SomalipolicesayatleastsevenaredeadafterhoursofclashesasSomali...DowladdaItoobiyaooSoobandhigtayXaqiijintaHeshiiskaPuntlandiyoGalmudug.-Oct19,2016WasaraddaArrimahaDibaddaItoobiyaayaaBarteedaInternetkakusooqortayjiritaankaHeshiiskaaydhanka...WararkiiugudambeeyayAfgooyeiyoCiidamadaDFoodibulawareegay-Oct19,2016CiidamadadowladdaSoomaaliyaayaadibugulaabtaydegmadaAfgooyeeeGobolkaShabeellahaHoose,saacado...Sawiro-MadaxweynahaGalmudugoodhagaxdhigaywaddooyincusub-Oct18,2016MadaxweynahaGalmudugayaamaantadibugulabatayMagaladaCadaadoiyadoohalkaasisidiiranloogu...WardegdegAh:-DagaalCulusooHaddaKaSocdaAfgooye+khasaaraha-Oct18,2016WargoordhawkusoodhacayWarqabadkaWakaaladaWarqaad.comayaasheegayainDagaalXooganuu...Dhageyso-BanaabaxXooganookasocdaMagalada….-Oct18,2016Banaabaxxooganooloogasoohorjeedawarqadkasoobaxayqaramadamadoobeislamrkanalagu...Degdegah-WasiirkaAmnigaGalmudugoogaalkacyokagadhawaaqayarinkusaabsan…-Oct18,2016Wasiirkaamnigagalmudugcismaanciisenuurtaardhuleedoogordhowlahadlaywarbaahintaayaa...DHEGEYSO-XasanSheekh*GalkacyowaxayahaydmeelaanlaguhoyanGalmudugkahor*.-Oct18,2016MadaxwaynahaSoomaliyaXasansheikhayaatilmamayintaaanGalmuduglaDhisiningaalkacyoay...DegDeg:-GalmudugooWarkasoosaartayWada-hadalkaPuntland-Oct18,2016DowladdaGalmudugayaaWarkasooSaartayWada-hadalkaGalmudugaylagaleysoMaamulkaPuntland,...MadaxweynahaGalmudugooUgaasXasanugubaaqayinuuTaageeroMaamulkaHirshabeelle”Sawiro”-Oct18,2016MadaxweynahagalmudugayaamaantadibugusoolabatayMagaladacadaadomadaxweynahaayaawaxaasafarkiisaku...WarDegDegah:-DadkaMagaaladaGaalkacyoooSaakakaCabsiqabainlaguDuldagaalamo-Oct18,2016WararkakaimaanayamagaaladaGaalkacyoeegobolkaMudugayaawaxaysheegayaaninsaakayhalkaasi...MadaxweynahaoouhambalyeeyeymadaxdacusubeemaamulkaHirshabeelle:-Oct18,2016MadaxweynahaJamhuriyaddaFederaalkaeeSoomaaliya,MudanaXasanSheekhMaxamuud,ayaauhambalyeeyayhoggaankacusub...DhageysoDhamaanqudbadihiilagajeediyaydoorashadamadxaweynahahirshabelleiyokuxigeenkiisa….-Oct17,2016MadaxweynahaHirshabellecalicabdulaahiwarsameiyomadaxweynekuxigenkiisacaliguudlaweayaauguhoreyntiiHoos...DEGDEG:CaliGuudlaaweookuguuleystaydoorashadaMadaxweynekuxigeenkaHirshabeelle-Oct17,2016CaliCabdullaahiXuseen(CaliGuudlaawe)ayaakuguuleystaydoorashadaMadaxweynekuxigeenkaMaamulkaHirshabeelle,kaddib...MuuqaalkaGobolkaBanaadirFreeUsersOnlineCounterFARSAMADIICaydaruus©2017CodkagalmudugishaLagaHeloWararkaXaqiiqda-Allrightsreserved.DesignedBye:CaydaruusFirginle.