【Unity】既存のEditor拡張を乗っ取って自分のEditor拡張を使う【Editor拡張】
はじめに
いろいろなアセットを使っていると便利なことにEditor拡張がついてきて使いやすい!!
けど、個人的にもうちょい足したい…が手を入れるとアセットの更新があったときに毎回マージするのはしんどい…
Editor拡張の拡張って書けるのかな
— てんちょー / 筑野(ちくの)えり💕 (@shop_0761) February 4, 2019
Editor拡張の拡張は出来なかったんですが、乗っ取ることはできたので今回はその話をします。
やりかた
Editor拡張を用意する
なんか書きます。
using UnityEngine; public class Test : MonoBehaviour { [HideInInspector] public string str = "こんにちは"; public void Message() { Debug.Log("メッセージだよ: " + str); } }
using UnityEditor; using UnityEngine; [CustomEditor(typeof(Test))] public class TestEditor : Editor { public override void OnInspectorGUI() { base.OnInspectorGUI(); var test = target as Test; if (GUILayout.Button("メッセージをよむ")) { test.Message(); } } }
ボタンが出るようになるので、押すとログが出ます。
上書きしたいEditor拡張を書く
今回のメインはここ。とっても邪法です。
以下は推測です。
- [CustomEditor(typeof(Hogehoge))] のtypeof で指定したクラスには一つのEditor拡張しか使えない
- Editor拡張用のクラスを探すのは辞書順
だと思われます。これを逆手に取ります。
今回の場合は 辞書順にソートしたとき、 TestEditor.cs より早い名前にしてあげれば良さそうです。一文字削ってTestEdito.cs でもよいです。
using UnityEditor; using UnityEngine; [CustomEditor(typeof(Test))] public class TestEdito : Editor { public override void OnInspectorGUI() { base.OnInspectorGUI(); var test = target as Test; if (GUILayout.Button("メッセージをよむぞ")) { test.Message(); } } }
できた~~~~~~~
拡張メソッドを書く
まあこれだとpublicな関数がたたけるくらいで、はい なるほど ってなって終わりなんですが
拡張メソッドも一緒に使うと便利です。
using UnityEngine; public static class TestExtension { public static void MessageExtention(this Test test) { test.str = "やあ " + test.str; Debug.Log("おりゃ 上書きしてあるぞい!: " + test.str); } }
そして、上書きしたほうのEditor拡張である TestEdito.csには
using UnityEditor; using UnityEngine; [CustomEditor(typeof(Test))] public class TestEdito : Editor { public override void OnInspectorGUI() { base.OnInspectorGUI(); var test = target as Test; if (GUILayout.Button("メッセージをよむぞ")) { test.MessageExtention(); //拡張メソッド } } }
ということができます。
まとめ
なるべくよそのアセットには手を入れたくないけど、便利につかいたい…もうちょいEditor拡張したい…
ときに便利です。Editor拡張を _.cs とかにされたらどうするんだろ…
だれが使うんだろ。おわり。
【VRM】キャラクター以外のVRMのつくりかた
はじめに
VRoid Hub やら THE SEED ONLINE、 VRM コンソーシアムなどいろいろでてきました。
そんな中以前、ふと試したら思いの外上手くいったVRMのハックです。 意外とすでにあるVRM対応アプリで読み込めたりします。
あわよくばこういうのに無理やり使えるのでは…??? とおもったり
VRMのBIM版が欲しいんだよなw
— 中村 薫 (@kaorun55) December 21, 2018
今回試したもの
Candy Rock Star のステージをVRM化しました。
ちゃんと他のVRM対応ツールでも読み込めます。
VDRAW
Virtual Motion Capture
やりかた
とてもかんたんです。ようはUnityでHumanoidになれば何でもいい。 VRM化するところは省略します。他を参考にしてください。
DCCツールで骨を入れる
今回はBlenderにいれました。
で、Blenderの Rigifyで人型のボーンをいれます。 ここが参考になりました。
うごいた~~~
UnityにいれてHumanoidにする。
GenericからHumanoidにして、Configure みてみると
ちゃんときてる~~(あたりまえ)(虚無の人がいることになってる)
よくみると怒られています。
うるせ~~!!!!!
知らね~~~~~!!!!
Enforce T p
をして黙らせます。
これで無事VRMとして書き出すことができます。よかったね!!!!!
さいごに
ちゃんとウェイトやBlendShapeを作ってあげれば、 手を振るとライトが回ったり、 LipSyncがスピーカーのエフェクトと同期させたりなんてこともできるかなと思います。
VRMは人型キャラクターだけ!と思われがちですが、 その辺の草とか石にもなれます。自分のほしい体を手に入れよう!
こういうことをしてVRoid Hubに上げて、SHOWROOM V と連携すれば 「学芸会の木」として配信ができるかも??? (ライセンスには気をつけてね)
参考
横断歩道になりたかった
【Unity】SteamVR Plugin 2.0の入力方法を調べてみた
はじめに
少し前に正式版になったSteamVR Plugin 2.0 ですが、ベータ版のころ なんとかの男 に
「Steam VR Plugin 2.0 は入力周りがめっちゃ楽になるから移行しようぜ!!」
と言われて、ホイホイ乗り換えたのですが Steam VR Input周りでハマって見なかったことにしました。
けど正式版になったので、使ってみた というお話です。
現状だと、TsubokuLab の
3台目以降のViveコントローラーのボタン押下が取得できない
が解決できるかもしれません。たぶん。おそらく。(未検証)
というのも旧版のSteam VR Pluginのときに Trackerを繋いだ瞬間、コントローラーの入力が全く取れなくなる という現象に遭遇しましたが(正式版2.0でも遭遇した)、
Steam VR Plugin 2.0 にした際に Steam VR のご機嫌と Unityのご機嫌を伺いながらやれば解決しました。
ここ最近のSteam VR わからんなんも…
#SteamVR Plugin 2.0 にしても #ViveTracker をつないだら急にInputが全滅する図 #Unity pic.twitter.com/7YcFyMmcDP
— てんちょー / 筑野(ちくの)えり💕 (@shop_0761) 2018年10月6日
導入とか
こちらが参考になるかと思いますので、今回は省略します。
ただ、SteamVRとSteamVR_Inputのフォルダの場所はAssets以下のほうが安心かもしれません…(InputのGenerateのときに永遠に終わらなかったことがある)(ベータの話)(治ってるかもしれない)
更新に伴う問題点
Trackerが変な方向に回ってる
最近のTrackerを体につけることが流行っているせいか、SteamVR側の仕様変更により 弊害がゴロゴロでてきています。(IKinemaとか)
#SteamVR 最新の安定版 Orion Trackerがほんとにずれてるやんけ!!! #Orion #IKINEMA pic.twitter.com/LjXNrYxkxt
— てんちょー / 筑野(ちくの)えり💕 (@shop_0761) 2018年10月10日
解決方法
TrackerのSettingsにLeft FootやWaistがあるのでIKのターゲットにしたい人が増えたんだなぁという気がします。
コントローラーの入力が取れない
Trackerを繋ぐと入力がこなくなったりします。 ここはコントローラー2つペアリングしてからTrackerを繋ぐと治ったりします。おまじない。
他に考えられるのはSteamVR Inputで作ったActionsがちゃんとbindされていないとか。
そもそも入力のとり方がわからない
これさ…ドキュメントがなさすぎるんよ…
ということで、UniRxのMessageBrokerを使った便利クラスをちょっと書いてみたのでよければどうぞ
SteamVR_Input_LiveWindow.cs をほぼコピペです。ここが一番まともかなとおもって…
サンプルのとこをコメントアウトして試すとLogが出る…はず…
一緒に Window → Steam VR Input Live View も見ておくと心に優しい。
参考
Tips
コントローラーしかペアリングしてないのにSteam VR Input Live View が真っ赤になる
トラッキングされてないと入力もこない ようです。 面倒がらずにセンサーから見えるとこに移動しましょう。
それでもだめな場合は、おとなしくSteam VRとUnityを再起動しましょう。
Steam VR 起動→ コントローラーペアリング → Unity 起動
の順がよい気がします。
ビルドすると入力がこない
EditorとビルドではBinding設定が異なる 気がします(めんどいのであまり検証してない)
密かにBinding UIの下の方にあるReplace Default Bindingでなんとかなるかも…しれない
そもそもこのBindingがPCごと?アカウントごと? に紐付いているようで、 この設定がうまくいかない場合 毎回PC OR アカウントごとに Bindingし直し が発生します。
ということは ビルド配布がほぼ無理 きがします(ビルドもらったユーザーがBindingしなおしはしんどすぎる
方法がわかったら誰か教えて…
--2018/11/08 追記-- Save Personal Binding をするときにちゃんと ファイル名をつける といける…かもしれない --追記おわり--
Steam VR Input のGenerate が終わらない
進捗バーが最後のほうまできたけど、なぜか終わらない…ということがあります。
が、無理やり中止しても動くときもあります。試してみましょう。
あとUnityはアクティブにしてないと処理が進まないようです。なんだこれ。
ひょっとしたら Trackerの設定を Disabledにすると入力がとれない?
怖くて検証するのを辞めたんですが、先程の参考記事にあった
「Manage Vive Trackers」ボタンで全てのtracker設定をdisableにしてください。
をすると…入力が何もこなくなるかもしれない…こわい…もうやだ…Cameraとかにしとこ…
ちなみにOrionのためにTrackerをたくさん繋ぐとManage Vive Trackers で左端のTrackerが見切れることがあります。
ブラウザでも一応みれるんですが、左端が見切れてしまう…
対処方法としては4Kモニタとかでブラウザ全画面表示するとみえました(解決にならない)
--2018/10/15 追記-- Ctrl + マウスホイール?でブラウザの拡大率を調整すればみえます()
オフライン環境
オフライン環境下で動かしたいことがあるかもしれません。もしくはSteamへのログインが面倒でしてないときがあったりします。
このままいくと「Steam VRがDisableだよ!!」みたいのがBinding UIのところにでます。
ので大人しくログインしましょう…ネット環境必須…っぽい…
--追記おわり--
まとめ
Steam VR への信仰心が高いとおまじないが効いてくるのでがんばりましょう。 Unity わからんなんも…
なにかあれば Twitterできいてください twitter.com
UE4使いの人が「まだSteamVRプラグインで消耗してるの?」とか煽ってくるんですが、どうすればいいですか
— こりんVR (@korinVR) 2018年10月7日
ホントそれ!!!!!!!!!!!!!!!!!!!!!! UE4 つかお!!!!!!!!!!!!!!
おわり
【Unity】Cloud Build + ARKit Remote を動かしてみた
はじめに
Unity Cloud Build って便利ですよね!! Windows マシンしかなくてもiOSのビルドができちゃうので!
ただ、ビルドには時間がかかるようで
https://www.slideshare.net/MakotoIto2/unity-cloud-build-63711473 より
ので、ほぼ空に等しいARKit Remote のScene だけをビルドしようとしても平均 20- 30 分位かかります。
cloud build するとその間にお風呂にはいれて便利(ここで泣く
— てんちょー@めぐるーまー (@shop_0761) June 4, 2018
このタイミング(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/
前提としては、
ことです。2つ目に関してですが、Windows 環境だとiTunesにD&Dするとインストールできるとかなんとか 見たんですが、うまく行かなかったのでゴニョゴニョしていれました。
D&Dでできるとか書いてあるけどできないので終わりたい
— てんちょー@めぐるーまー (@shop_0761) May 29, 2018
(2017の秋にはうまく行ったんだけどなぁ…
はい。
ポイント
以下試したこと全て書いときます。どれが不要か検証するのはしんどいので許してください。
勘で優先度高そうな順に書いておきます。
Cameraの使用許可の設定
最終的にはここでつまってました。 このときの挙動としては、connectedまではいけるけど、ARKit起動しようとすると静かにお亡くなる。 といったケースでした。
そういや、アクセス許可出さなきゃいけないよなーと思ってたらドンピシャの記事を見つけました。
こちらにある PostBuilder.csをそのまま使いましょう。ありがとうございます。
Debug ビルドにする
Cloud Build 側で設定できます
Unity Cloud Build の設定
適当に進めるとUnityのバージョンが最新のままビルドされてしまう可能性があります。 というのも、最初 Unity 2017.4系で試していたらもりもり謎のエラーが出たので、 Pluginの側の最新バージョンに合わせました。
そのため、バージョンはここ由来です。
Unity と XCode バージョンを設定できるので一応やっておきましょう。
Target Minimum iOS Version
Cloud Build 側のログを見ていたら
'ARAnchor' is only available on iOS 11.0 or newer
みたいなwarningがもりもり出ていたので、とりあえず直そうと思って設定しました。
ただ、このままビルドすると、今度はビルドに失敗します。
invalid iOS deployment version '-miphoneos-version-min=11.0', iOS 10 is the maximum deployment target for 32-bit targets [-Winvalid-ios-deployment-target]
これで検索するとこちらのブログが
どうやらビルドターゲットの設定が必要そうです。 で、Configuration の中にあったので設定したら治りました。
Graphics API
なんかフォーラム読んでたらmetalだけにしてるのを見つけたので、一応
でもいらなそうな気がする
最後に
【Unity/UE4】Hi 5 Glove を使ってみた
はじめに
Hi 5 Glove 出ました。
ちょっと値が張りますが、ビタッと決まる環境だと結構いい感じになる…気がします。
ほかのグローブものをあまり試してないのでなんとも言えないところがありますが…。
さて、これ一応サンプルプロジェクトもろもろ公開されてるので、試してみたのを書いておきます。
ちなみに去年一足先にUE4でバリバリ遊んでました。
忘れそうなのでメモっておきます。
Unity 編
検証バージョンは以下のとおりです。
- Unity 2017.4.0f1
- Hi5 Unity SDK 1.0.0.655
こちらからDLできます。
ドキュメントは英語で同梱されてますが、ざっくり日本語で流れを紹介すると、
- Vive の基本的なセットアップは済ませておく
- Hi 5 GloveにTrackerをつけてペアリング
- Hi 5 用ドングルをPCに挿す
- 同梱してるキャリブレーションアプリを実行して、やる(ありがとありがと~ みたいなBポーズ と おけまる的なPポーズ)
- Unity Project に Steam VR Plugin を入れる
- Hi 5 の Unity Packageを入れてEditorを再起動
- [CameraRig]_HI5 を置く
動く!! らしい。
まず手元の環境のせいか、キャリブレーションアプリで手が出ないケースがあるので不安になる。 最初でなくてエラー出ないから分からないし、出ない仕様なのかと思った()
でるっちゃ出るんですが、途中で消えたりしました。謎い。Trackerはいきてる。 アプリを再起動したりすると出ました。うーん。
ちなみに去年試したときとキャリブレーションのポーズが一つ減ったので、お手軽になりました。 バッテリー残量と磁気状況を取得できるようです。まだちゃんと見れてないですが、APIがありそう。
---------------- 追記 2018/05/22 ---------------------
ありました。 GetMagneticState() と GetPowerLevel() がありますね。
これも便利そう
振動はこれ 振動箇所は1Trackerをマウントしてる下部分が振動します。 これは完全におまけ機能っぽい(振動の強さや振動パターンはない)(Touchのがいっぱいある)
両手同時に発火できるっぽい
とりあえず動いたので貼っとく ちゃんと読んでないのであれですが、 ものによっては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へみたいなことができそうです。
先程の手順どおりにPluginなりをいれると動きます。
ハマりポイント
手が出ない
おそらくですが、手が出ない状態でキャリブレーションを済ませるとUnity側でキャリブレーション終わってないよエラーが出る…かも。 うーん、わからん状態であれこれ試してみました。
状況的には
- キャリブレーションをアプリからやった
- 試しに見つけたUnity側の Calibration Scene でもキャリブレーションしてみた
- やっぱり出ないのでExample_Inertia Scene を見てみる
- 地に張り付いた手がもにょもにょ動いてた → きてることはきてる
- キャリブレーションアプリに戻ると手が映るように
- そのままキャリブレーション たまに再起動
- 手が見えた状態でキャリブレーション終了 Unityに戻ると普通に動く
といった感じでした。単に環境が悪いせいで一人でハマっていた可能性があります…
UE4 編
DLはこちら。
キャリブレーションアプリもUE4製になっていました。Hi5_Mix ってやつ。
中身は同じっぽいので省略。
サンプルプロジェクトを開く前にバージョンを見てみると… 4.14.…
これ去年のときと変わってないのでは!?!? つらみ…
しかしPlugin単体の方はこれだけ対応してるので使えることには使えますね セーフ よかった。
とりあえずドキュメントを参考にセットアップしていきます。 UE4.19で試しました。
ドキュメントに長々と書いてますが、読むのが面倒でほぼ画像だけみて設定できます。ざっと流れだけ。
- Plugins に該当VersionのMotion Capture Pluginを追加 & Editorで有効後 再起動
- GameInstance を作って、初期化と終了処理を書く(Projectに設定も忘れずに)
- 同階層にある Hand Model をimport このとき Z Rotationを -90 に
- 両手分のAnim BP を作成 (以下は両手分行う)
- NewPose Calc ノードをFinal Animation Pose につなぐ
- NewPose Calc ノードの設定をする
- Pawnを作成、Motion Capture Avatar Component を追加 その下に手のSkeltal Mesh を追加
- Motion Capture Avatar Component の設定をする
- VR Preview で見る
すると動きます。やったー!
これをつないで、
こんな感じでせっせと設定します。Index 4 に該当するボーンがないので、今回はInvalidのままにします。
Motion Capture Avatar Component はこんなかんじ。 Avatar Name は右と左で同じであればなんでもいいっぽい。
でサクッと試してみると動きました。
サンプルプロジェクトは一応4.14でVSからビルドして開けたんですが、
文字化けしててファイル読めてないやんけ!!!!(やめた
まとめ
手汗のことを考えると使い捨てのビニール手袋を使うのがいい気がします。
ちなみにHi 5 + Vive コン を使うときはVive Tracker のドングルが必要です。
逆に言うと HMD + Hi 5のときはドングルがいりません。
コメントより指摘がありましたので修正します
これはHi 5 のドングル側でTrackerをペアリングできるっぽいです。
HMD側にコントローラー用のドングル相当のものが内蔵されているので不要です
【Unity】VR ReadyでないPCでVive Trackerを使う
はじめに
来週 Laval Virtualで展示してくる予定なのですが、 荷物多いから軽めのPCで行きたいなーと思って 手元にあった2012年発売のノートPCで試してみたところ 意外とあっさり動いてしまったので、メモ程度に書いておきます。
今回は去年の11/30までにpaper(英語)を書いて、acceptされたので行ってこようと思います
— てんちょー@めぐるーまー (@shop_0761) 2018年3月21日
せっかくなので、現地からのストリーミング配信とかが出来ればと思ってます
配信以外にもイラストを描くプランやEnamCard(名札シール)、展示ブースにチラシを置くプランなども用意したのでよろしくお願いします! https://t.co/qxcJd7S41g
動作環境 Unity2017.1.2f1 (作り始めた時がこれだった 2.0からxRSettingsになりつらみ Windows 10 メモリ: 4GB CPU: i5-3210M GPU: Intel HD Graphics 4000
やり方
Vive Trackerの設定はこちらの記事を参考にしてください。
VR Ready PCでなくてもSteam VRを入れることはできるので、 Steamから順番にインストールすればよいかと思います。
ポイントはおそらく2点
- Steam VR はβじゃないと動かない…かも?
- Init_HmdNotFoundPresenceFailedエラー
1点目はそのままbetaにすればいい話なんですが、 2点目はHMDをPCに挿すことでインストールされるものが必要なのかも。 適当に手当たり次第、HMD側のUSBをPCに挿してドライバ的なやつを いっぱいいれてみたけどダメだったのでググってみたらみつけました。
ありがてぇ…ありがてぇ…
このとおりに2箇所編集するとヘリポートみたいなマークがでるようになりました。
ヘリポートみたいなやつ pic.twitter.com/DyvYlC8aM3
— てんちょー@めぐるーまー (@shop_0761) 2018年3月30日
このコンポジターを起動するとHeadset Windowが起動して、利用可能に変わるんですが 処理負荷になるので使わないことにします。それでもうごくのでまあいっかと思って。
このヘリポートっぽいマークが見えてればルームセットアップもできるようで、 とりあえず立位の方は実行できました。
何にもささってないのにセットアップ(立位)ができた(?) pic.twitter.com/JelTJCG9mK
— てんちょー@めぐるーまー (@shop_0761) 2018年3月30日
まとめ
今週 ちょうどえむにわさんが試していたようで、後発になってしまいました
— なっつー@4/11展示 (@yashinut) 2018年3月30日
PCを機内持ち込みにしたほうがいいよと言われたので、今日試したといったところです。 できてよかった。
実際、これが出来ると雑にいらない安いPCで海外展示が出来たり、 VTuberやりたいけどPCまでは買えない 先にViveだけ買う みたいなことができるかも。
【UE4】円形ゲージのはじまりの位置を変えてみた
はじめに
円形ゲージのような簡単なやつならサクッとUE4のマテリアルで作っちゃうんですが、 今回は円形ゲージの始点?をずらしたいなぁと思って作りました
こんなやつです
とりあえず90度刻みで時計、反時計できるのは確認できたのでまとめておきます
まあ手を加えればこんな感じのもTextureなしで作れたりします
謎の勢いでテクスチャ無しのマテリアルで円形ゲージをつくってしまった #UE4Study pic.twitter.com/twGtfVGgSf
— てんちょー (@shop_0761) 2017年12月12日
円形ゲージ
円形ゲージの作り方はこの辺が参考になるかと
で、今回の肝になるのは VectorToRadialValueの Vector or UVs(V2) Inputです
あんまりいい方法がパッと思いつかなかったので、Material Functionにえいと放り込んでますが、 適宜必要なとこだけ使うほうがパフォーマンス的にはよさそうです
1-x すると逆回転のも作れるのでとりあえず8通りですね
中身
RightはDefaultなのでなくてもいいですが、参考までに一緒に並べました。
ポイントはTexCoordのUVタイリングのとこです 2.0 にしましょう
まとめ
Textureの回転なら Custom Rotator なりを使えばいいんですが、TexCoordだとうまくいかなかったので試してみた といったところです
そんなに難しくないのでお試しあれ