Lumberyard をインストールしてみる
なんとなくLumberyardもやったほうがいいかなと思ったのでやります。 一通り読んでから試すのをオススメします…
Lumberyardとは
CryEngineベースでAmazonが提供してるゲームエンジン(Unity とか UE4 みたいなかんじ) AWS (Amazon Web Services) が使えるのが特徴。
インストールする
ここからDLできます。
Amazon Lumberyard をダウンロード | AWS
インストーラーはこれ。Optionsからインストール先を変更できます。
とりあえず終わったので起動しましょう。
起動してみる
おいおいおい…
さすがに今後のことを考えるとちょっとアレなので、Installしなおし…
いきなり地雷踏んで笑ってる
— てんちょー@C92 1日目東こ34b委託 (@shop_0761) 2017年7月31日
初回起動時にAmazonのアカウント(amazon.comかも) / AWSのアカウント でログインしてくれと言われるかもなので、 一応AWS用のアカウントを取っておくといいかも。あとで使いたくなるかもだし。
参考:
ひとつ注意として、住所や名前を登録するときに"英数字で"と指定されたので内部的にはまだ英語ベースな可能性が…
起動した
一度 Express Installでやってみたんですが、自分のProjectが作れなくて???ってなりました。 Compile the game code じゃないでしょ!!と言われたので、Custom Installしなきゃいけないようです。
そして何やらたくさん必要らしい…☓になってたので全部いれるしかないのかな…とドキドキしながらいれます。
ちょっとアレだけど、なんとかProjectは作れそう。
Projectの管理系は Lumberyard Project Configurator にまとまってるようです。
選択して、Set as defaultにするとそのProjectを開けるようになるようですね
なんとなく新しいプロジェクトを作ってみます。
ちらちら見えるCryの文字…
レベルを作ってみるぞい
なぜかいきなり海岸が出来ました。
てかこの海ヤバくないですか…すごい…
砂浜ではなかった
Sample Projectだと色々入ってますね。
これゲームできるのかと思ったら出来なくて笑った
まとめ
とりあえずインストールはできました。が何ができるのかさっぱりわかりません。 一応チュートリアルがあるようです。
VR用のサンプルはzip展開後のdev以下のフォルダをエンジンのdev以下に置いたらとりあえず起動できましたが、 Riftが反応しないのでよくわからない…
【UE4】「VRてんぷれーとを読んでみた本」を書いてみたお話【Re:VIEW】
はじめに
入稿 差し替えと支払いが完了したので、僕の夏コミ作業は終了です!!
— てんちょー (@shop_0761) 2017年7月28日
めでたい!!終わった!! お祝いにプリンを食べました。はい。
ということで、簡単な内容紹介やら、書くのに使ったツールやらを書いておこうかと思います。 無理して環境を整える必要はないです、こういう方法もあるよくらいでお願いします。
本について
表紙かわいいので見て。
タイトルどおりVRテンプレートを読んでみて、まとめました。ノードを一つ一つ追いかけて、なるべく何やってるのかを噛み砕いて書いたつもりです。 その途中で色々なTipsになりそうなことを詰め込んでいるので、最終的に72pになりました…。(表紙込)
エンジンのインストールなどの基本操作系は省略してるので、UE4での開発経験があったり、極み本やマテリアル本をある程度読んだ方が対象かなーとは思います。 一部C++のクラス名が出てきたりしますが、出てくるだけでC++のお話はしてません。 あとは、おまけとして4.16で大きく変わったVR系のコンソールコマンドもいくつか記載してます。一応手元にあるRiftとVive(Pre)ですべて動作チェックしてるので、多分大丈夫かと思います。
そしてそして、忙しい中おかずさん(@pafuhana1213)に添削していただいたり、せんちゃさん(@ukiukisoda)に表紙/背表紙を描いていただきました。 本当にありがとうございました!!
夏コミではalweiさん(@aizen76)のところに委託して頒布します。(僕も行きます)1日目 東こ34bです。 PDF版も用意しようと思って、DLカードを作ってます。当日どうしても来れない方はどこかで頒布するつもりなので、しばしお待ちをー!
ハッシュタグは #VRテンプレ本 ですので、感想や、ダメ出しがあればこちらを使ってもらえると僕が追いかけられます。
今回書くのに使ったものたち
あたりです。そもそのRe:VIEWとは…?みたいな方はこちらの記事を読んでみるといいかも。
今回はようてんさん(@youten_redo)の記事を参考に同じところに入稿しました。
かくいう僕も全く知らず、LaTeXでゴリゴリ書くしかないのか…と思っていた矢先に技術書典で存在を知ったくらいなので。 簡単に言うなら、マークダウン風の記法で割りといい感じに文章がかけるよみたいなツールです。 Wordを久しく使ってないえんじにゃーの方にはこっちのほうが馴染むかもですw
ただWindows環境だとこの辺の環境構築が…めんどい…のですが、そこで Bash on Ubuntu on Windows をオススメしたいですね。
— てんちょー (@shop_0761) 2017年7月27日
そしてVSCode。
VSCode is God というきもちになってきた
— てんちょー (@shop_0761) 2017年6月5日
— てんちょー (@shop_0761) 2017年6月5日
これ!!!これ!!! マジでこれができるだけでVSCodeだけでコンパイルも終わるし、最高かよ…という気持ちになりました。 作業用ディレクトリをdropboxにするだけで他の端末でも見れるしバージョン管理してくれるし、 そして適当にファイルを監視してくれるシェルスクリプトを書いて、保存するとコンパイルが走るみたいのもすぐできるしでとても良かったです。 もちろんVSCode単体でもgitが使えるのでバージョン管理できます。(一応してた)
まとめ
今回の夏コミC92の1日目の状況を軽くまとめると
— しらたま (@shiratama13) 2017年7月26日
・叶姉妹サークル参加
・たつき監督サークル参加
・神主が東方新作頒布
・比村乳業サークル参加
・伊東ライフサークル参加
・みつみ美里サークル参加
・原田ひとみサークル参加
・開催日の8/11は祝日の為、参加し易い日程#C92
初参加にして死にそうです。がんばります。
UE4 + Hi 5 Glove を使ってみた感想とか
はじめに
今回はこちらで Hi 5 Gloveが使えるとのことで行ってきました
UE4が使える人がいたのでチームを組んでいましたが、申し訳ないと思いつつも全力でHi 5 Gloveで遊んでいました(チームのコンテンツには使ってない
その時の感想やらなにやらを書いておこうかと思います。 もっと写真撮っとけばよかった…夢中すぎた…
どこまで公開していいか分からない & 正式版とは異なる可能性があるのでふわふわした内容になってるかもです。
そして多分今回1番 UE4 + Hi5 Gloveを触ってます!わいわい
つくったもの
ハッカソン中に作ったものをモーメントにまとめてあります。
まとめた! #JXRH2017Tokyo https://t.co/Jb4rRuNYkj
— てんちょー (@shop_0761) 2017年6月25日
動作環境
Noitomさんから頂いたサンプルプロジェクトがUE4.14でした。ちょっと古いかも…と思っていましたが、やっぱりといった感じ。
PCはデスクトップをレンタルしたのでUnityは入ってるけどUE4が入ってませんでした。よくあることですね。
また、サンプルプロジェクトと一緒にUE4.14をzipにしたファイルもあり展開して使ってねと。 (オフラインのインストーラーがないから…らしい
ただこれだとPluginのロードに失敗してしまい結局あとでLauncherからエンジンごと入れ直したらいけました。 (たしかUE4Editor.exeからBrowseで対象のプロジェクトを開いたけどダメだった気が… 多分、既定のアプリ選択ミス…?
そして、会場でめちゃめちゃViveを使っているので
ベースステーションありすぎでしょ pic.twitter.com/PMSEKCYHiN
— てんちょー (@shop_0761) 2017年6月25日
となり、なかなかに厳しい環境でした。
0時から7時くらいは良かったですよ!みんな寝てたし!
— てんちょー (@shop_0761) 2017年6月25日
と、Hi 5 Gloveでの開発をするために30時間のハッカソン中は20分くらいしか寝てません()
キャリブレーション
Hi 5 Glove 独特のダンスをします。
参考はこちら
爆弾除去トレーニング for Vive with H5 #JXRH2017Tokyo
— ザバ(ザバイオーネ) (@z_zabaglione) 2017年6月25日
Hi5は手が出るぐらいしか生かせなかった pic.twitter.com/9enPynpmK4
Hi 5のダンスなら覚えました
— てんちょー (@shop_0761) 2017年6月25日
afjkさんの目の前で踊りまくってた
— てんちょー (@shop_0761) 2017年6月25日
BCPポーズと呼ぶらしい。導入用ビデオがあったらしいけど、もらったファイル類には含まれてなくて見てない…
使い方
グローブ側と通信するドングルがあるので、そいつを差して指の動きを取りつつ、ViveTrackerで手の位置を取る感じです。 ドングルとの接続するには、グローブ側にあるボタンを押すだけで繋がったら振動します。
UE4の場合、頂いたサンプルプロジェクトはすでにマニュアルの手順が終わっててキャリブレーションするだけでした。
ただよくわからないタイミングでクラッシュしたり、静かに亡くなったりして開発途中感があってちょっと楽しかったです。(つらい
今後変わるかもですが、グローブがつながってない状態で実行終了するとEditorが帰ってきません。
エディタで実行して停止すると帰ってこなくなるの辛すぎでしょwww(毎回起動し直し
— てんちょー (@shop_0761) 2017年6月24日
これは1個でも繋げばちゃんと戻ってきます。おかえり。
感想とか
ちゃんとキャリブレーション出来て、ViveTrackerも安定する環境でやるとめちゃめちゃキレイに動きが取れます。すごい。 そして、UE4なエンジニアじゃない人がEnglishなサポートしてくれてて、その人がわからない時はエンジニアに直で聞いてくれてたのでとても助かりました!ありがとうございます!
ただ若干グローブの着脱が難しい…かも Viveの頭のところのバンドを締める感じで腕に固定するんですが、 片手をつけた後にもう片方をつける時にグローブの素材がマジックテープにくっつくのでつらい()
ま まあ後は磁気なので気をつけるところはPerception Neuronに近いのかなと思ったり
まとめ
色々遊べるけど LeapMotionとの違いを見せつけるものにしような!!!
Hi 5 Gloveがはやくほしい(ください
【Unity】UNET(PC-Android) をしてみたお話
はじめに
UNETの基本的な使い方は我らが凹みTipsにまとまっています。
凹みTips 味わい深い(調べてるうちに何度もたどり着いて、そのたびに読み返している
— てんちょー (@shop_0761) 2017年4月13日
UNETのよくわからなさ加減はizmさんの記事の太字だけでもさらっと目を通すと、つらさがわかると思います…
https://t.co/ZDj1sduP9T
— 絵麻さんを養って幸せな家庭を築く (@izm) 2017年4月10日
とりあえずゲラゲラ笑いながら一通り訳しましたんで…みなさまの…UNETハマりが…減ることを…祈っております…
いくつか抜粋します
対応策:スクリプトの名前を動くようになるまで適当に変えます。(つらい)
とか
NetworkSimulationは期待した通りに動きません
かなしみ
今回は個人的にハマったりしたポイントや理解しにくいとこをまとめてみます。 Android6.0.1(Galaxy S6 Edge)-PC(Windows 7)間の通信がメインです。
PCをHost、AndroidをClientとして考えます。
Unityは5.6.0f3です。
ちなみにUnityをまともに初めて2-3ヶ月くらいなので、間違いとかは多めに見て欲しいです…(間違いがあれば教えてください)
ハマリポイントたち
Androidでの実機テスト
いちいち実機に移してテストするのは面倒だったのでPCでテストして、区切りのいいとこで実機テストしてました。
怠惰ゆえにUnity-Android間でテストしたくなりますが、出来ないっぽい…?
一応NetworkManagerのnetworkAddressにPC側のIPAdressを設定していても駄目でした。 どうやら、Client側がHost側を見つけられない → TimeOut のようなので 同一LAN内からUnityEditorが見えてないのかなと思ったり。
そのため、毎回PC版ビルドとAndroidに転送しなければテストできない… (方法があれば教えてください…)
ちらっとようてんさんに聞いたところ、Android側が悪さをしている可能性があるらしく、カーネルをゴニョゴニョするといけるかもとのこと。(やりたくない
悩める民たち(解決してなさそう)
https://forum.unity3d.com/threads/wifi-issues-on-lan-or-android-client-windows-server.336183/#n10
この辺ググっても全然でなくてみんなPhoton使ってるのかな…
この記述をみてもしや…と思って出来たくらい情報がない…
ネットワーク上の別PCと通信するには、ビルドしたアプリを配布して行う。LAN Client にホスト側のIPを設定するのを忘れずに。
---------------- 2018/02/16 追記 ---------------------
そういえば @shop_0761 さんが嘆いてたUNETのAndroidとUnityエディタの通信は、ウィンドウズのファイアウォール切って試すと通信成功したので、横着するならこれで良い気はしました。
— 絵麻さんを養って幸せな家庭を築く (@izm) 2018年2月13日
Firewall 切ると行けるらしいので イメージ図を描きました pic.twitter.com/0pCrlUQe7U
— てんちょー (@shop_0761) 2018年2月14日
おまけ
実行時に勝手にServer、Clientを判断してStartするのはこんな感じで書きました。
こいつはNetworkConnector.csとして作成して、NetworkMangerがAttachされてるGameObjectに 一緒にAttachしてます。
using UnityEngine; using UnityEngine.Networking; public class NetworkConnector : NetworkBehaviour { NetworkManager manager; //こいつを用意しておくとInspectorから変えれてPC上でのデバッグに割りと便利 お好みで public bool isStartAsHost = true; public string serverIPAdress = "(対象のPCのIPAdressをいれる 指定しないとlocalhostっぽい)"; // Use this for initialization void Start() { manager = GetComponent<NetworkManager>(); if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) { if (isStartAsHost) { manager.StartHost(); Debug.Log("Start as Host"); } else { manager.networkAddress = serverIPAdress; manager.StartClient(); Debug.Log("Start as Client"); } } else if (Application.platform == RuntimePlatform.Android) { manager.networkAddress = serverIPAdress; manager.StartClient(); Debug.Log("Start as Client"); } } } }
参考
simplestar-tech.hatenablog.com
Attribute
UNETはAttributeをつけることで、いろいろ挙動を制御できます。 Serverだけで実行したい関数、ClientからServerにデータを送りたいなどなど。
あちこちみても、結局この図に集約されている気がします。
まず、冒頭の凹みTipsの記事より
まず大前提として、UNET では同じゲームのコードでクライアント・サーバ共に動かしています。サーバ専用の言語を覚えたりする必要はありません。
これを把握していないと混乱して死にます。(死んだ)
ちょっと言い換えると、"一つのソースでServer、Clientが共存している" といったイメージです。
なので、同じソース内でServerとClientのやり取りをすることになります。 (ココらへんは混乱ポイントな気がする)
ので、"この変数は今Clientで更新したんだな"とかを把握しておかなきゃいけないわけで…
イメージ図を書いてみました。こんな感じで共存しています。緑のやつが実際に呼べる関数です。
Attributeの中で一番ハマったのはCommand / ClientRpc Attributeです。
またまた凹みTipsより
クライアントからサーバへのコマンドの送信 Cmd から始まる関数に Command アトリビュートをつけるとサーバで実行されるクライアントから呼び出せる関数になる
と
サーバからクライアントの RPC(リモートプロシージャコール) Rpc から始まる関数に ClientRpc アトリビュートをつけるとクライアントで実行されるサーバから呼び出せる関数になる
ポイントは "○○で実行される△△から呼び出せる関数" の部分です。
ちょっと自己流に言い換えるなら "実行するのは○○にある関数だけど、呼べるのは△△からだけだよ" って感じだと思ってます。
この"△△からだけ"ってのが重要で、
凹みTipsにもある
ただし、サーバかクライアントかといったことや、参照しているオブジェクトが各クライアントから見てローカルなのかリモートなのかは強く意識する必要があります。
ここに繋がるのではないかと思ってます。
もちろん呼び出すところを間違えるとエラーが出ます。
ただし、izmさんの記事より
[ServerCallback] クライアントから呼ばない時に付けますがエラーや警告が出ません。
同様に
[ClientCallback] サーバーから呼ばない時に付けますがエラーや警告が出ません。
ので注意しましょう。
--- 2017/04/24追記
また、NetworkManagerからPlayerとしてSpawnしたPrefabには権限(LocalPlayerAuthority)が付与されます。
権限がない他のPrefabからCommand Attribute のついた関数を呼び出そうとするとWarningが出ます。
Trying to send command for object without authority.
ので、基本的にはCommandはPlayerで使うものになりますが、Unity5.2から他のオブジェクトにも 権限を持たせられるようになったそうです。
詳しくはこちら
NetworkBehaviour を継承しておいて、 isServer、isClient、isLocalPlayerなどを使って分岐しましょう。
ただこれらも注意しないと同時にフラグが立ったりする可能性があるので、一応InspectorをDebug表示にするなどしてEditor上で確認するのがよいかと。
例) Hostとして起動した時のPlayer
参考
SyncVar
変数をServerとClientで同期できます。 が、
izmさんの記事より
変数をサーバーからすべてのクライアントに自動的に同期するために使用されます。クライアントからそれらに割り当てないでください。クライアント側での割り当ては無意味です
はい。 Clientで更新した変数はSyncVar Attributeで同期できません。
ので、こんな感じで書きました。
[SyncVar (hook = "OnUpdatePlayerID")] int playerID = 0; [Client] void setPlayerID(int id){ playerID = id; CmdUpdatePlayerID(id); } [Command] void CmdUpdatePlayerID(int id) { playerID = id; } [Client] void OnUpdatePlayerID(int id) { //処理 }
流れ
- ClientのどこかでsetPlayerID() -> ClientのplayerIDを更新 Syncされない
- CmdUpdatePlayerID() -> ServerのCmdUpdatePlayerID()を実行
- Server側のplayerIDが更新されるのでここでSyncする
- ついでにhookしておいたOnUpdatePlayerID()が呼べる(ただし、SyncしたのはClient側なのでClientで呼ばれる)
と、これを同一コード内でやるので、ごっちゃごちゃする可能性が…
hookのところはあってもなくてもおっけーです。(hook あまり自信ない…
hookに関してはこちらを
Network Message
Attributeよりわかりやすい気がします。(ただ、こいつも同じコード内でやり取りするとこを書くけど)
参考
適当に書いてみたやつを貼ります。Network Messageを使いたいコード内に書いちゃえば使えます。(やっつけ) まあFindしてるのは重たいのでホントはやらないほうがいいですが。
(手直ししてる部分があるので、あやしいとこがあるかも)
public NetworkClient client; int playerID; //MessageTypeを判別するのに使う public class MyMsgTypes { public static short MY_MES = 1001; }; //送りたいMessageのクラス MessageBaseを継承しておくこと public class MyMesssge : MessageBase { public byte[] bytes; public Vector3 pos; public bool isHit; public int playerID; } public void SetupClient() { NetworkManager manager = GameObject.Find("NetworkManager").GetComponent<NetworkManager>(); Debug.Log("Find NetworkManager: " + manager); client = manager.client; client.RegisterHandler(MsgType.Connect, OnConnected); Debug.Log("Setup Client"); } //OnHogehogeを登録しておく public void SetupServer() { NetworkServer.RegisterHandler(MyMsgTypes.MY_MES, OnHogehoge); Debug.Log("Setup Server"); } //繋がったときに呼ばれる public void OnConnected(NetworkMessage netMsg) { Debug.Log("Connected to server"); } //送る時用 適当に作った //MyMessageをnewして、値をセットして、client.Send()すればなんでもいいはず //Client Attributeをつけるといいかも public void SendMes(){ MyMesssge msg = new MyMesssge(); msg.bytes = ... msg.pos = ... msg.isHit = ... msg.playerID = ... client.Send(MyMsgTypes.MY_MES, msg); Debug.Log("Send Msg"); } //受け取ったときに呼ばれる 今回はServer側に登録してあるので、Serverで呼ばれる public void OnHogehoge(NetworkMessage netMsg){ MyMesssge msg = netMsg.ReadMessage<MyMesssge>(); byte[] bytes = msg.bytes; Vector3 pos = msg.pos; bool isHit = msg.isHit; int playerID = msg.playerID; Debug.Log("recieved Msg"); }
RegisterHandlerでデリゲートを追加する感じで使えると思います。
SetupClientはあってもなくてもいいですが、client.Send()は使えるようにどこかでclientを格納しておく必要があります。
これはClient→Serverですが、RegisterHandlerを同じように使えば逆もできるはず…(やってないけど)
サンプルがpublicになってたので、なんとなくpublicにしてあります(変な地雷を踏みたくないので)
-- 2017/04/25追記
playerにIDを割り振りたい
参考
だいたいどこを見ても、
playerNetID = GetComponent
().netId;
で持ってきています。確かにユニークです。
ただ、playerに0始まりでIDを振りたいとなると話は別です。
ここから想像のお話なので、あってるかはわかりません。詳しくはソースを読んで下さい。
この netId 恐らくScene上のNetworkIdentity Component の数に依存している気がします。
というのも、netIdで取ってきた数値がなぜか 4 始まりだったので、
playerNetID = GetComponent<NetworkIdentity>().netId - 4;
とかやってました。
ですが、他のprefabでNetworkIdentityを使うことになったので、追加するとErrorが吐かれてしまいました。
つまり、今後SceneにUNET周りを使いたいPrefabなりなんなりが増えるたびにIDがズレます。
しかも恐らくplayerはSceneの最後でSpawnされるのかどんどん後ろにずれていく気がします。
public override void OnStartLocalPlayer() { if (isClient) { playerID = GameObject.FindGameObjectsWithTag("MainCamera").Length - 1; } }
とかで取ってくるほうがよい気がしました…
想像おわり。
--
おまけ -AndroidでScreenShot-
普通はApplication.CaptureScreenshotを使うらしいのですが、 これは真っ黒になるので使えませんでした。
こちらを参考にRenderTexture経由のほうがよいです。
ついでに、保存先はAndroidの場合 Application.dataPath ではなく、 Application.persistentDataPathのほうがいいそうです。(というかこっちでないと保存できない)
Application.dataPathはapk内の領域になるので、ビルド時はAndroidではファイル生成とかできないですよ。Application.persistentDataPathに生成しましょー
— 城黒白 (@taku_nishimu) 2017年4月14日
PCに送りたいときはできたbyte配列をNetworkMessageで送ってやればよいです。 ただし、サイズが大きいと怒られるので分割して送って受信側でくっつけてやればよいです。 (正しく送れるとは言っていない)
おまけ2 同一LAN内のはずなのに繋がらない
Network初心者あるある(だと勝手に思ってる)
テスト環境で複数Wifiが飛んでいて、ついつい全て端末に登録しておくと 勝手にWifiを繋ぎ変えられてデバッグで死ぬ可能性があります。
そのため、1つしか登録しないとか、繋がらないときは端末のIPAdressに pingを飛ばして確認したほうがよいです。(1時間くらい悩んだ)
あとはTimeOutの時間を伸ばしておくと良いかもです。 NetworkManager → timeouts → Connect Timeout で設定できます。
まとめ
さいごに
デバッグがつらい!! 毎回ビルドしなきゃいけない!!
聞いた話によるとPhotonのほうが楽らしいです。 そっちは見てないのでわかりません。
以上ここ1週間くらい格闘している(進行形)お話でした。 (つづくかも
なにかあれば@shop_0761まで
あなたにUNETのご加護があらんことを
【UE4】UnityChanLIVE-UE4Ver-を作ってみた & 公開してみた
はじめに
前々からどこまでいけるか作ってみたかったので、作りました。
面倒事が多かったのでしんどかったですが、とりあえず形になりました。
動画
githubにあげてみましたので、参考にどうぞ
2017/05/07 追記
Androidに移植してみました
プロジェクト
とりあえず実行したい方は、現段階での.apkがあるのでそれも配布してます
UnityChanLIVE UE4ver のAndroid移植版だけ先に公開しておきます
— てんちょー (@shop_0761) 2017年5月7日
(Galaxy S6 Edge Android 7.0は確認済)
メモリ周りがアレなので、1周まわせば安定して大体60fpsでます()https://t.co/poFBOvDTm3
AndroidSDKがあれば、端末をPCに繋ぎzip展開後にInstallからはじまる .bat を実行すれば入る…はず
なければ .apkが同梱されてるのでそちらを直接入れるのがいいかと
ポチーしてインストールできるのはAndroidSDKがPCに入ってる方だけっぽいですね(adb コマンドがない)https://t.co/WG6sXc5hHG
— てんちょー (@shop_0761) 2017年5月7日
ので、同梱してある.apkを直接インストールする方法がよいかとおもいます
問題点
- Sound Visualization Plugin の使い方がいまいち分からないため、音量に応じて変わるやつは全てCSV書き出し&floatCurve
- 髪がいい感じに揺れない
Unity側で髪の揺れまでAnimに焼き付けたもの(300MBくらい)はあるのですが、FBXにできないため詰んでる
Mayaに持っていくフリーのアセットを見つけてやってみたものの、Rotation周りで死亡しました。Exportしっぱい。
2017/05/07追記
- メモリ周りがアレなので、一周すると安定するはず…(一周目は最初の2回ほどフックします…
こだわりポイント
最適化するにあたってこだわったところを忘れないうちに書いておきます
- UnityChan Shader は手を入れない (ほぼそのまま使う
- UE4内で完結させる (Mayaとかでモデルをいじったりしない
- Particleはゼロにしない
- backScreenを一枚絵でごまかさない
まとめ
時間を見つけて、大変だったとことかを書いていこうかなと思います。 なにかあれば、@shop_0761までご連絡くださいまし。
2017/05/07追記
Android版はmasterとbranchを分けてあるので、Androidへの最適化の練習になればと思います
新しいVR内入力方法を考えてみたお話
はじめに
つい最近まで、音声認識オンリーで生活していました。
その時に思いついた新しい入力方法についてそれとなくまとめておきます。
参考はこちら
新しいVR内入力方法を作ってみた Vine版 (キーボードではない何か #UE4 #VR_keyboard https://t.co/y554L587vj
— てんちょー (@shop_0761) 2017年1月3日
新しいVR内入力方法を作ってみた(キーボードではない何か#UE4 #VR_keyboardhttps://t.co/1ovDuVQ1uQ
— てんちょー (@shop_0761) 2017年1月3日
簡単な解説
キーボードという概念にとらわれすぎないようにと、ふと浮かんだ手法です。名前はまだありません。
勝手に意味分からない名前をつけたり、Assetの名前はありますが
ミョーミョン すでに作られてそうなので、新しく作る予定のvrキーボードのコードネームをバッペルッポとかにしようかな
— てんちょー (@shop_0761) 2016年12月27日
使い方
50音表的なやつから、文字を掴んで空中に配置します。
それをOculusTouchのThumbStickに触りながらポイントしていくと青色になり、離すと辿った文字が入力されます。
これだけ。
この入力方法のポイント
ツイートにまとめても良かったんですが、流れちゃうので忘れないようにまとめておこうかなと。
今回のポイントは 自分でキーボード的なものを作れる ところにあります。
これだと従来のキー配列にとらわれることなく自分で生成できます。生成と言っても、大層なものではなく、キー配列を覚える/覚え直す 必要がなくラクです。
ついでに簡単なセーブ/ロード機能を付けてあります。 空間にそのまま文字を保存できるので複数個用意できれば、Twitter用によく使う3パターンを作るなんてこともできるかと。
文字をなぞる順番もなく右から左になぞっても入力できるので、ユーザーのTwitterの直近20000ポストくらいから 本人がよく使うこの入力方法用の文字列を生成する なんて研究もできそうですね。
オススメの文字配列をTwitterで共有したりもできそうです。
深く考えてなかったのですが、ViveやLeapMotionにも対応できる気がするのでコントローラー依存ではない入力方法だと思ってます。
まとめ
とりあえず整理したあとにOculusHomeのPreviewAppに更新をかけてみて、もろもろの反応を見た後にこれを作り続けるか決めようかと思います。
実際手でポイントするのは微妙な気がするので何か考えたいところですが。
興味がある方は@shop_0761等にご連絡いただければPreviewAppのテスターに招待しますー (ReviveでViveでもできるかも
VRキーボードのためにキーボードを封印したお話
はじめに
ちょっと前にGOROmanさんがこんなことを言っていました。
目指しているのは キーボード、マウス、ゲームパッド というレガシーインターフェースからの脱却
— GOROman@謙虚 (@GOROman) November 1, 2016
マウスとキーボードは叩き壊す予定です https://t.co/HLCCt7qmFS
— GOROman@謙虚 (@GOROman) November 29, 2016
じゃあ実際にやってみよう!!ってことでやりました。
マウスを封印するお話はいくつか聞いたことがありますが、キーボードを封印するお話は聞いたことがなかったので面白いかなと。
キーボードという概念をぶっ壊すために、とりあえず明日から年内はハードウェアなキーボード、スマホのキーボード、仮想キーボードなどを封印します
— てんちょー (@shop_0761) December 20, 2016
(自分の作ったVRキーボードを除く)
キーボードやめます(とりあえず年内だけ pic.twitter.com/z1sZM9jk0x
— てんちょー (@shop_0761) December 20, 2016
VRキーボードを除いたのはTwitterができない可能性があったので一応保険的な意味です。(結局使わなかった
条件
キーボードと名のつくものを封印します。
例として
- PC向けの普通のキーボード
- スマホで使えるキーボード類
- ATM等の数字を入力する系のキーボード
などを封印しました。基準としては、数字や文字を選択してからEnterで確定するものをキーボードと定義しました。
事前準備
使ってるマイクはこれ
http://www.yodobashi.com/ec/product/100000001001262667/index.html
ATM
(今更だけど ATMからお金下ろせなくなるのでは)
— てんちょー (@shop_0761) December 20, 2016
ビビったのでATMで少し下ろしてきた
— てんちょー (@shop_0761) December 20, 2016
Cortana
cortana 蘇生成功
— てんちょー (@shop_0761) December 20, 2016
ピクチャパスワード
win10 ピクチャパスワードなるものを知ってキー入力を回避できることが分かった
— てんちょー (@shop_0761) December 20, 2016
こういうのを使おうかなとhttps://t.co/UkZ60FHliQhttps://t.co/6SouwWoJ7a
— てんちょー (@shop_0761) December 20, 2016
特に書いてませんが、Siriのセットアップもしました。
だが
— てんちょー (@shop_0761) December 20, 2016
音声認識ツールの使い心地
Cortana
対話式なので、一気にしゃべらないといけない点を除いて多分1番精度がいい。
だができることが少ない。もったいない。後述のwindows音声認識の機能を全てCortanaで出来るようにすればもっといい。
認識精度が良すぎなので、これを作った。なお全て音声認識で記事を書いてます。
スクリプトはさすがにコピペ祭りですが。
windows音声認識
windowsの操作が色々できるので便利っちゃ便利。 CortanaだとEnterができないので、その度にこいつでEnterを入力していました。
一応ここまで出来る。
@shop_0761 pic.twitter.com/PuEr5rZyUR
— てんちょー (@shop_0761) December 20, 2016
未来感ありますね!! ただ非常に面倒。(何回も撮り直しをしている
コマンド一覧はこちらに。
https://support.microsoft.com/ja-jp/help/12427/windows-speech-recognition-commands
多分こいつは教育できるので精度は上がる…はずなんですが、
そういえば昨日隣で他の人が電話してる時に.ウィンドウズ音声認識が全く使えないケースがあって笑った
— てんちょー (@shop_0761) December 28, 2016
と、ほぼ部屋に一人の状態かつ、BGMもかけられない感じでアレです はい。
Siri
Siri自体も簡単なセットアップがあるのですが、なぜかHeySiriで起動しない…
それもあってあまり使っていない…
けど、副産物的に利用できるようになる音声入力がありました。
こいつが意外と使えます。対話式ではないので、多少考えながら発話できます。
ただ、途中で変換予測が変わったりして荒ぶったりすることもありますが。
iPhoneにもAndroidのパターンロックが使えるようになって欲しい…(指紋認証できるけど、ミスると結局キー入力なのでロックを切ってた
使ってみた感想
いいところ
意外と生活できるし、メールも返信できました。
かなり良く無いですか pic.twitter.com/b8BZThRMlv
— てんちょー (@shop_0761) December 22, 2016
ただ時々思ったように変換してくれなくて、不必要な部分をカットしたり、ペーストしてツギハギしたりしてました。
主婦さん(@Somelu01)さんとも普通にDMしたりできました。
てんちょーさんとDMしてたの、全部音声認識で入力されてたって、言われるまで全くきづかなかった。すごい。 pic.twitter.com/UkfY2Bdu6B
— Somelu (@Somelu01) December 22, 2016
そして、手が疲れない!!大事!!
悪いところ
誤認識時の修正が面倒。 固有名詞が認識できない。(これは辞書がないのでしゃーないけど
打ちたい内容がダダ漏れ。 居間とかでTwitterが出来ないし、話しかけたと思われてしまう。
コードが書けない。
不思議なお話
音声認識を使っていて変な違和感が出てきた話をすると、最初はなんとも無いんだけど、段々喋ると認識されてしまうと思うのか、余計なタイミングで喋ってはいけないのではという心持ちにさせられた
— てんちょー (@shop_0761) December 31, 2016
これ、結構不思議な話で、ある程度意識的に口を閉ざしている場面が幾つかあり、なぜか無口になる時がありました。
多分なんですが、音声認識される環境に居続けると余計な発言までも認識されてしまうと思ってしまい不必要な発言を避けてしまうのかも。
これはこれで卒論が書けてしまいそうですね…
まとめ
音声認識 割りといける。Juliusも使ったことがありますが、未調整のと比べるとかなり精度がよくなってきています。
一度Cortanaを封印しないで使ってみては?