ロードバイク時々ものづくり

ロードバイクおよびゲーム開発について

自己紹介

個人的な活動について

これまでに作ったもの(公開済み)

VR将棋

趣味の将棋をVR化。マルチプレイで遠くの人とも対局可能。
Oculus Rift、Questに対応。

STEEL STRIKER 

コミケC92で頒布予定のロボットアクションゲーム。

VRサイクリング

現実のロードバイクVRを組み合わせたコンテンツ。
BitSummit 4th出展。VRクリエイティブアワード一次審査通過。

 

ふぉとゆに

HTC Viveでのコンテンツ試作として制作。バーチャルサミット関西にて披露。

 

著書

Unity5ゲーム開発レシピ ハマるゲーム制作のノウハウ

https://www.amazon.co.jp/dp/4798143030/

著書第2弾。まつだすさんとの共著。自分のパートはロボゲーの制作方法を解説しつつ、Unityでゲームを作るための流れが理解できるような構成で執筆。

「ゲーム開発レシピ」の画像検索結果

Unity5 3Dゲーム開発講座 ユニティちゃんで作る本格アクションゲーム

https://www.amazon.co.jp/dp/4798138223/

初著作。関西のクリエイター7名による共著。ユニティちゃんを使ってUnityを学べる著作。

「ユニティちゃんで作る本格アクションゲーム」の画像検索結果 

 

【Unity】2020年にAndroidアプリをリリースしてみて

Android向けアプリをリリースしました。
この記事はその過程で調べたことなどをメモ的に残したものです。

https://play.google.com/store/apps/details?id=jp.atabogames.kifunarabe

f:id:vrcycling:20200208155751p:plain

将棋を勉強するときに使えるお助けアプリです。
自分でほしいなと思った時にぱっと見つからなかったので作ることにしました。

Androidアプリを作ってリリースするのは相当久しぶりです。
以前はFlashで開発していたのですが今回はUnityで開発しました。
Unityでしかも2Dはあまり経験がなかったのでいろいろ調べながら作りました。

今回使用したUnityのバージョンはUnity 2019.2.19f1。
最初は2018.4.3f1を使用していましたがNDKが必要になった際にモジュール追加がしやすい2019系統の既にインストールしていたバージョンに切り替えました。

2D開発設定

SpriteとuGUIのどちらを使おうか悩んだが今回はSpriteをメインに。
ひとまず所持している端末(Garaxy S6 edge)の解像度に合わせて1080*1920を基準にすることに。
とりあえずプロジェクト作成時に2Dで作成。
カメラの合わせ方は1080*1920のスプライトをシーンに配置し、カメラの範囲がその画像に合うように、カメラの設定のProjectionを「Orthographic」、Sizeを「9.6」にしてぴったり合うようにした。

f:id:vrcycling:20200208164254p:plain

今回のアプリは縦画面固定なのでDefault Orientationを「Portrait」に。

f:id:vrcycling:20200208164356p:plain

2D設定はとりあえずこんな感じで。

ビルド設定

一通りアプリができた後にストアにアップしたところ、
「このリリースはGooglePlayの64ビット要件に準拠していません」というエラーが出ました。
これについては下記を参考に設定したところエラーはなくなりました。
・【Unity】Google Play の 64 ビット要件に準拠していません
https://qiita.com/nonkapibara/items/a708b856a496a96ccec5

広告設定

ニッチなアプリなので最初は有料アプリとしてリリースしようと思っていましたが有料アプリの場合は住所の公開が必要とのこと。
気軽にリリースするつもりが住所まで公開となるとちょっと。。。ということなので広告を入れることにしました。

過去に出していたアプリでも広告を入れていてそちらもUnity用のSDKがあるみたいでしたが、今回は実装記事が多くあるGoogleのAdMobにしてみました。
https://admob.google.com/home/

基本的な実装は下記などを参考にしました。
・[Unity] AdMob 広告をAndroidに実装する
https://uni.gas.mixh.jp/unity/android-admob.html

・Unityで作ったゲームにAdMob広告を実装したい!!
https://freesworder.net/unity-admob-banner/

上記サイトの方法で設定した場合タイトル画面からメイン画面までずっとバナーが表示されてしまうため、「bannerView.Hide()」や「bannerView.Show()」で画面によって表示する、しないをコントロールしました。

これで広告設定は以上です。

 

ここまでで今回のアプリリリースで調べたことは以上です。
次はゲームアプリを作りたいと思います。

【VR】Oculus Quest+Unity開発

Oculus Questが発売され到着したので開発についてまとめてみた

f:id:vrcycling:20190525105151p:plain

公式ドキュメント

・Oculus Quest Development Guide
https://developer.oculus.com/documentation/quest/latest/

開発者モード

Oculusアプリから接続済みのQuestを選択し、その他の設定内から開発者モードをONに切り替えます。

f:id:vrcycling:20190525111759p:plain

Unityのバージョン

以下のいずれかのバージョンを推奨
2017.4 LTS
2018.4 LTS
2019.1.2f1
https://developer.oculus.com/documentation/quest/latest/concepts/unity-req/
※最低は2017.4.11f1とのこと

 Unityのダウンロードは以下から
https://unity3d.com/jp/get-unity/download

インストール時にAndroid Builde Supportに要チェック

 Oculus Integration for Unity

Oculus開発用のOculus Integrationのインポート

Asset Store
https://assetstore.unity.com/packages/tools/integration/oculus-integration-82022
https://developer.oculus.com/downloads/package/unity-integration/

 Android SDKJDKのインストール

Mirage Soloの開発と同じですので以下を参考に
http://cycling.hateblo.jp/entry/2018/05/13/183657

Build Settings - Switch Platform

プラットフォームをAndroidに変更

f:id:vrcycling:20190525110734p:plain

Player Settings

XR SettingsのVirtual Reality SupportedにチェックをしてOculusを選択
f:id:vrcycling:20190525111540p:plain

Other SettingsのMinimum API Levelを「Android 4.4」に変更
f:id:vrcycling:20190525112151p:plain

ターゲットデバイスをQuestに変更

Oculusフォルダ内のOculus Project Configを選択
f:id:vrcycling:20190525114545p:plain

InspectorからTarget Device TypesをQuestに変更

f:id:vrcycling:20190525114700p:plain

ビルドしてみる

 適当にキューブなど配置してテストビルド

f:id:vrcycling:20190525114823p:plain

Android SDKのToolsバージョンを上げろ、などのメッセージが出る場合はAndroid Studioを起動して、SDK Managerからバージョンアップ

Buide And Runする場合は有線接続が必要。付属のケーブルはType C - Type CなのでPC側がAの場合は別途ケーブルを用意しておく。
下記ケーブルは問題なく使えた

・Snowkids【2本】USB Type Cケーブル 2m USB-A to USB-C充電ケーブル
https://amzn.to/2W2zE6x

コントローラを表示する

シーンにOculus > VR > Prefabs内のOVRCameraRigを追加
※MainCameraは消すか無効にする

f:id:vrcycling:20190525115610p:plain

左右のControllerAnchorの下にOVRControllerPrefabを追加
f:id:vrcycling:20190525115724p:plain

左手用のOVRControllerPrefabのInspectorからControllerを「L Tracked Remote」に変更

f:id:vrcycling:20190525115852p:plain

ビルドする

ビルドしてコントローラが表示されればOK

入力関連

OVRInput
https://developer.oculus.com/documentation/unity/latest/concepts/unity-ovrinput/

Unity Input
https://docs.unity3d.com/ja/current/Manual/OculusControllers.html

参考

・数分で完了 Oculus Questの開封からセットアップまで詳細
https://www.moguravr.com/oculus-quest-setup/

・Oculus Quest向けアプリの個人開発は可能か? 実機で確かめてみた
https://www.moguravr.com/oculus-quest-personal-develop-try/

・UnityアプリをRiftからGo/Questへ移植する人向けのTips集
https://synamon.hatenablog.com/entry/2019/05/21/202417

 ・Oculus Quest向けのビルドとコントローラの表示メモ
http://jackmasaki.hatenablog.com/entry/2019/05/05/134811

・UnityでOculus Quest向けのビルドを試してみる。
https://note.mu/kirin_zzzzz/n/n11795eb4243f

 

【VR】SteamVR×モノビットエンジン【Unity】

SteamVRでモノビットエンジンを使う方法について
※SteamVR 1.0当時の内容です。2.0では若干変更があります

1.MUN(モノビット公式)とSteamVR Plugin(アセットストア)をインポートします
f:id:vrcycling:20181026144803p:plain

※一旦再生ボタンを押しておきます
 SteamVRの初期設定についてはここでは省略します

2.[CameraRig]プレハブをシーンに入れ、「MainCamera」を非アクティブにします
f:id:vrcycling:20181026145950p:plain

3.ルーム入室用のスクリプトを用意します
空のGameObjectをシーンに作り、「MonobitAutoLoginTemplate」をAddComponentの「Monobit Networking Support」からアタッチします
f:id:vrcycling:20181026150303p:plain

4.プレイヤーを用意します
シーンに空のGameObjectを作り、「Player」という名前に変更します。
Assetsフォルダに「Resources」フォルダを作成し、先ほど作ったPlayerをD&Dしプレハブ化します。
シーン内のPlayerは削除します。
f:id:vrcycling:20181026150545p:plain

5.プレイヤープレハブをマルチ対応します
プレイヤープレハブに「MonobitView」コンポーネントをアタッチします
f:id:vrcycling:20181026150833p:plain

6.シーン上の「Monobit Auto Login Template」のPrefabにPlayerプレハブを指定します
f:id:vrcycling:20181026151026p:plain

7.「Monobit Auto Login Template」のスクリプトを変更します
プレハブにメインカメラを設定している個所の122~134行目をコメントアウトします。
f:id:vrcycling:20181026151317p:plain

8.マルチ確認用にPlayerプレハブにオブジェクトを追加します
プレイヤープレハブの子にCubeを追加し、Scaleを0.3くらいにします
f:id:vrcycling:20181026153004p:plain

9.プレイヤーブレハブに位置の同期をとるため「Monobit Transform View」をアタッチします
その後、プレイヤープレハブのMonobit Viewの監視リストに追加したMonobit Transform Viewを指定します
f:id:vrcycling:20181026153149p:plain

10.プレイヤープレハブにCameraの位置を取得するスクリプトを追加します
Playerスクリプトを作成し下記のようにします

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MonobitEngine;

public class Player : MonobitEngine.MonoBehaviour {

	GameObject camera;
	
	void Start () 
	{
		camera = GameObject.Find("Camera");
	}
	
	void Update () 
	{
		if(!monobitView.isMine)
			return;
		
		transform.position = camera.transform.position;
		transform.rotation = camera.transform.rotation;
	}
}

11.複数クライアントで実行してみましょう
相手の頭の位置にキューブが表示され、動きが同期されていればOKです

手の位置を取得する場合は「Controller (left)」「Controller (right)」のtransformを取得すればOKです

【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ビルドでエラーが出る場合の対処法 - おもちゃラボ