ドラスピ大反省会(7)

ドラスティースピアのUIについてです。

PanzerStrike以降の作品はuGUIのみで作っています。
(PanzerStrikeのUIについてはこっちで書いています)

そして作るのが手間なところはアセットで対応しています。

ゲージ類は定番の「Energy Bar Toolkit(Asset Store)」を使っています。
今回のようなシンプルなバータイプのゲージならImageコンポーネントだけで作れますが、ずっとお世話になっているアセットなので反射的にインポートして使ってます。

フォント類はこれまた定番の「TextMesh Pro(Asset Store)」です。
無償になったことで、フォント描画についてはUnity標準と言っていいかと思います。
ただ事前にフォントを作成しておく必要があるので、使用する文字数によってはテクスチャサイズが大きくなる点だけは注意かと。

少し前にUnityインターハイブログで紹介されていたので、使い方等はこちらを参考にするといいと思います。

TextMesh Pro(テキストメッシュプロ)でテキストUIをカッコ良くしよう
http://inter-high-blog.unity3d.jp/2017/08/18/textmeshpro/

ロックオンカーソルの動きや会話ウィンドの移動+フェードのようなUIのアニメーションは全てスクリプトで書いていますが、スクリプトの場合は修正する度にビルドが走るので正直あまりお勧めできません(調整パラメータは最低限Inspectorで変更できるようにしておかないとビルド待ち地獄に…)。
アニメーション付けはUnity標準のAnimationを使うか、もしくはSpriteStudioのような外部ツールでもいいと思います。

OPTPiX SpriteStudio – ウェブテクノロジ
http://www.webtech.co.jp/spritestudio/

ドラスティースピア内の演出にありませんが、文字単位で動かしたい場合は「Typeface Animator(Asset Store)」を使うと楽です。ただしその場合TextMesh Proは使えないのでuGUI標準のTextコンポーネントを使うことになります。この辺は使い分ければいいと思います。

そろそろ書くネタもなくなってきたので、次回はこれまでに取り上げてこなかったその他のことについて書く予定です。

ドラスピ大反省会(6)

ドラスティースピアの背景についてです。

上空の雲は「3D Animated Clouds(Asset Store)」をガンガン配置しています。
といってもフィールド全体に配置するとさすがに描画負荷が上がるので、レーンの周辺のみに配置しています。

まぁそのせいでレーンの形や進行方向がわかってしまいます…
敵の配置もそうですが、今後の課題としてレール感がでないように先を見せないようにする何かしらの工夫は必要ですね。

当初は時間の都合「Volumetric Fog & Mist(Asset Store)」を使って雲の上のみのステージにしようと思ったんですが、試しに使って見た「Horizon[ON](Asset Store)」が予想以上にいい絵になったのでそのままHorizon[ON]を使うことにしました。

今回はHorizon[ON]で


夕方


の三種類を用意したんですが、切り替えの仕様が定まらず残念ながら昼のみ使うことにしました。そのせいでボス戦が白飛びして見づらかったり…

背景についてはやはり時間に沿ってリアルタイムに変化させたいので、もう少し色々試して見たいと思っています。時間経過系で試していない手持ちのアセットだと「UniStorm(Asset Store)」「Weather Maker(Asset Store)」「Instant Good Day(Asset Store)」があったりするので、これらのアセットの使用を含めて検討したいと思っています。

次回はUIついて書く予定です。

ドラスピ大反省会(5)

ドラスティースピアの登場キャラクタについてです。

まずこのゲームの主人公「ドラ子(仮名)」

コミケ前日に「ドラスティー」と名前が決まった模様
ちょっと頭の弱そうな子かもしれない…!?

ドラ子の相棒「ドラゴン(仮名)」

名前は…まだない
サラマンダーよりずっと速いらしい

ボス戦に出ててくる黒い奴ら

名前は…当然まだない
慣例に従うなら「クロ子」「黒ドラ」と呼ばれる予感…

ザコたち

開発中は見たまんまの「くらげ」「コウモリ」「トビウオ」と呼ばれてました。おそらく今後もそう呼ばれるでしょう…

これらキャラクタは全て「ユニティちゃんトゥーンシェーダー2.0」を使っています。Unityのセルルックでは一番使われているんじゃないかなー

動きの部分ではドラゴンの尻尾やドラ子の髪の毛には「Dynamic Bone(Asset Store)」を仕込んであります。
(ボーンの可視化には「Simple Bones Animation(Asset Store)」を使用しています)

 

ドラスティースピアではマテリアルの調整やモーション確認専用のモデルビューアープロジェクトを用意しています。

フルセットのゲームプロジェクトにビューアー専用のシーンを作る方法もありますが、Asset Storeで購入したアセットのライセンスの問題や、ビューアーに関係ないファイルを省きたいというのもあり、今は別プロジェクトにしています。

次回は背景について書く予定です。

ドラスピ大反省会(4)

ドラスティースピアのサウンドについてです。

ザコ戦の曲は Game Music Pack – SUITE(Asset Store) の rpg_09_loop を、

ボス戦の曲は Mega Game Music Collection(Asset Store) の Energy Hard Rock Pack から Let’s Rock(looped)を使わせてもらいました。

素材集の曲は色々な方が使われるので、良くも悪くも被ることが多いのがちょっと悩ましいところかも…

効果音は以前書いたとおり過去作品からの流用と

Universal Sound FX(Asset Store)
Ultimate Game Music Collection(Asset Store)

から使わせてもらいました。
過去作品の効果音も何かしらの素材集のものを使っていることが多いです。
(どうしてもイメージに合うものがない場合は自分で作ったりもしますが)

あと効果音を入れるタイミングは「とりあえず」でもいいので早め早めがいいと思います。なにせ見つからないときのピンチ感は半端ないので…

ちなみにゲーム開始時のこの演出は

「ドラゴンスピリット」のオマージュですw

ACドラゴンスピリット 実機プレイ ノーコンクリア

開発中も作業BGMとしてもヘビーローテションでしたが、ドラゴンつながりしかないんですよねw

次回は登場キャラクタについて書く予定です

ドラスピ大反省会(3)

今回初めてレールシューティングを作ってみたんですが、単にパスに沿って移動してるだけだからそれほど難しくはないだろうーと思ったら大間違いだった!というお話しです。

実際はレールシューティングに特化した問題ではありませんが、現状でも残っている内容なので「今後の課題」として書いておこうと思います。

1.相対速度が速すぎる

プレイヤードラゴン(以降自機)は結構な速度で移動しています。これは

上空1000mを飛んでいるときにこれくらい背景が
移動しているように見えるといいなー

という見た目だけで速度を調整したからですw

ボス戦のように敵も同じ方向に移動しているなら特に問題はないんですが、ザコ戦のように敵が向かってくる(実際は静止している敵に向かって自機が突っ込むかたちです)場合、敵との相対速度が思った以上に速くなり、敵が登場してもあっという間に通り過ぎてしまいました。

敵の種類によっては通り過ぎるだけでも構わないんですが、今回のコウモリのように弾を撃つ敵はただ通り過ぎるだけではなく、多少は画面内にとどまり、弾を撃ったら画面外に消えていく(例えるならスペースハリアーの「トモス」のような感じです)ようにしたいと思うと、相対速度の問題は厄介です。

今回はザコは登場するとその場で静止していて、自機が近づくと自機と同じ方向に移動して相対速度を遅くするという方法を採りましたが、何かもうちょっとやりようがあったかなと…(まぁステージデザインや演出の問題でもあるんですが)

同様のあっという間に通過してしまう問題はアイテムでも発生するので、アイテムが自機に近づくと誘導が働き、自機との距離が短くなると減速が追加されます。
しかし、よかれと思って入れた減速の影響でアイテムの挙動が不安定になりかえって取りづらいとの意見も…

ちなみに同じ速度で10mと100mを飛んでいる時の比較動画を作ってみました。
さすがに平面感が出てしまいますが、低空は速度感が増して迫力があるので別ステージとして使いたいところではあります。


2.レール上を移動するので予測射撃が難しい

元々ボス戦(対人VS含む)のみを想定したゲームだったので、ストイックに

マニュアル操作による予測射撃こそ正義!

という方向性だったんですが、やはり敵が動きまくるとなかなか当てられないので

照準カーソルに捉えたなら照準補正(ちょっとだけ誘導)ぐらいなら…

にしたところ、レールによる移動+ザコを追加したら

ロックオンして誘導弾にしないと当たらないよ!

という感じになり、今のかたちになっています。

ただ、上に書いたとおり誘導自体の出発が照準補正的なものだったので、今の誘導弾はかなり不完全なものです。
さらに当然ここにも敵との相対速度の問題が出ます。なにせ自機の移動速度よりさらに速い弾が移動するわけですから…


3.進行方向がわからない…?

自機はレールに沿って勝手に進行方向が変わるため、プレイヤーが意図せぬところで勝手に曲がります。まぁレールシューティングなので当然なんですが…
今回はわかりにくさを抑えるため、あえて緩やかな上下左右移動しか入れないようにしてますが、それだと変化がちょっと乏しいんですよね…

しかし実際に気になるのは、事前に進行方向に敵やアイテムが配置されているので、どっちに進むかは結構わかってしまうことだったりします。なにせ見えている敵に突っ込むわけですからなんと好戦的な…

なお途中まではレールに沿ってガイドを表示していたバージョンもありました

と色々書きましたが、どの問題も総じて調整不足なだけだったりします。
サクッと作るだけなら容易でも、やはり作り込んで調整するのにはどうしても時間が必要ですね…

一応、既に問題解消の新しいアイデアや実装案も挙っているので、今後改善されていくと思います。

次回はサウンドについて書く予定です

ドラスピ大反省会(2)

ドラスティースピアのゲームシステムは至ってシンプルで『ザコ戦』と『ボス戦』のみのレールシューティングです。

プレイヤーの操るドラゴンは

  • MP残量によって威力が変わる「ショット」
  • 緊急回避用の「ローリング」

が使えます。

ちなみにローリング中は無敵に加え移動速度が倍になるので、回避以外にも使いどころはあるかもしれません。

ザコ戦はタイムテーブルに従って敵(編隊)を登場させています。
一見ランダムっぽく見えますが、ランダムで登場するのはクラゲだけで、それ以外は一定のルールに則って登場するようにしています。なお敵を早く倒せば次が早く出てくる早回しにはなっていません。

しかしこのザコ戦ですが、実は後から追加した要素で、これが後々色々と問題を起こすことになりました(※これについてはまた別の話題で書きます)

攻守交代によるボス戦のプロトタイプは随分前に作っていました。
(去年の9月頃だったと思います)

ちなみにこの攻守交代の元ネタは「Wing War」ですw

Wing War – Sega Arcade – HD – YouTube

これをドラゴンでやってみよう!って話になり、結果今のボス戦っぽい感じのものが出来ました。

この段階ではドラゴンのモデルはこれを使わせてもらいました。
Animated Witch and Dragon Monster(Asset Store)

背景の『がんばれーる』でも使ったこれです
First Fantasy for Mobile(Asset Store)

さらに、奥に進んでいくだけでは見た目の変化が少ないので、左右旋回や上下アップダウンを入れられるレールシューティングにしたものこの時だったと思います。
レールにはDOTween Proを使い、事前にシーン上に設定したパス上をプレイヤードラゴンやボスが移動します。

DOTween Pro(Asset Store)


こんな感じにDOTweenでWaypointを設定してパスを作成しています。
ちなみにこのパスを1周するに約9分程度かかります。

次回はレールシューティングあるある(?)を書く予定です。

ドラスピ大反省会(1)

数回にわたってドラスティースピアの開発について書こうと思います。

毎度のことですが開発期間が足りていません。
特に今回は当初4週間で作ろうと計画したものの、色々あり2週間程度しか捻出できず、かなり荒削りな内容となっています。

さて、足りない期間をなんとかするために取る手段ですが、いつも通り

  • 割り切る
  • Asset Storeを活用する
  • 過去のものを使う

です。

『割り切る』のは非常に難しい問題で、作る側のポリシーが一番影響するところでもあると思います。アオダマテイはどちらかと言えばリリースを優先しているので、必要なら心を鬼にしてバッサバッサと仕様を切り捨てています(本当に必要な仕様だったらちゃんと後から追加しますし)

Asset StoreのAssetには今回もお世話になっています。
例えばざっと表示に関係しそうなところだけでもこんな感じです。

※使用したAssetについては個別に書いていく予定です。

『過去のもの』を使うは、ソースコードや各種リソースだったりします。せっかく作ったものは大いに活用しましょう。今回は過去作品からの効果音の流用が多いです。ざっとわかる範囲で

  • タイトルのスタート→PanzerStrikeのスタート音
  • アイテムゲット→DustShootersのゴミ回収音
  • ロックオン→DustShootersのロックオン音
  • ローリング時MP不足→DustShootersのバッテリー不足音

です。
なお時間がないときに書くソースコードはクソコードが多くなるので再利用は期待できないものが多いです…
(ソースコードは残りませんが、実装ノウハウは蓄積されています)

次回はゲームシステムについてです。

もうすぐC92ですが

残念なことにDustShootersの完成はまだまだ先になります。
TimelineとCinemachineが追加されたUnityが出たら本気だすとか思っていたら、もうUnity 2017出ちゃいましたねw
カットシーンを作るのにTimelineやCinemachineを使って見たいので、区切りのいいところで移行する予定です。

一応今月に入ってからC92向けのゲームを作り始めていますが、どこまで作れるかはまだなんとも…

とりあえず背景はこんな感じで、多分シューティングになります。

Unity上でEDTrackerを使ったヘッドトラッキング

Unity上でEDTrackerを使ったヘッドトラッキングを実験したので、その備忘録。

EDTrackerとはArduino+ジャイロセンサーを使ったヘッドトラッキングデバイスです。完成品のProと自作向けのDIYの2種類があり、DIYは専用基板を買って作ることもユニバーサル基板上で完全に自作することもできます。詳細は公式サイトで確認してください。

EDTracker

今回はリファレンス機としてProを使いましたが、自作したものでも結果は同じだと思います(自作用のパーツは用意したんですが、まだ作ってないので…)

EDTrackerはopentrackを経由することで既存のさまざまなゲームで使えるような運用になっているようです。

今回はopentrackを経由せず直接EDTrackerの情報をUnity上で扱えるようにするのが目的です。

EDTrackerはWindowsからはジョイスティックとして認識され、トラッキング情報はジョイスティックの軸データとして取得できます。joy.cpl(昔はコントロールパネルから実行できたんですけどねぇ)で確認すると、X軸・Y軸に-1~1の範囲でデータが入ってくるので、このデータをヨー・ピッチとして使えば良さそうです。

【注意】EDTrackerUIでYaw ScalingとPitch Scalingを1.0にしておく必要があります

しかしここで問題が。Unity標準のInput.GetAxisRawでは期待した値が取得できませんでした。問題切り分けのためWin32APIのJoyGetPosExでEDTrackerのスティックデータを取得したところ期待していた-1~+1の範囲の値を取得出来ました。
おそらくUnity側の問題だと思うんですが、あまり突っ込んだ調査はせずJoyGetPosExをC#から呼べるようにしてUnityで使えるようにしました。
(Win32APIをC#で呼び出す方法は”C# DLLImport”等でググると出てきます )

ちなみにヨーのデータは正面を 0 として左方向にマイナス、右方向にプラスで、真後ろが-1もしくは+1になります。

なので

float axis = (((float)JoyInfoEx.dwXpos - 32767) / 32768);
Yaw = Mathf.Clamp(axis, -0.5f, 0.5f) * 180f;

とすれば、左を向けば -90f、右を向けば 90f がYawに格納されます。
あとはカメラのTransformを回転させればヘッドトラッキングが実現出来ます。

transform.rotation = Quaternion.Euler(
-Pitch * RotationSpeed,
Yaw * RotationSpeed,
0f * RotationSpeed);

まぁリアルに頭を90度横に向けてしまうと画面が見られないので、opentrackのマッピング機能と同等の機能を実装して調整出来るようにする必要があると思います。

とりあえず今はインスペクタである程度調整できるようにしています。
(上はヘッドセットの入力を左右30度の入力でカメラを左右90度回す設定)

これでとりあえずUnityでEDTrackerが使えるようになりました。
ヘッドトラッキングだけではVRのような没入感は得られませんが、頭の動きにカメラが追従するのでだけでも結構楽しめますし、なにより高価なHMDを使わないので簡単に利用出来るのもメリットだと思います(EDTrackerを完全自作するなら部品代は1500~2000円ぐらいです)

できればNx Head TrackerのようにBluetooth接続できるといいんですけどね。

がんばれーるで使用しているAssetについて

がんばれーるで使用しているAssetについてになります。
ホント、毎回Assetには助けられています。

過去に何度か紹介している普段から使っているAssetは

になります。
どのAssetも有名どころだと思うのであえて説明する必要はないかなと。

描画関係で使っているAssetはキャラクタとタンクの描画に Toony Colors Pro、背景の一部に UNOShader UNLIT w/TOON support を使っています。
両シェーダーともかなり高機能かつ便利なんですが、ワークフローや仕様上の問題でおそらく次は自作シェーダーになると思います。

爆発等のパーティクルは Sci-Fi EffectsWarFX、Skyboxは First Fantasy for Mobile のものを使っています。
Sci-Fi Effectsは爆発系以外にもレーザーや炎、ホログラフと色々なエフェクトが入っていたり、ターレットエディタで好きな砲台が作れたりとAsset単体でも結構楽しめます。
また非常に助かるのはエフェクトにあわせた効果音も入っているところですね。エフェクトにあった効果音探すのも結構時間かかるんです…

ステージ開始時のカメラ動きは Pegasus を使いました。DustShootersで使っている Camera Path Animator でもよかったんですが、たまには別のAssetを使ってみたかったので。次は無償になった Cine.Machine Base Rig も使ってみたい思っています。

version 1.01から追加したボイスは Voice Pack Vol.1vol.2 です。
やはりボイスがあるとないとでは全然違いますね。

以上、かなりざっくりですががんばれーるで使っているAssetの紹介でした。