アウトドアとかゲーム開発とか

ロードバイクやキャンプなどアウトドアとUnityでの開発とか

【VR】MirageSolo+Unity開発 基本編

MirageSoloアプリをUnityで作っていく際の覚書。

カメラのトラッキング

他のVRバイス同様、PlayerSettings内の『Virtual Reality Supported』のチェックをオンにするだけです。

顔モデルを配置したい場合はカメラの子にするか、メインカメラのTransformの値を取得して反映させます。

コントローラを使う

『GvrControllerMain』プレハブをシーンに配置します。
これでボタン入力など取得できるようになります。
f:id:vrcycling:20180907233407p:plain

コントローラのモデルを表示する

『GvrControllerPointer』プレハブをシーンに配置します。
f:id:vrcycling:20180907233615p:plain

カメラと同じ位置に配置するといい感じの位置に表示されます。
カメラのClipping PlanesのNearの値を小さくしておかないとカメラのモデルが正しく表示されないので注意しましょう。

コントローラのガイド表示を変更する

先ほどシーンに追加したコントローラのプレハブの子にある、『ControllerVisual』オブジェクトの『Gvr Controller Visual』のInspectorにある『Attachment Prefabs』を変更します。
f:id:vrcycling:20180907234446p:plain
なくす場合はSizeを0にし、変更する場合はElement 0を変更します。
GvrControllerTooltipsTemplateをカスタマイズしてアタッチすることで好きな内容に変更できます。

ボタン入力を取得する

GvrControllerInput.~~で取得します。以下一部抜粋

AppButtonDownアプリケーションボタンを押したとき
HomeButtonDownホームボタンを押したとき
ClickButtonDownタッチパッドボタンを押したとき
TouchDownタッチパッドに触れたとき
TouchPosタッチパッドに触れている位置(Vector2)
GvrControllerInput Class Reference  |  Google VR  |  Google Developers

サンプル

if(GvrControllerInput.ClickButtonDown)
{
    Debug.Log("タッチパッドを押したよ!");
}

基本編はひとまずここまでです。
魅力的なMirage Soloのアプリをどんどん作っていきましょう。

【VR】MirageSoloあれこれ①

MirageSoloが届いて約1週間の間に触って気づいたことなどをメモ。

・持ち運びケース
https://amzn.to/2kcO7qR
微妙に持ち運びにくいSolo。こちらのPSVRのケースを使用。
中のスポンジの形状が異なるのでフィットするようにくりぬく必要あり。
小さい小物入れもついてたのが◎。リモコンとケーブル収納にぴったり。

・キャスト
プレイ中の画面をモニタに表示。Chromecastが必要。
Anycastという似たようなものは使用できなかった。

・アプリケーションの終了
起動したアプリを簡単に終了させる方法がよくわからない。
設定から「強制停止」を行なって止めているので再起動が面倒。
Unityで実装するなら「Application.Quit();」でOK。

・一覧にないアプリのインストール
Solo内部にないAndroidアプリのインストールはPCからPlayストアへ行き、インストール端末にSoloを選択する。
Solo側でログインしてから1時間くらいしないと所持端末一覧に追加されないので注意。

・Unityでコントローラを使用する
「GvrControllerMain」プレハブをシーンに追加。
GvrControllerInput.~~でコントローラの入力を取得

GvrControllerInput Class Reference  |  Google VR  |  Google Developers

 

【VR】MirageSolo+Unity開発

ポジショントラッキング可能なスタンドアロン型VRHMD『MirageSolo』をUnityで動作確認するまでの流れ

Unity、JDK、AndroidSDKのインストール

主に下記ページを参考にしました。

・インストールしたバージョン
Unity:2017.3.1f1
JDKjdk-8u172-windows-x64.exe
AndroidSDK:Android 7.0、8.1
※7.0はAndroid Studioインストール後、下部ConfigureのSDK Managerを選択し、
「Andorid 7.0」にチェックを入れインスールします
Google VR SDK:GoogleVRForUnity_1.130.1.unitypackage

インスト-ル後、Unity側のSDKJDKのパス設定を行います。
[Edit] - [Preferences]から下記ウインドウを開き、SDKJDKの欄にインストールしたパスを入力します。
※下記は参考で各自インストール先になります

f:id:vrcycling:20180513180913p:plain

Mirage Solo側の設定

Mirage Soloを開発者モードにします。
[設定]-[全ての設定]-[システム]-[端末情報]に入り、[ビルド番号]を7回クリックします。
※通常のAndorid端末と同様です。途中でカウントダウンメッセージが表示されます

開発者モードになると[システム]に[開発者オプション]が追加されるので、そこから「USBデバッグ」をONにします。

ビルド&実機確認

実機をPCにUSB接続し、UnityのBuild&Runより実行します。

途中で「Unable to list target platforms」というエラーが出た場合は下記を参考にします。

※toolsを「上書き」とありますが自分の場合はそれで治らず、一度toolsフォルダを削除し追加しました。

また、途中で止まってしまった場合はMirage Solo側で接続PCからのUSB接続の許可を求めるウインドウが出ている場合がありますのでMirage Soloを被って確認しましょう。

無事実行できればOKです。
※抜け漏れがあるかもしれないので次回開発環境を整える際に再度確認します

その他参考記事

Configure On-Device Developer Options  |  Android Developers

Android Debug Bridge (adb)  |  Android Developers

Unity + Daydream開発はじめの一歩(2017.6月最新版) - WonderPlanet DEVELOPER BLOG

Quickstart for Google VR SDK for Unity with Android  |  Google VR  |  Google Developers

【Unity2018対応】Androidビルドでエラーが出る場合の対処法 - おもちゃラボ

ソロキャン持ち物リスト

ちょいちょい忘れ物をするので備忘録としてリスト化

・テント
シュラフ(&シュラフインナー)
・チェア
・テーブル
・ペグ、ペグハンマー
・グランドシート(レジャーシート)
・ランタン
・ヘッドライト
・マット(コット)

・コンパクトバーナー
・ガスボンベ
・トーチバーナー
・BBQコンロ
・着火材
・火吹き棒
・トング(炭用、肉用)
・クッカーセット
・マグ
・カトラリーセット
・ナイフ(キッチンバサミ)
ウインドスクリーン

・タープ
・ランタンハンガー
・ランタンスタンド

・スポンジ
・洗剤

・着替え
・タオル
・サンダル

・アルミホイル
・トイレットペーパー
・ゴミ袋
・ウェットティッシュ

・耳栓

・折り畳みバッグ(買い物、温泉用)

随時更新

冬キャンまとめ

冬キャンしてきた。

昨年9月にバイクを購入し、キャンプでもしようと思ってキャンプ道具を揃え始めていた矢先に『ゆるキャン△』のアニメが始まった。

当初冬のクソ寒い時期にキャンプする予定なんか全く無く、春になったら行こう、と思っていたのが原作全巻読むほどドハマりした影響でキャンプ欲が高まり、1月に冬キャンプを決行した。

1回目 極寒のソロキャン

f:id:vrcycling:20180411215443j:plain

当然冬装備など持っていない状態だったが意外と行けるかもしれないし、一度体験してから買い揃えたい、という思いから自転車旅用に購入していた3シーズン用のテント・シュラフでチャレンジしてみた。
結果は惨敗。スキマ風は入るは暖かさが無いわで凍え死ぬかと思った。
何重にも衣服を着込んで毛布まで被っていたのに寒いと本当にやばかった。所持していたカイロをすべて身体に貼り付けて無事朝を迎えることが出来た。

BUNDOK(バンドック) ソロ ドーム 1

リーズナブルなテントなんだけど狭いのとインナーが下までフルメッシュのためスキマ風がハンパない。
2kgくらいと軽いのはメリット。
設営もインターテントを2本のポールで吊るしてフライシートを被せるだけなので非常に簡単。

モンベル(mont-bell) UL.スーパースパイラル ダウンハガー 800 #3

自転車旅用に買った軽量シュラフだけどコンフォート温度3度は真冬にはキツかった。

このキャンプの教訓としては冬を舐めてはいけない。

2回目 安定のソロキャン

f:id:vrcycling:20180411215532j:plain

テントとシュラフを冬用に変えて再チャレンジ。ペグハンマーなど小道具も揃えた。
ペグハンマーの有無でペグの打ち込みは段違い。小さめのでいいので持っておきたい。

Coleman(コールマン) テント エクスカーションティピ/210

1~2人用のワンポールテント。インナーもフルメッシュではないので冷気をかなりシャットアウトしてくれる。ただしメッシュにも切り替えられるのでオールシーズン使えそう。
ポールが少しジャマなのと重いのがデメリット。
あとはペグを挿さなければ設営できないのでペグがさせる場所でしか使用できない。ペグの数も多く必要なので重めのペグを使う場合は重量もさらにアップ。

モンベル(mont-bell) アルパイン ダウンハガー800 #2 

コンフォート温度0度の寝袋。きちんとモンベルショップへ行って店員に相談して購入。使用した感想としてはあったかいを通り越して暑いくらいに頼もしい寝袋。冬はコレを買っておけば間違いなさそう。

f:id:vrcycling:20180411215632j:plain
B6のBBQコンロ。焚き火台としても使えるのでありがたい。
外で食べる肉はうまいし醍醐味。しかし肉を切るための道具は必須!

ようやくキャンプ道具はひととおりそろった感。

3回目 小豆島キャンプツーリング

f:id:vrcycling:20180411215715j:plain
3度目は3月末にバイク仲間と小豆島へ。
日中は暖かかったが夜はやっぱりまだ寒い。
小豆島の北側は静かで景色もいいのでオススメ。

オートビレッジYOSHIDA | 道の駅 小豆島オリーブ公園 公式サイト

温泉つきのキャンプ場。海岸からも近く景色がいい。
田舎ならではなのか早朝に町内放送が流れるのが欠点?

4回目 潮騒の琵琶湖キャンプ

f:id:vrcycling:20180411215807j:plainそして4度目は6人ほどで電車で琵琶湖岸のキャンプ場へ。
6人中5人はゆるキャン視聴済みメンバー。みんなキャンプ初挑戦で装備も様々。
4月なので完全に暖かいと思いきや寒の戻りで完全に冬。初回の自分と同様装備不足で寒い思いをしたメンバーも。生きててよかった。

ニュー白浜オートキャンプ場

サイトは完全に10数年前のデザインだけどウォシュレットも完備されており設備はまずまず。
琵琶湖が目の前で景色は最高・・・なのだが岸に近すぎて夜中の波の音がうるさくて寝不足。。。
近所に日帰り温泉もあるのでさっぱりできる。

f:id:vrcycling:20180411215921j:plain複数人でのキャンプのいいところはそれぞれがキャンプ道具を持ち寄れること。
鍋とカセットコンロを持ってきてもらえたのでめっちゃ旨い鍋が食べれた。少し食べ過ぎたくらいだったけど。

次回に向けて

ワンポールテントもよかったけどやはり重い、ということでテントを新調。

Weanas テント 2-3人用

届いて自室で設営してみたけど、やはり軽くて広くてよさげ。
軽い分かなり薄いのが少し心配。

THERMAREST ラグジュアリーライト ウルトラライトコット

もうひとつ注文しているのが、しまりんの爺ちゃんも使っていたこちらのコット。
キャンプは快適に眠れるかが非常に重要。マットだけだと少し眠りにくいので新たにこれを導入する。
1.2kgと非常に軽い分かなりお高い。その分の効果があるといいけど。

 

ということで試したいのでまた近々行く予定。
次は山にするか海にするか。

【Unity】放物線を描く射撃をする②

前回の続きの実装編。とりあえずある程度できたのでメモ。
f:id:vrcycling:20180116225308p:plain
↑黄色が放物線の予測線で赤が実際の弾

ただし今回は計算式は使っていないので処理が重かったり融通が利きづらいかも。
ひとまず動いたのでしばらくはこれで、後で修正するかも。

弾の挙動

しばらく(1秒間)まっすぐに飛んで、落下する。

void Update () 
{
	transform.position += transform.forward * Time.deltaTime * speed;		//弾を前進させる
	timer += Time.deltaTime;
	if(timer > 1)
	{
		transform.position += Vector3.up * Time.deltaTime * (1 - timer) * speed;
	}
}

予測線の表示

一定間隔で軌道上にオブジェクトを配置する。

float _interval = 0.02f;	//表示する間隔
Vector3 beforePosition = transform.position;
float timer = 0;

for(int i=0;i<200;i++)
{
	_bullets[i].transform.position = transform.position;
	_bullets[i].transform.rotation = transform.rotation;
	
	//弾を前進させる
	_bullets[i].transform.position = beforePosition + (_bullets[i].transform.forward * _interval * 200);
	timer += _interval;
	if(timer > 1)
	{
		_bullets[i].transform.position = _bullets[i].transform.position + (Vector3.up * (1 - timer) * 200 * _interval);
	}
	
	beforePosition = _bullets[i].transform.position;
}

ベストな角度の取得

ここが結構力業。
上のコードを一定の範囲の角度を1度ずつ変えて、
予測線上のオブジェクトの中から最もターゲットに近いオブジェクトの角度を取得している。
なので角度の範囲が広がれば処理は重くなる。

float bestAngle = 0;
float minDistance = Mathf.Infinity;

//角度を徐々に変えて一番近くに到達する角度をはじき出す
for(int i=360; i>315; i-=1)
{
	transform.localEulerAngles = new Vector3(i, transform.localEulerAngles.y, 0);

	★上記の予測線のコード
	
	foreach(GameObject gos in _bullets)
	{
		float dist = Vector3.Distance(target.position, gos.transform.position);
		if(dist < minDistance)
		{
			minDistance = dist;
			bestAngle = i;
		}
	}
}

transform.localEulerAngles = new Vector3(bestAngle, transform.localEulerAngles.y, 0);

ちなみに予測線は確認用に表示するだけで実際は表示しない。
ひとまずここまで。
よいこのみんなはちゃんとけいさんしような。

【Unity】放物線を描く射撃をする①

ターゲットに対して放物線を描いた弾を発射できるようにしたい。

2018年1月時点で開発中のロボゲーでは、『まっすぐに進む』もしくは『ホーミング』の2種類が飛び道具の主な行動パターン。

プレイヤーからの攻撃および敵からの攻撃に放物線攻撃を追加したい。

f:id:vrcycling:20180111231118p:plain

富士総合火力演習がとても良かったので再現したい!

・弾の基本的な挙動

一定距離(時間)まではまっすぐ飛び、以降は重力により放物線を描き落下する。
最初のまっすぐ飛ぶ距離を『通常射程距離』と仮称する。

f:id:vrcycling:20180111233032p:plain

ここまでは特に問題なく実装はできる。
ちなみに自作ロボゲーではUnityの重力は使っていないのでちょっとずつ落下速度を終端速度まで上げる。

・エイミング

ターゲットが射程距離内の場合はまっすぐターゲットをエイムする。

f:id:vrcycling:20180111233236p:plain
射程距離外の場合は落下開始から地面に到達するまでの飛距離を加味してマズルを上に向ける。

f:id:vrcycling:20180111233440p:plain

やりたいのはここ。

尚、自由落下中でも到達しない距離の場合は最大距離の角度で発射する、もしくはそもそも撃たない(ロックオンしない)。

・参考情報

とりあえず参考になりそうな情報を探す。

Flashゲーム講座&ASサンプル集【狙撃の計算方法について】

矢を放物線状に飛ばしたい(2D 重力無視) - Roba Memo - 素人のUnity覚書と奮闘記

【Unity】落下地点の座標から、放物線の方程式を求める - おもちゃラボ

【Unity勇者の奮闘記】Unityで物理の勉強3(弾道予測線を作成する) - Unity勇者の冒険の書

 

実装は次回