あらすじ
2018年5月 Oculus Go を買いました。
「Oculus Goヤベェ。 いつでもどこでもVRできる。
しかもUnity使えば簡単に開発できるじゃん! レッツVR開発ライフ!」
ワクワクした思いで、UnityでOculus Go開発を始めました。
VRはPC上でのテストプレイが厳しい
VRコンテンツですが、 PCの画面で見たときとVRで見た時とでは
印象が異なります。
VR空間でどのような体験になるかはVRに入らないと詳しくは分からないわけです。
つまり、PCだけではテストプレイができない。
テストプレイをするためには、OculusGo用にプロジェクトをビルドしてOculusGoを被ってVRに入る必要があるわけです。
いちいちビルドして確認するのめんどくせぇ。 F***!
実機確認するため何度もビルドすることになるんですが、これが手間になります。
Unityエディタ上で値を変更
→ビルド
→ 数分間待機
→ OculusGoをかぶる
→ Unityエディタ上で値を変更
→ビルド
→ 数分間待機
→ OculusGoをかぶる
これがなかなか時間を食います。
このボールをちょっと遅くしたらどうなるんだろう!みたいな小さい変更を確認するのにもビルド数分待つ必要がある。
めんどくさい
Googleスプレッドシートが使えそう
ここで、Unite2018に行った時に拝見した講演を思い出しました。
【Unite Tokyo 2018】「リトルチャンピオンズ」癖になるアクションゲームの開発事例
ここではGoogleスプレッドシートを使う例やCustomAttributeを使ってツールを自動作成する例が紹介されていました。(スライド資料には載っていませんが、ステージエディタで作成したデータをGoogleスプレッドシートにアップしているという話がありました)
そして私は気が付きました。
「これ、OculusGoの開発にも使えるんじゃね?」
Googleスプレッドシート → OculusGo
まず、Googleスプレッドシートに値を入力。
入力した値をOculusGoで取得。
シートのどの値を取得するかなどはCustomAttributeで設定。
うん、これは簡単につくれそう。
サクッと作ってみました。
SpreadSheet-Load-Attribute
そして、作ったものがコレになります。
「SpreadSheet-Load-Attribute」
https://github.com/rngtm/SpreadSheet-Load-Attribute
使い方
たとえばこんなGoogleスプレッドシートがあったとします。
以下のようなクラスを書くと、メンバ変数の値をGoogleスプレッドシートの値で上書きすることができます。 非常にシンプルですね(自画自賛)
[GetSheet]
public class TestBehaviour : MonoBehaviour
{
[GetSheet("光速度")] private int _lightSpeed;
[GetSheet("重力加速度")] private float _gravity;
[GetSheet]を付けた変数の値がGoogleスプレッドシートの中身の値に置き換わります。
_lightSpeed = 299792458
_gravity = 9.81
クラスに[GetSheet]をつけ忘れると値が変わらないので注意が必要です。
特徴
・シーン開始に最初から配置されているオブジェクトの値を変更
・現時点では、シーン開始から遅れて動的に生成されるオブジェクトには対応していません
感想
一度ビルドしてしまえば、あとはGoogleスプレッドシートの値を変更するだけで簡単にゲームバランスの調整ができます。
良さそうです。
注意
SpreadSheet-Load-Attributeではシーンに存在する全オブジェクトを取得して
リフレクション経由でコンポーネントの変数の書き換えを行っているため、重いです。
リリースビルドには含めないほうが良いでしょう。
あくまでデバッグの用途としてお使いください。
環境
Windows 10
Unity2017.3.0f2
参考URL
Googleスプレッドシートからの数値の取得は下記ブログを参考にさせていただきました。 わかりやすい情報に感謝。
http://toriden.hatenablog.com/entry/2018/04/05/024844