まったり開発日誌

開発していて、気になったことやデジタルガジェットについての感想とかを徒然と綴っていくよ

普段、SHURE512LEを使っててイヤフォン派なのだけれど、今回、とある理由で安く手にいれることができるというのを聞いて、Skullcandycrusherが売ってる店舗に行ってきた。位置的には、原宿駅からちょっとだけ歩く位置に店舗があった。
IMG_1936
店舗は若い方が運営してるようで、閉店間際にいったわりには、活気があったように思った。
ヘッドフォンの色の種類はいろいろあったのだが

IMG_1937
自分の作品のVR物に使おうと思って買いに来たのが今回の目的だったので、自分の作品のVRで使っている自転車のデザインが赤がベースになってるので、自分は赤を選んだ(あと普段使いで使うとしても好きな色なので)

IMG_1942
店舗で体験できる装置があったのだが、装置自体が震えるので正確に体感できないのと、ソースが悪いのか、電池がなくなっていたのか、あまり震えるのを体感できなかった。とりあえず、買って家で試すことにした。で、数時間使ってみてすごくいいと思ったので、レビュー的なのを書きたくなった。音質的には140000円ぐらいの値段相応の音のヘッドフォンではあるものの、ウーハーが付いていて震えるというのが売りのヘッドフォンなのだが、これがすごくいい。マンション住まいとかだと、ウーハーってなかなか付けられなくて映画とか見るときや音楽を聴くときに物足りないなぁと感じる場合が多いのだけれど、これはヘッドフォンなので、そういうのを気にせずにウーハーを直に感じられる。しかも耳直下という敏感なとこについているので、映画館で映画を見たときに感じる音が震える感じがせまい自宅でも感じられるという体験が得られる。さっそくVR作品に使おうと思う。個人的には今の所、そこそこの値段でいい体験が得られたので、今年一番コスパが高い製品を買ったなぁという印象。映画館で映画見るの好きな人で空気が揺れるのが好きな人とか、ゲーム好きの人とか、VRで使用したりするのに是非おすすめしたい商品だと思う。ちなみに、ちょっとだけ音漏れするので、普段使いはちょっとだけ難しいかも。

絶賛開発中のMFT2016のイベントのゲームで使うハートレートセンサーMio Fuseを買いました。なかなか、かっこいいかつ使えるデバイスだったのでレポを載せます。箱はマイナーデバイスの割に高級感があってワクワクさせてくれます。
IMG_1734
最初フタを開けたところがこんな感じになります。かなり丁寧に梱包されてます。
IMG_1735
充電するためのUSBデバイスは、箱の底に入ってます。HRの腕輪の裏側に端子がぴったりくっついて充電できるようになってます。
IMG_1736
実際にHRモニターを表示したところ、マトリックスのLEDになってて、夜間でもすごく見やすそうですね。ちなみに、リストバンド部分をタッチできるのとHOLDできるようになってて操作するようになってます。
IMG_1737
個人的なお勧め度ですが、胸につける型のHRセンサーをこれまで使ってたのですが、リストバンド型は汗かいて気持ち悪くなること少なそうなので、胸につけるHRセンサーよりも気に入りました。あととにかく表示部分がカッコイイ、あと、それぞれのお気に入りのヘルスアプリ(Cats Eye Cycling,LIveCycling,Stravaとか、Runkeeperとか)と連携できるのでカスタマイズ性もかなりあったりとか公式アプリももちろん使い勝手は良いと思います。

今日のアキバは、アダルトVRで混んでいたようですが、そこには行かず、スマートドールが割引価格で買えるワークショップの下見を兼ねてスマートドール Danny Chooさんのお店がどんな感じなのか、行ってみました。黒いドアを入って、後ろを振り向くと、ピンナップ
ちなみに、土禁で入り口で靴を脱ぎます。

IMG_1709

眼前に広がるのは、多数のフィギュア、フィギュア自体の大きさは、標準サイズのフィギュアと比べたら、満足感ある大きさだなぁ。これ、持って街歩いたら、すごい目立つなぁ、きっと。
IMG_1686

机の上に置かれているのをじっくり見ていく。
IMG_1705 手をつないでて可愛い。
IMG_1706 棚にもたくさんの洋服が様々なので、洋服屋さんで着まわしのサンプル見てるみたいで 楽しい(自分男だけど)
IMG_1681
IMG_1688
IMG_1680
ディスプレイの仕方、小物を含めおしゃれ感あるよなぁ。
IMG_1707
IMG_1696
等身大のSWのドールがなぜか、フィギュアの体パーツを IMG_1683
ドレス娘三人衆、かわええなぁ。
IMG_1685
シースルーのフィギュアもあったり
 111
IMG_1699
なぜか、Iron Manの手が
IMG_1701
痛ロードバイクとフィギュア
IMG_1708
等身大のフィギュア
IMG_1711
オフィスレディ
IMG_1712
着ぐるみ着てるのも可愛いね。
IMG_1716
アパレルの陳列
IMG_1691
壁に立てかけてある、フィギュアも洋服がすごいフェミニンで可愛い。
IMG_1692
ちなみに洋服の一つの値段はこのぐらい。いい値段するねぇー
IMG_1717
グッズのTシャツ
IMG_1698 ウィッグ的な髪の毛
IMG_1693
ロボ化するための試作と商品化するための色々
IMG_1715
IMG_1713
IMG_1714
ロボ化のお話とそれを商品にするための過程のお話(失敗談)とそれが、新作のUSBハブドールになったお話をちょっとだけ聞いてきた。
IMG_1690 ちなみに個人で改造をやるぶんには簡単だよって言ってたけど、サーボとか部品も作ったって言ってて、簡単じゃない気が(ry
というわけで、スマートドールさんでした。
ちなみに、パーツ売りもすぐにするそうなので、改造して失敗しても大丈夫だね
(お財布が大丈夫じゃない)
改造とかのコミニティ作りたいって言ってましたよー。
関連リンク
スマートドール -Danny Choo










 この記事はUnreal Engine 4 (UE4) 其の弐 Advent Calendar 2015 の17日目の記事です。昨日は、@tempkinderさんの「Stationary Lightの影について」でした。影関係はモバイル等も混じってくる、出たり出なかったりするので、実装の違いが載っていてなぜでないのかなとか考える指針にもなるのでありがたい記事でしたね。

 今回は、前々回のぷちコン、前回のぷちコンで外部のデバイスと通信するために使ったSocket通信について解説したいと思います。UE4のマルチプレイの実装については、以前、UE4のUnreal Fest2015で@alweiさんが話していて大変勉強になるものでしたが、たとえば、PC側でゲーム画面を、iPadと通信して現在位置のMapを表示したいだとか、僕の場合のように最近はIotデバイス(Arduino等)が流行っているので、それらと通信したいとかいう時、必ずしも、マルチプレイの方法では実装できるとは限らないのでそのような場合にSocketを使った通信を実装しようというものです。

早速、解説していきたいと思います。詳細のソースに関しては、githubをみてもらうとして、要点だけ説明したいと思います。


 まず、SocketでつなぐBP用のメソッドを作ります。 

bool ABikeSensorCommunicationActor::connectBikeSensor(const FString &IP,const int32 &port){
    ConnectionSocket = CreateTCPConnection(IP, port,1024);
    if(!ConnectionSocket){
        return false;
    }
    

    if(TimerHandle.IsValid() == false){
        GetWorldTimerManager().SetTimer(TimerHandle, this,
                                        &ABikeSensorCommunicationActor::TCPSocketListener, 1.0f / 60.0f, true);
    }
    
    
    return true;
}

ここでの、SetTimerは、Socketをつないだ後、別スレッドで、通信スレッド(TCPSocketListener)を作っています。1/60秒で通信をチェックするように
します。


次に、それぞれのOSのSocketSystemを取得し、IP,Portなどを設定してConnectします。そして、FSocketのオブジェクトを作り返しています。

FSocket* ABikeSensorCommunicationActor::CreateTCPConnection(const FString& TheIP, const int32 ThePort,const int32 ReceiveBufferSize)
{
	FSocket* retSocket = NULL;

	ISocketSubsystem* SocketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM);

	if (SocketSubsystem != NULL)
	{
		retSocket = SocketSubsystem->CreateSocket(NAME_Stream, "SensorConnect", true);
	}

	FIPv4Address ip;
	FIPv4Address::Parse(TheIP, ip);
	auto addr = SocketSubsystem->CreateInternetAddr();
	addr->SetIp(ip.GetValue());//setIP
	addr->SetPort(ThePort);

	if (!retSocket->Connect(*addr)){
		return NULL;
	}
	
   
    return retSocket;
}
ここで、Socketのオブジェクトが生成されれば、接続が成立します。

そして、実際にデータを送るスレッドのListenerです。
void ABikeSensorCommunicationActor::TCPSocketListener()
{
    //~~~~~~~~~~~~~
    if(!ConnectionSocket) return;
    //~~~~~~~~~~~~~
    
    
    int32 sendType = 1;
    int sent;
    ConnectionSocket->Send((uint8 *)&sendType,sizeof(sendType),sent);
    
    //Binary Array!
    uint32 Size = 0;
    
    while (ConnectionSocket->HasPendingData(Size))
    {
        TArray ReceivedData;
        ReceivedData.Init(FMath::Min(Size, 65507u));
        
        int32 Read = 0;
        ConnectionSocket->Recv(ReceivedData.GetData(), ReceivedData.Num(), Read);
        if(ReceivedData.Num() <= 0)
        {
        }else{
            const FString ReceivedUE4String = StringFromBinaryArray(ReceivedData);
            FormatReceiveDataToNumber(ReceivedUE4String,iBodyRate,iRotaion,fSpeed,iDirection);
        }
        
    }
    
}

ここで、データをSendしたり、データが送られてきているならデータが溜まってる分だけ受け取って、それぞれ処理をします。 

 以上、駆け足でSocketについて説明してきました、ちなみに今回説明したのはどちらかというと、Client側の処理なので、Peer To Peer で UE4 to UE4 で通信するときにはサーバ側のUE4の処理を書かなければいけませんけど、そのあたりはUE4 のComminityのほうのVictoryPluginの作者さんのページに解説があります。

最後まで読んでいただきありがとうございます。

最後にSocketを使ったサンプルのYoutube動画のリンクを貼っておきます。またソースに関してはgithubにあります。




明日は@Usui_KKYLさんによる「VictoryPluginの中身をざっくり紹介させていただきます。」です。VictoryPluginは自分も愛用していますが、かなり色々なことができるようになってて把握するのが大変なのでありがたいです、楽しみですね。


 

このページのトップヘ