てんちょーの技術日誌

自分がつまづいたこととかメモ

【Unity】Cloud Build + ARKit Remote を動かしてみた

はじめに

Unity Cloud Build って便利ですよね!! Windows マシンしかなくてもiOSのビルドができちゃうので!

ただ、ビルドには時間がかかるようで

f:id:shop_0761:20180604101150p:plain

f:id:shop_0761:20180604101203p:plain

https://www.slideshare.net/MakotoIto2/unity-cloud-build-63711473 より

ので、ほぼ空に等しいARKit Remote のScene だけをビルドしようとしても平均 20- 30 分位かかります。

f:id:shop_0761:20180604104105p:plain

このタイミング(WWDC直前)で Mac を調達するのもアレなので、せっせと試していた、というところです。

(いろいろあって計10回ビルドして、ここまでたどり着いた)

環境は以下のとおりです。

  • Windows 10
  • iPhone X (iOS 11.3.1)
  • Unity 2017.1.3f1
  • Unity Cloud Build (Xcode 9.3, Unity2017.1.3f1)
  • Unity ARKit Plugin

https://bitbucket.org/Unity-Technologies/unity-arkit-plugin/src/default/

前提としては、

  • 証明書周りはとりあえず突破してる
  • iOS 端末にipaファイルを転送する手段がある
  • ARKit Remote 導入周りの記事をいくつか読んだりしている

ことです。2つ目に関してですが、Windows 環境だとiTunesにD&Dするとインストールできるとかなんとか 見たんですが、うまく行かなかったのでゴニョゴニョしていれました。

(2017の秋にはうまく行ったんだけどなぁ…

shop-0761.hatenablog.com

はい。

ポイント

以下試したこと全て書いときます。どれが不要か検証するのはしんどいので許してください。

勘で優先度高そうな順に書いておきます。

Cameraの使用許可の設定

最終的にはここでつまってました。 このときの挙動としては、connectedまではいけるけど、ARKit起動しようとすると静かにお亡くなる。 といったケースでした。

そういや、アクセス許可出さなきゃいけないよなーと思ってたらドンピシャの記事を見つけました。

www.urablog.xyz

こちらにある PostBuilder.csをそのまま使いましょう。ありがとうございます。

Debug ビルドにする

Cloud Build 側で設定できます

f:id:shop_0761:20180604102249p:plain

Unity Cloud Build の設定

適当に進めるとUnityのバージョンが最新のままビルドされてしまう可能性があります。 というのも、最初 Unity 2017.4系で試していたらもりもり謎のエラーが出たので、 Pluginの側の最新バージョンに合わせました。

そのため、バージョンはここ由来です。

https://bitbucket.org/Unity-Technologies/unity-arkit-plugin/src/default/ProjectSettings/ProjectVersion.txt

Unity と XCode バージョンを設定できるので一応やっておきましょう。

f:id:shop_0761:20180604103714p:plain

f:id:shop_0761:20180604103728p:plain

Target Minimum iOS Version

Cloud Build 側のログを見ていたら

'ARAnchor' is only available on iOS 11.0 or newer

みたいなwarningがもりもり出ていたので、とりあえず直そうと思って設定しました。

f:id:shop_0761:20180604103019p:plain

ただ、このままビルドすると、今度はビルドに失敗します。

invalid iOS deployment version '-miphoneos-version-min=11.0', iOS 10 is the maximum deployment target for 32-bit targets [-Winvalid-ios-deployment-target]

これで検索するとこちらのブログが

korechipostit.hatenablog.com

どうやらビルドターゲットの設定が必要そうです。 で、Configuration の中にあったので設定したら治りました。

f:id:shop_0761:20180604103155p:plain

Graphics API

なんかフォーラム読んでたらmetalだけにしてるのを見つけたので、一応

でもいらなそうな気がする

f:id:shop_0761:20180604102405p:plain

最後に

Unity Cloud Build だけでiOS開発はしんどい おとなしくMacを用意しましょう。

【Unity/UE4】Hi 5 Glove を使ってみた

はじめに

Hi 5 Glove 出ました。

Home | Hi5 VR Glove

ちょっと値が張りますが、ビタッと決まる環境だと結構いい感じになる…気がします。

ほかのグローブものをあまり試してないのでなんとも言えないところがありますが…。

さて、これ一応サンプルプロジェクトもろもろ公開されてるので、試してみたのを書いておきます。

ちなみに去年一足先にUE4でバリバリ遊んでました。

shop-0761.hatenablog.com

忘れそうなのでメモっておきます。

Unity 編

検証バージョンは以下のとおりです。

  • Unity 2017.4.0f1
  • Hi5 Unity SDK 1.0.0.655

こちらからDLできます。

Unity Plugin + Samples | Hi5 VR Glove

ドキュメントは英語で同梱されてますが、ざっくり日本語で流れを紹介すると、

  1. Vive の基本的なセットアップは済ませておく
  2. Hi 5 GloveにTrackerをつけてペアリング
  3. Hi 5 用ドングルをPCに挿す
  4. 同梱してるキャリブレーションアプリを実行して、やる(ありがとありがと~ みたいなBポーズ と おけまる的なPポーズ)
  5. Unity Project に Steam VR Plugin を入れる
  6. Hi 5 の Unity Packageを入れてEditorを再起動
  7. [CameraRig]_HI5 を置く

動く!! らしい。

まず手元の環境のせいか、キャリブレーションアプリで手が出ないケースがあるので不安になる。 最初でなくてエラー出ないから分からないし、出ない仕様なのかと思った()

でるっちゃ出るんですが、途中で消えたりしました。謎い。Trackerはいきてる。 アプリを再起動したりすると出ました。うーん。

f:id:shop_0761:20180521165403p:plain

f:id:shop_0761:20180521165021p:plain

f:id:shop_0761:20180521165859p:plain

f:id:shop_0761:20180521165952p:plain

ちなみに去年試したときとキャリブレーションのポーズが一つ減ったので、お手軽になりました。 バッテリー残量と磁気状況を取得できるようです。まだちゃんと見れてないですが、APIがありそう。

---------------- 追記 2018/05/22 ---------------------

ありました。 GetMagneticState() と GetPowerLevel() がありますね。

f:id:shop_0761:20180522162753p:plain

f:id:shop_0761:20180522162805p:plain

これも便利そう

f:id:shop_0761:20180522162822p:plain

振動はこれ 振動箇所は1Trackerをマウントしてる下部分が振動します。 これは完全におまけ機能っぽい(振動の強さや振動パターンはない)(Touchのがいっぱいある)

f:id:shop_0761:20180522163037p:plain

両手同時に発火できるっぽい

f:id:shop_0761:20180522163128p:plain

とりあえず動いたので貼っとく ちゃんと読んでないのであれですが、 ものによってはGloveStatus()が必要そうです(ぱっと出てこなくてあせった)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HI5;

public class Hi5Test : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
        print("Magnetic State: " + HI5_Manager.GetGloveStatus().GetMagneticState(Hand.LEFT).ToString());
        print("Power level: " + HI5_Manager.GetGloveStatus().GetPowerLevel(Hand.RIGHT).ToString());

        if (Input.GetKeyDown(KeyCode.V))
        {
            print("vibration");
            HI5_Manager.EnableBothGlovesVibration(1000, 20000);
        }

        if (Input.GetKeyDown(KeyCode.L))
        {
            print("vibration L");
            HI5_Manager.EnableLeftVibration(1000);
        }

        if (Input.GetKeyDown(KeyCode.R))
        {
            print("vibration R");
            HI5_Manager.EnableRightVibration(10000);
        }

    }
}

---------------- 追記 2018/05/22 おわり ---------------------

これで準備が終わったはず。ちなみにサンプルシーンの中にこのキャリブレーションのシーンも同梱されていたので、 同一アプリ内でキャリブレーションからVTuberへみたいなことができそうです。

f:id:shop_0761:20180521170702p:plain

先程の手順どおりにPluginなりをいれると動きます。

ハマりポイント

手が出ない

おそらくですが、手が出ない状態でキャリブレーションを済ませるとUnity側でキャリブレーション終わってないよエラーが出る…かも。 うーん、わからん状態であれこれ試してみました。

状況的には

  1. キャリブレーションをアプリからやった
  2. 試しに見つけたUnity側の Calibration Scene でもキャリブレーションしてみた
  3. やっぱり出ないのでExample_Inertia Scene を見てみる
  4. 地に張り付いた手がもにょもにょ動いてた → きてることはきてる
  5. キャリブレーションアプリに戻ると手が映るように
  6. そのままキャリブレーション たまに再起動
  7. 手が見えた状態でキャリブレーション終了 Unityに戻ると普通に動く

といった感じでした。単に環境が悪いせいで一人でハマっていた可能性があります…

UE4

DLはこちら。

Unreal Plugin + Samples | Hi5 VR Glove

キャリブレーションアプリもUE4製になっていました。Hi5_Mix ってやつ。

f:id:shop_0761:20180521172629p:plain

中身は同じっぽいので省略。

サンプルプロジェクトを開く前にバージョンを見てみると… 4.14.…

これ去年のときと変わってないのでは!?!? つらみ…

しかしPlugin単体の方はこれだけ対応してるので使えることには使えますね セーフ よかった。

f:id:shop_0761:20180521180248p:plain

とりあえずドキュメントを参考にセットアップしていきます。 UE4.19で試しました。

ドキュメントに長々と書いてますが、読むのが面倒でほぼ画像だけみて設定できます。ざっと流れだけ。

  1. Plugins に該当VersionのMotion Capture Pluginを追加 & Editorで有効後 再起動
  2. GameInstance を作って、初期化と終了処理を書く(Projectに設定も忘れずに)
  3. 同階層にある Hand Model をimport このとき Z Rotationを -90 に
  4. 両手分のAnim BP を作成 (以下は両手分行う)
  5. NewPose Calc ノードをFinal Animation Pose につなぐ
  6. NewPose Calc ノードの設定をする
  7. Pawnを作成、Motion Capture Avatar Component を追加 その下に手のSkeltal Mesh を追加
  8. Motion Capture Avatar Component の設定をする
  9. VR Preview で見る

すると動きます。やったー!

f:id:shop_0761:20180521182955p:plain

これをつないで、

f:id:shop_0761:20180521183054p:plain

こんな感じでせっせと設定します。Index 4 に該当するボーンがないので、今回はInvalidのままにします。

f:id:shop_0761:20180521183622p:plain

f:id:shop_0761:20180521183216p:plain

Motion Capture Avatar Component はこんなかんじ。 Avatar Name は右と左で同じであればなんでもいいっぽい。

でサクッと試してみると動きました。

f:id:shop_0761:20180521182334p:plain

サンプルプロジェクトは一応4.14でVSからビルドして開けたんですが、

f:id:shop_0761:20180521192014p:plain

文字化けしててファイル読めてないやんけ!!!!(やめた

まとめ

手汗のことを考えると使い捨てのビニール手袋を使うのがいい気がします。

ちなみにHi 5 + Vive コン を使うときはVive Tracker のドングルが必要です。

逆に言うと HMD + Hi 5のときはドングルがいりません。 これはHi 5 のドングル側でTrackerをペアリングできるっぽいです。

【Unity】VR ReadyでないPCでVive Trackerを使う

はじめに

来週 Laval Virtualで展示してくる予定なのですが、 荷物多いから軽めのPCで行きたいなーと思って 手元にあった2012年発売のノートPCで試してみたところ 意外とあっさり動いてしまったので、メモ程度に書いておきます。

動作環境 Unity2017.1.2f1 (作り始めた時がこれだった 2.0からxRSettingsになりつらみ Windows 10 メモリ: 4GB CPU: i5-3210M GPU: Intel HD Graphics 4000

やり方

Vive Trackerの設定はこちらの記事を参考にしてください。

shop-0761.hatenablog.com

VR Ready PCでなくてもSteam VRを入れることはできるので、 Steamから順番にインストールすればよいかと思います。

ポイントはおそらく2点

  • Steam VR はβじゃないと動かない…かも?
  • Init_HmdNotFoundPresenceFailedエラー

1点目はそのままbetaにすればいい話なんですが、 2点目はHMDをPCに挿すことでインストールされるものが必要なのかも。 適当に手当たり次第、HMD側のUSBをPCに挿してドライバ的なやつを いっぱいいれてみたけどダメだったのでググってみたらみつけました。

d.hatena.ne.jp

ありがてぇ…ありがてぇ…

このとおりに2箇所編集するとヘリポートみたいなマークがでるようになりました。

このコンポジターを起動するとHeadset Windowが起動して、利用可能に変わるんですが 処理負荷になるので使わないことにします。それでもうごくのでまあいっかと思って。

このヘリポートっぽいマークが見えてればルームセットアップもできるようで、 とりあえず立位の方は実行できました。

まとめ

今週 ちょうどえむにわさんが試していたようで、後発になってしまいました

PCを機内持ち込みにしたほうがいいよと言われたので、今日試したといったところです。 できてよかった。

実際、これが出来ると雑にいらない安いPCで海外展示が出来たり、 VTuberやりたいけどPCまでは買えない 先にViveだけ買う みたいなことができるかも。

【UE4】円形ゲージのはじまりの位置を変えてみた

はじめに

円形ゲージのような簡単なやつならサクッとUE4のマテリアルで作っちゃうんですが、 今回は円形ゲージの始点?をずらしたいなぁと思って作りました

こんなやつです

f:id:shop_0761:20180223160752g:plain

f:id:shop_0761:20180223160813g:plain

とりあえず90度刻みで時計、反時計できるのは確認できたのでまとめておきます

まあ手を加えればこんな感じのもTextureなしで作れたりします

円形ゲージ

円形ゲージの作り方はこの辺が参考になるかと

pafuhana1213.hatenablog.com

limesode.hatenablog.com

で、今回の肝になるのは VectorToRadialValueの Vector or UVs(V2) Inputです

あんまりいい方法がパッと思いつかなかったので、Material Functionにえいと放り込んでますが、 適宜必要なとこだけ使うほうがパフォーマンス的にはよさそうです

1-x すると逆回転のも作れるのでとりあえず8通りですね

f:id:shop_0761:20180223161421p:plain

中身

RightはDefaultなのでなくてもいいですが、参考までに一緒に並べました。

f:id:shop_0761:20180223161447p:plain

f:id:shop_0761:20180223161504p:plain

ポイントはTexCoordのUVタイリングのとこです 2.0 にしましょう

f:id:shop_0761:20180223161623p:plain

まとめ

Textureの回転なら Custom Rotator なりを使えばいいんですが、TexCoordだとうまくいかなかったので試してみた といったところです

そんなに難しくないのでお試しあれ

【Unity】ViveのHMDなしにTrackerを使う

はじめに

お高いPerception Neuronとか買わなくても今流行のVirtual Youtuberになれる!!(かも)(Final IKは買おう)

ところで、こんなのを作っています

Trackerしか使わない子供向けおもちゃの #Inst_Paper です。HMDいらないなーと思ってて、

つい最近

これきっかけで調べたらまずこれを発見しました。

www.roadtovr.com

ここは Python使って取得するやつで、

その通りやったらできました。サンプルにUDPで送る方法もあったのでそれでやろうかなーと思っていたら、

と言われたので調べてみよ と思っていたら、

と、次々情報が集まってきたのでやったら上手く行った という話です。

やること

VRSettingsを変える

ここらへんに設定ファイルの default.vrsettings があります。

<steamインストールフォルダ>\steamapps\common\SteamVR\resources\settings

これを開いて、 requiredHmd を falseにします。

f:id:shop_0761:20180108032049p:plain

Steam VRを起動してたら再起動しておきましょう。 利用不可になりますが、通常HMDを繋がないとベースステーションやTrackerが見えるようになります。

Unity側の設定

とりあえずSteam VR Pluginを入れて、Virtual Reality Supportを切ります()

f:id:shop_0761:20180108032253p:plain

一応 Edit → Preferences からAutomatically Enable VR も切っておきます

f:id:shop_0761:20180108032439p:plain

これで準備完了 のはず

スクリプトを書く

のは、めんどくさいので用意しました。

gist.github.com

これを適当にアタッチして使ってください。

こんな感じで使います。

f:id:shop_0761:20180108033556p:plain

すると

といった具合に使えます。ただ、途中でTrackerを追加したりした時に勝手には対応してくれない(監視するのが面倒い)ので、 Resetボタンを用意しました。デフォだとTabキーを押すといけます。(意味的にRefreshのがよかったかも

トラブルシューティング

Steam VR はβじゃないと動かない…かも?

Init_HmdNotFoundPresenceFailedエラー

ビルドした時に動かない

openvr_api.dll がない可能性があります。win64の場合はこのdllをUnityのAssets/Plugins 以下などに適当に放り込んであげれば 動くはず。

64bit

github.com

32bit

github.com

まとめ

自分でOpenVRを初期化すればいろいろできそう

このHMDなしバージョンで #Inst_Paper を銀VR 2日目に展示する予定ですのでよければー

JapanVR Fest 2018銀座 世界一地代の高い場所で行われるVR体験会 – JapanVR Fest.

全く関係ないですが、Udemyの講座 よかったら買って欲しい(割引きクーポンつきURL貼っとくので

www.udemy.com

2017年 作ったものとかをまとめてみた

はじめに

個人的に完成した(と思っている)ものに関してはすぐ忘れてしまうので、 「作ったもの見せて」と言われた時にこの記事にまとめておくと便利かなぁと思いまとめておきます。

意外と時間がかかりそうなので、ざっくりまとめた後、おいおい追記するかもです

1月

お引っ越し(下見)と卒論があったので、後半はわたわたしてるけど、前半はこんな感じ

2016年に作り始めたVRキーボードの別案を年始から作っていたらしい

GASがお気に入りだったので、この頃はslackと連携してアレコレ作ってたっぽい

2月

Mogura VRでちょろっと紹介されたり

卒論 おわらせたのがこのくらい

これのお手伝いをしたり

引っ越し先のおうち Blenderで作ったりした

UE4 Meetup Sapporo で登壇したり

うっかりSVVR(アメリカ)に行くことを決めてしまうなどした

会社から課題を出されていたので、そのためにUnityの勉強をしたりもしてたなぁ

3月

Unity Chan Live -UE4 ver-

4月

Unity Chan Live をモバイルに持っていったり

SVVR 報告会でLTした

atnd.org

https://speakerdeck.com/shop_0761/svvr-en

5月

意外とお気に入りの引き出し

6月

凹みさんの uDD でYoutubeの360度動画を再生するやつ

7月

音声認識でメモを残すやつ

これはこの前LTしました

speakerdeck.com

8月

VALU向けchrome拡張を作った

shop-0761.hatenablog.com

夏コミ 技術書を書いたりしました

shop-0761.hatenablog.com

水彩風マテリアルをまた調整しはじめたり

Unreal Engine Meetup Sapporo にて ライブノーディングのサポートをしたり VR ModeのSequencerの紹介をしたり

ミクさんお迎えしたけど、全然遊べてない…

9月

ぷちコンで UE4 + Network + VRなコンテンツをやっつけでなんとか作った

10月

Inst_Paper 上海で展示してきました

技術書典3にだしたり

Udemyの講師になった

11月

Windows MR で無限に歩けるので公園で歩いた

Inst_Paper 初国内展示

STYLYハッカソンにて、未実装のシーン遷移をハックしてつくるなど

f:id:shop_0761:20171223012943p:plain

12月

イベント用名札メーカー

shop-0761.hatenablog.com

その他

全く関係ないですが3月から東京に引っ越してきて、どうやら大分痩せたようです(体重計がないので分からない

一人暮らししたら、とりあえず食費から削るなぁと思ってて実際そうなった模様。実家にいる間にいっぱい食べとこと思ってたらかなり太ったんですが、それも無かったことになるくらいに…

夏ごろ?に家族に会った時に後ろ姿が変わった(細くなった)とか言われたのを思い出したりしました

なんでこの話を書いたかというと、さっき久々に履こうとしたズボン(春先とか履いてたやつ)がダボダボになってて!?!?ってなったからです はい

UE4のお仕事はいつでも募集中なのでお気軽にTwitter等に連絡くださいね!

twitter.com

【UE4】スマホアプリによくあるスワイプ、ピンチインアウト

はじめに

久々にちゃんと誰かの役に立ちそうな記事を書かねばと思った次第です()

というのもありますが、検証ついでに作ってみたので忘れないようにメモをば。

実装

Playerのカメラ回転 よく忘れるので、どうするのがいいのか迷ったあげく とりあえずPlayerPawnのカメラを直で回しています。ダメっぽい気がするのでいい方法があったら教えてください。

あと、なぜか意図せずRoll方向にも回っていたので、PlayerPawn側で回らないようにしました(ダメそう

Player Pawn


2017/12/13 01:52 修正

Control Rotationに変えたので、Player Pawnのチェックを入れとかないと動かない

f:id:shop_0761:20171213015045p:plain


f:id:shop_0761:20171213010151p:plain

Player Controller


2017/12/13 01:52 修正

Get Component by Class はキャッシュしたほうがよさそう

f:id:shop_0761:20171213015143p:plain


f:id:shop_0761:20171213010227p:plain

CalcPinchRate マクロ f:id:shop_0761:20171213010535p:plain

f:id:shop_0761:20171213010552p:plain

CalcSwipeCameraRot マクロ

f:id:shop_0761:20171213010648p:plain

f:id:shop_0761:20171213010703p:plain

別で入力が欲しい時

f:id:shop_0761:20171213010730p:plain

簡単な説明

indexに合わせてPress時のVector2Dを取っておいて、Movedで差分を計算する感じです。 とりあえず見栄え重視でマクロに突っ込んだので色々アレです。まあサッと試しただけなのでご勘弁を…

まとめ

デバッグにはじめてまともにLauncher使ったけどべんりっぽい!細かい実装はUnityのコードとか参考になります おわり。