Kilimanjaro Warehouse

WEBとかゲーム開発のことについて書きます。

VRChatで動画を撮影する & Stream Cameraの使い方

VRChatで動画を撮影する方法を紹介します。

動画の撮影

Windows 10ではゲームバーという機能を使って動画を撮影することができます。

①VRChatを起動します。
②VRChatが非アクティブになっている場合、
ウィンドウをクリックしてアクティブにします。
f:id:kilimanjaro-a2:20181216141353p:plain←非アクティブ
f:id:kilimanjaro-a2:20181216141351p:plain←アクティブ

③キーボードのWindowsキーとGを同時押しすると、
ゲームバーが表示され、録画ボタンを押すと録画が開始されます。
f:id:kilimanjaro-a2:20181216140514p:plain←ゲームバー
f:id:kilimanjaro-a2:20181216140515p:plain←録画開始

④録画を停止するとC:¥Users¥[ユーザー名]¥Videos¥Captures内に撮影した動画が保存されます。
f:id:kilimanjaro-a2:20181216140512p:plain←録画中

もしVRChatのウィンドウをクリックした際にマウスのカーソルが消えてしまい、他の操作ができない状態になってしまったら、キーボードの左上にあるescキーで抜けることができます。
また、Windowsキー + Alt + Rを同時に押すことで、すぐに録画を開始することもできます。

Stream Cameraの使い方

VRヘッドセットを使用している場合、Stream Cameraを使用することで、
映像を撮影する視点を変更することができます。

Stream Cameraに写した対象はデスクトップ側のVRChatへ映し出されるので、
これを利用することで自由な位置から映像を録画できます。

メニューを開き、Cameraを選択します。
f:id:kilimanjaro-a2:20180825152546p:plain
Stream Cameraを選択します。
f:id:kilimanjaro-a2:20180825152627p:plain
すると、持ち歩き可能なカメラが出現します。
このカメラに映し出されているものが、デスクトップ側に表示されます。
f:id:kilimanjaro-a2:20180825152550p:plain

カメラはトリガーで持つことが可能で、位置を調整することができます。
オレンジ色のボタンを何度か選択すると、Look at Meモードという常に自分の頭の方向へ撮影を行うモードになり、自撮りが可能です。
f:id:kilimanjaro-a2:20180825152540p:plain
(目玉のアイコンです)
f:id:kilimanjaro-a2:20180825153836p:plain
このカメラのボタンが結構押しづらいです。右手でカメラを持った状態で位置を調整しながら、左手でボタンの近くをうろうろさせるのがコツです。

カメラには他にもたくさんオプションがあります。詳しくは公式のドキュメントをご覧ください。
VRChat

Blender Cheat Sheet

たまにBlenderを触るとき、いつもショートカットを忘れてしまうので、
個人的によく使うものを備忘録としてまとめておきます。

画面操作

中クリックでドラッグ 画面回転
スクロール 画面拡大縮小
Ctrl + スクロール 左右スクロール
Shift + スクロール 上下スクロール
1(テンキー) 前視点
3(テンキー) 右視点
7(テンキー) 上視点
Ctrl + 上記の数字(テンキー) 逆の視点
5(テンキー) パースペクティブオーソグラフィック切り替え

モード切り替え

Tab モード切り替え(Object/Edit)
Ctrl + Alt + Q 四画面分割
T ツールシェルフ
N プロパティシェルフ

選択

A 全て選択
B 矩形選択
C 塗りつぶし選択
Ctrl + I 選択しているものと選択しないものを入れ替える
Ctrl + "+" 選択の範囲を広げる
Ctrl + "-" 選択の範囲を狭める

操作

G 移動
R 回転
S 拡大縮小
H 非表示
Shift + H 選択中以外のものを非表示

Object Mode

P オブジェクトの分割
Ctrl + J オブジェクトの結合

Edit Mode

Ctrl + Tab 頂点・辺・面の切り替え
K ナイフ
Ctrl + B 面取り(Bevel
Ctrl + R ループカット
I 面の差し込み
E Extrude
Alt + E Extrudeメニュー
Ctrl + 左クリック 辺・面を作る
F 面を張る(Fill)
Alt + F 三角形で面を張る
W + 1 細分化
Shift + Alt + S 球体化
P 別オブジェクト化

その他

Shift + S 3Dカーソルの位置移動
O プロポーショナル編集モード
M レイヤーの移動
Shift + A プリミティブの追加
Ctrl + G グループ化
Ctrl + Alt + Shift + M 穴が空いている部分を一括選択
Shift + Ctrl + Alt + F リンクするフラットな面を選択

Unity: Package ManagerからインストールしたPackageのソースコードの場所

最近Packageに追加されたVector GraphicsのAPIの仕様について調べていたのですが、
主要なコードがDLLにコンパイルされており、中身を読むことができなかったので、
コンパイルされる前の中身が置いてある場所を見つけ出しました。

ソースコードの場所

下記のディレクトリ以下にインストールしたPackageのキャッシュが残っており、
DLLファイルにコンパイルされる前のソースコードを読むことができます。

Windows:

C:\ProgramData\Unity\cache\packages\packages.unity.com

macOS:

~/Library/Unity/cache/packages/packages.unity.com

情報元:
https://forum.unity.com/threads/vector-graphics-preview-package.529845/#post-3500904
qiita.com

今回の私の場合、探していたVector Graphics(1.0.0 - preview.15)のソースコードは、
com.unity.vectorgraphics@1.0.0-preview.15
という名前のディレクトリの中にありました。

Unity: Vector Graphics APIでSpriteに動的にColorを設定する方法

Vector Graphics APIで描く図形に色を設定するには、
StrokeクラスのColorフィールドにColor型の変数を代入し、
それをIDrawableを実装したクラスのPathPropertiesフィールドに代入しておくことで設定できます。

しかし、執筆時点(2018/07/22)では、
Spriteに対して動的に色を変更したい場合には、通常の設定方法ではうまくいきません。
(publicやSerializeFieldをつけた変数にインスペクタ上から色を設定したときなども同様)
今回はこの問題について、原因と解決方法を見つけたので書き記しておきます。

使用した環境
OS: macOS High Sierra
Unity: 2018.1.1f1
Vector Graphics: 1.0.0 - preview 13

解決方法

情報元は、Vector Graphics Preview PackageのForumです。
https://forum.unity.com/threads/vector-graphics-preview-package.529845/page-2#post-3533043

Unityの中の人によると、この問題はSprite RendererがSVG spriteによって既に使われている頂点カラーチャンネルを使用しようとすることによって起こるそうです。
そして、GPU Instancingを有効にすることによって、これを回避できるそうです。


具体的な回避の流れは、

  1. 新しいMaterialを作成し、ShaderにUnlit/Vectorを割り当てる(Gradientを使用している場合はVector/Gradient)
  2. MaterialのEnable GPU Instancingにチェックを入れ、SpriteRendererを持つGameObjectに割り当てる
  3. SpriteRendererに変更したいColorをセットしたMaterialPropertyBlockを渡す

といった感じになります。

3に関しては、こんな感じのコードで渡すことができます。

MaterialPropertyBlock block= new MaterialPropertyBlock();
SpriteRenderer sr = GetComponent<SpriteRenderer>();
//NewColorは変更したい色のColor型の変数
block.SetColor("_Color", NewColor);
sr.SetPropertyBlock(block);

参考:
Unity - Manual: GPU instancing

思ったこと

Vector Graphics API はまだpreview版ということで、
これから不具合の修正や新機能の追加がたくさん行われていくと思います。
その中で、この問題がもっと手軽に解決するようになれば良いなと思いました。

Oculus Go: Unityでゲームパッドを使ったアプリを開発する手順

巷で話題のOculus Go、皆さんはもう買いましたか?
Oculus GoはAndroidを積んでいるので、Unityで自作VRアプリを作って手軽にインストールして遊べます。

というわけで、少し試してみました。

こちら、去年ゲームジャムで作ったゲームを、Oculus Goに移植したものです。
数時間で、割と簡単に移植できました。
(去年の私が書いた変なコードのせいで手間取りましたが、本当に簡単にできます)

このゲーム、Oculus Go付属のコントローラーの代わりに、
Bluetoothゲームパッドを繋いだもので操作を行なっています。

今回は、このゲームのようにゲームパッドを使用したアプリをOculus Goで動かす際に参考にしたサイトを紹介します。

(残念なことに私が使用したPS4のコントローラーは、入力に遅延が生じてしまうので実用性はありません)
kiliware.hateblo.jp

Unityでゲームパッドを使用する

Unityで開発するゲームでゲームパッドを使えるようにします。
こちらのサイトがわかりやすいと思います。

【Unity】Input Managerの使い方まとめ。PS3やPS4のコントローラの入力を取得しよう - おもちゃラボ

http://inter-high-blog.unity3d.jp/2017/07/04/gamepad/

Controller Testerは便利です。


Unityでアプリをビルドし、Oculus Goで動かす

Unityで作ったアプリをOculus Goで動かす方法については、以下の記事がわかりやすいです!

[Unity] Oculus Goで3Dキャラクターを眺めよう | Cocoamix.jp
UnityでOculusGo向けVRゲームをつくろう!【設定編】 - ぞヴ記

地味にここが一番難関です。
私はJDKのバージョンが10だとビルドがうまくいかず、8に下げたら通るようになりました。
他にも、Android SDK Toolsのバージョンが高いとうまくいかず、古いものに置き換えるとビルドが通るようになるという現象が他の人の環境で起きていました。
Androidのビルドは、環境によって何故かうまくいかなかったりといったことが結構あるので、上記の記事でうまくいかなかった場合、各自頑張って解決方法を探してください...)


Oculus GoにBluetoothゲームパッドを繋げる

Oculus Goでゲームパッドを使えるようにします。
こちらのサイトが参考になります。

[Oculus Go] Bluetoothゲームパッドを繋げてみる/Netflixで使えた

私はPS4のコントローラーで行いましたが、他のコントローラーでも手順はほぼ同じはずです。


Oculus Goにビルドしたアプリを転送する

Windowsなら、USBケーブルで繋いで適当なフォルダに.apkファイルを入れれば良いと思います。

私の環境(macOS)では、Oculus Goを繋いでもMac側で認識できず、ファイルを転送できませんでした。
その際にはAndroid File TransferというアプリがAndroid公式から出ていますので、こちらが使えると思います。
Android File Transfer

遊ぶ

スマホアプリからOculus Goを開発者モードに変更し、ゴーグルを被り、
Oculus Goのライブラリ
ー>提供元不明のアプリ
この中に先ほど転送したアプリがあるはずなので、それを起動すれば、遊べるはずです!

質問・間違いの指摘などはきり (@KiliWare) | Twitterまで!

Oculus Go: 使えるゲームパッド(コントローラー)についての調査

Oculus GoはBluetoothゲームパッドを繋いで、対応しているゲームを遊べます。
今回は、Oculus Goで使用できるゲームパッドについて調べてみました。


<注意>
実機で確認できていない情報が多いので、鵜呑みにせず、
参考程度にしていただけると幸いです。
実際に購入される際は自己責任でお願いします。

家庭用ゲームコントローラ

www.youtube.com
こちらの動画が非常に参考になりました。
(実際にゲームをプレイした感想や、コントローラーの感触などの感想まで詳細に語られています)

記事執筆時点(2018/06/14)では、PS4のコントローラーであるDUALSHOCKは入力に遅延が発生するため、
Oculus Goではまともに使える状態ではありません。
PS4のコントローラー以外は実機で確認ができていないのですが、
調べたところによるとNintendo SwitchのProコントローラーも同様のようです。

家庭用ゲーム機のゲームパッドでは、Xbox One Sコントローラーが遅延なく動作するようです。
Xbox Oneのコントローラーは、Sであることが重要らしく、
それより古いコントローラーだとBluetooth通信ができないなど、正常に動かないようです。

動画内では、Xbox One Sがとても良い!という結論になっていました。
持っている方は試してみてはいかがでしょうか。

その他コントローラー

そして、家庭用ゲーム機のコントローラー以外では、こちらの3つが適しているようです。

  • SteelSeries Status XL
  • Moga Pro

Is the Oculus Go compatible with any other controllers? — Oculus

こちらのフォーラムによれば、Oculus Supportによる回答とのこと。

SteelSeries Status XLは、先ほどの動画でも正常に動作すると紹介されていました。

Moga Proは、フォーラムにOculus Goに繋げなくて困っている人の書き込みがありました。
これはその人の特有の環境によるものなのか、Oculus Goとコントローラーの相性によるものなのかは不明です。

他にも、8BitDoというコントローラーが正常に動作するという情報を何件か見かけました。

追記(2018/07/29)

ゲームパッドではなく、Oculus Go付属のコントローラーをもう一台追加したいと思っている人へ。
予備のコントローラーは公式サイトから購入することができますが、一度に接続できるのは一台のみのようです。
なので、Oculus Riftなどの高級なヘッドセットのように、両方の手にコントローラーを持って同時に使うといったことはできないようです。
www.oculus.com


思ったこと

対応しているゲームもそれほどなさそうなので、
Oculus Goのために今急いでゲームパッドを買う必要はないかなと思いました。
開発者の方であれば、自分で開発するゲームで使いたい!という需要があるかもしれませんね。
一番良いのは、Oculusが公式でOculus Go用のゲームパッドを出してくれることですかね...

今回、正常に動作されないと紹介されたコントローラーに関しても、
今後のアップデートなどで使えるようになる可能性がありますので、
動向を見守っていきたいと思います。

#unity1week に参加した ~ギリギリ編~

こんにちは。
unityroom主催のUnity 1週間ゲームジャムに参加しました。
今回は第8回目の開催で、お題は「ギリギリ」でした。
Unity 1週間ゲームジャム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

今回はjun-kiさんとコンビを組んで参加しました。
jun-ki (@jun_3453) | Twitter
作ったゲームはこんな感じです。

1週間、どんなことを行なってきたのかをブログに記しておこうとおもいます。

1日目(月)

とりあえず二人で話し合って、作るゲームを決めました。

  • トイレでギリギリ漏れそうな男性が、閉まっている個室を叩きまくる音ゲー
  • 茶店で店員が怒るギリギリまで水を頼んで時間を潰すゲーム

みたいな変なアイディアばかりでました。

途中でjun-kiさんが発した、「QTEをゲームに取り入れたい」という意見を受けて、
「上司にギリギリ見つからないようゲームで遊ぶ」というゲームを作ることに決定。
(結局QTEとはちょっと違った形になりました)

開発にはGitとTrelloを使うことに決まり、とりあえずその日は環境を作って終了。

2日目(火)

この日から実際にゲームを作り始めました。
「上司から隠れるゲーム」と「ゲームの中のミニゲーム」の二種類のゲームが必要になったので、
私は後者の方を開発することになりました。
2~3時間くらい作業して、簡単なプラットフォーマーが完成。

このミニゲームも、端のブロックから端のブロックへジャンプすると高得点がもらえるという、
ギリギリ要素を入れています。

3日目(水)

3日目ですが、この日はとても眠かったので、あまり作業できず早めに寝てしまいました。
実はこの時期、夜あまり眠れなく、睡眠不足な日々が続いていたのですが、
この日はぐっすりと眠ることができ、割と気分は良かったです。

4日目(木)

前日たくさん寝たおかげで、気力が満ちていたので、5~6時間作業できました。
作業の途中で、こんな発見がありました。


それはともかく、私が作ったゲームの部分で、「ジャンプの感触が変」という指摘が入りました。
ジャンプの高さを、キーを押した長さによって変化させるような仕様だったのですが、
初速が足りず、気持ちがよくない感触になっていたようです。
ここがなかなか難しく、追加で実装した二段ジャンプを含め、結構なハマりどころでした。

5日目(金)

この日も眠く、あまり捗らず寝てしまいました。

6日目(土)

この日は午後からずっと開発をしていました。
その甲斐もあり、夕方くらいに、下画面との統合を行い、システム部分はほぼ完成しました。

それ以降は、見た目の部分や細かい手触りを整える時間になりました。

7日目(日)

最終日。タイトル実装や細かい見た目の作成などを行いました。
ゲームジャムに参加するときは、大体いつも時間が足りなく、
最終日には泣きながら必須の機能を実装するということが多かったのですが、
今回は割と余裕があり、タイトル画面など、細かい場所をいじることができました。
(それでも、もっと時間は欲しかったですが...)

この日までこのゲームのことを「上司ゲーム(仮)」と呼んでいたのですが、本番の名前を決める必要がありました。
タイトル案は「上司の居ぬ間にゲー活」と「ギリギリーマン金太郎」という二つの案が出ました。
前者は「鬼の居ぬ間に洗濯」のもじりで、後者は...(略)
最終的に、ゲームの内容を説明できている前者に決まりました。

そういうことで、ゲームが完成しました!

完成したゲームへのリンクはこちら
上司の居ぬ間にゲー活 | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう



以下、今回完成したゲームについて、
「工夫したこと」と「できなかったこと」を挙げておきます。

工夫したこと

・いらすとやの素材を加工する!
f:id:kilimanjaro-a2:20180611235805p:plain
上司から隠れるゲームには、いらすとやの素材を使用しました。
プレイヤーの素材は、緑色の服を着た男性が白いパソコンで寿司のイラストを描いているものを使用したのですが、そのままでは使えなかったため、加工しました。
画像全体を黒っぽくすることにより、上画面の黒いパソコンと下画面の白いパソコンの色を合わせ、男性の画像を切り取り、服の色だけ変えたものを上から被せるようにしました。
これにより、スーツで仕事してるっぽい雰囲気を出せました。
パソコンの画面は、Render Textureというものを使用して、別の場所にあるミニゲームを撮影して映しています。


・仕事画面
f:id:kilimanjaro-a2:20180613085742p:plain
仕事画面は、某OSっぽい感じに作りました。
ここに書いてあるコードは、私が書いて、実際にこのゲームで使われているクソコードです。


・操作の簡単さ/タイトルでのチュートリアル
f:id:kilimanjaro-a2:20180613085746p:plain
操作方法はわかりやすくするため、二種類だけにしました。

  • Zキーで仕事画面とゲーム画面の切り替え

そして、タイトル画面で、実際にその操作を行えるようにしました。
このゲームは、「ミニゲームで遊ぶ」と「上司から隠れる」という二種類のゲームが内包されており、
初見の人がいきなりこの二つを把握するのは難しいかなと思い、前者のゲームに慣れてもらうために用意しました。
分業して作っていたので、それぞれのゲームの依存性が低く、簡単に実装できました。


ツイッター/ランキング機能
jun-kiさんが実装してくれました。
今まで時間がなくて、ランキング機能を入れたことがなかったのですが、追加できてよかったなと思いました。
私より高いスコアを取っている方もいて、驚いています...
遊んでいただいてありがとうございました...!

できなかったこと

ミニゲームのエフェクト
全てのブロックを塗りつぶすとボーナスが入るのですが、
見た目上なんの演出もないので(音は違う音が鳴る)、わかりづらいかなと思いました。
積極的に全て塗りつぶしたくなるようなエフェクトや、加算されるスコアを表示したかったなと思っています。


・ゲームオーバー時の演出/リザルト画面
上司に当たると、即ゲームオーバー画面に入るのですが、
他の方のゲームを見ると、敵と当たった際に一瞬スローモーションにするなど、
「当たってしまった感」を出す演出があったりして、そういう演出を入れるべきだったなと後悔しています。


・上司の当たり判定の調整
上司の当たり判定は、赤いエリアに入ってくるとき以外はかなり緩くしています。
なので、上司が赤いエリアにいる状態でミニゲーム画面に戻しても、アウトにならずゲームが続行する場合があります。
これは意図的なものなのですが、どこまでアウトでどこまでセーフかが、プレイヤーにとってわかりづらいかなと思いました。
当たり判定を可視化したかったな〜と終わった後に思いました。


・ゲームバランスの調整
このゲームのテーマがギリギリということで、
上司がギリギリまで近づいているほど、ミニゲームで遊んでいるメリット(スコアの倍率が高くなる)があるようなゲームデザインにしました。
しかし、上司が発生する間隔や、ブロックが発生する間隔がランダムなので(ある程度の調整はしているが)、
いい感じにスコアを取れるかどうかが運任せになってしまうのが問題かなと思いました。


・設計
例によって私の書いたコードがクソコードだったので、
きちんと設計して綺麗なコードを書けるようになりたい...

思ったこと

今までゲームジャムには何回か参加していますが、今回は初のチーム参加ということで、得るものが多かったと思います。
なにより、最後まで完成させることができてよかったです!
次回のunity1weekにも参加しようと思いました。
(今度はデザイナーとか作曲家のような、プログラマー以外の人もチームに入れて参加とかしてみたい...!)