スウィンぐるんの主人公を方向パッドで操作する

スウィンぐるんの主人公(ルン子withクルクルマシン)の操作をゲームパッドのスティックではなく方向パッド(POV)で行いたい場合の方法です。

多くのゲームパッドでスティックとPOVのY軸の入力値は逆になっているため、上下の操作が入れ替わってしまいます。

以下、スウィンぐるんで方向パッドを使う場合のY軸上下反転のやり方になります。

※Xbox360コントローラ限定の内容になりますが、一般的なゲームパッドでも概ね同じ方法が使えると思います

1. スウィンぐるんが実行中なら終了してください。

2. スウィンぐるん実行ファイル(swingrun.exe)と同じフォルダ内に以下のファイルを作ります。

ファイル名:config.csv
文字コード:UTF-8(BOM付き)
改行コード:CR+LF

20161001_conifg%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e8%bf%bd%e5%8a%a0

3. 2.で作成したconfig.csvに

GamePadVInvert,Int,1

と記述して保存してください。

※ここにconfig.csvを置いておくので、このファイルをダウンロードしてswingrun.exeと同じフォルダに入れてもらっても構いません

4. swingrun.exeを実行し、起動時のダイアログの Input タブの Horizontal と Vertical を方向パッドの各軸に設定してください。

20161001_input%e3%82%bf%e3%83%96%e3%81%ae%e8%a8%ad%e5%ae%9a%e7%ae%87%e6%89%80

これでゲームを開始すれば方向パッドで操作できるようになります。
フリーモードのステージ選択でカーソルが方向パッドの入力向きと一致すれば正しく動作しています。

なおスティック操作に戻す場合はconfig.csvファイルを消すか

GamePadVInvert,Int,0

と記述を修正してください。

またconfig.csvに

ShowFPS,Int,1

と記述すると画面左下にFPSが表示されるようになります。

161001_fps%e8%a1%a8%e7%a4%ba

スウィンぐるん開発裏話(6)

ゲーム中の残り時間が少なくなると、ヒントとしてまだ見つかってない宝石も「キラッ」と光るようになります。
(わかりにくいですが、右上のミニマップでも光っています)20160914_%e5%85%89%e3%82%8b%e5%ae%9d%e7%9f%b3

仕組みはシンプルで、宝石を光らせるだけの専用ライトを作り、常にシーン上を高速回転させています。
20160914_%e5%ae%9d%e7%9f%b3%e3%83%a9%e3%82%a4%e3%83%88

ライトといえば平行光源x3+アンビエントな世代(?)なので、簡単にライトが増やせシャドウまで面倒見てくれるのは非常に助かりますね。ただ、その分絵作りが難しいというかセンスが問われるというか…

もちろんライトを置けばおくほどシェーダーのパスが増えて描画負荷は上がります。
この辺りの詳細は

「いけにえと雪のセツナ」グラフィック解説(第3回・シェーダ編)

や Unity公式ドキュメントの
Forward Rendering パスの詳細

の説明がわかりやすいと思います。

ただUnityを5.3から5.4にアップデートしたら光らなくなったような…
なにかシェーダーの仕様変わったのかな?
(時間が確保出来たら調べるつもりです)

(続く?)

PanzerStrikeがインプレス「窓の杜」で紹介されました

PanzerStrikeがインプレス「窓の杜」で紹介されました。

【週末ゲーム】第648回:物理演算による真面目な3D戦車シューティング「PanzerStrike」
http://forest.watch.impress.co.jp/docs/serial/shumatsu/1019182.html

PanzerStrikeの一番最初の体験版を出したのが2013年8月(c84)なので、もう3年以上経っているんですね。そこから完全版を出すまでさらに時間かかってますが…

最初の体験版はスウィンぐるんと同じ3週間で作ったり、リアルタイムシャドウ欲しさにコミケ前ギリギリで Unity 4.2に変更したり、今思えばかなり無茶をしていたかもw
(当時使っていたIntel HD5000だとUnity EditorがDX11モードでないと動かないけど、DX11だとUnity Editor上でリアルタイムシャドウの確認ができないとかかったりとかトラブルも色々あったなぁ…)

ちなみに今なら紹介記事で指摘されている問題のほとんどを解決できると思うので、いずれ新しい戦車ゲーを作ってみたいとは思っています。…PanzerStrike bis.?

スウィンぐるん開発裏話(5)

スウィンぐるんはWindows専用で作っているため、特に最適化や高速化のテクニックは使っていません。最近のPCは速くて助かります。

もちろんUnity的に一般的に推奨されない記述は出来るだけ避けています。
代表的なものとしては

  • Update内でGetComponent系を使用しない
  • Update内でFind系を使用しない
  • Update内で文字列操作を行わない
  • 使用しないMonoBehaviourのコールバック(UpdateやLateUpdate)は宣言しない
  • 空文字列チェックはstring.IsNullOrEmptyを使用する
  • IDやHashでアクセス出来るものはそれを使用する(マテリアルやAnimator)

でしょうか。

まぁこれらは高速化というよりは低速化を防ぐ意味合いの方が強く、高速化はもっと実装アルゴリズム寄りの話(代表的なところではオブジェクトプール等)だと思います。あと高速化はちゃんとプロファイルしてから検討することが大事です。

とりあえずUnityのランタイムで処理が遅いものとメモリ操作(暗黙に行われるものにも注意)だけ気をつければ、少なくともWindowsプラットフォームならそれほどパフォーマンスに影響はないと思います。

高速化に興味がある方はUnite 2016のこの資料を読んでみるといいと思います。

モバイル端末向けのUnityアプリケーションの最適化実践テクニック
ハードウェア性能を引き出して60fpsを実現するプログラミング・テクニック

(続く)

よく使うVisual Studioのショートカット

その昔、UnityVS のおかげでUnityとVisual Studioの連携が格段に良くなり、コード編集もデバッグも快適になりました。Debug出力は重かったけど…

現在はVisual Studio Tools for Unityが提供され、Unity 5.2 からWindows環境においてはVisual Studioが標準エディタになりましが、どうにもVisual Studioは出来ることが多くて使い切れない感があります。

おそらく便利な機能は沢山あるんでしょうが、私がコード編集時によく使っているショートカットはこれぐらいです。
※キーボードのマッピングは Visual C# 2005 です

コメントアウト Ctrl + E, C
コメントアウトの解除 Ctrl + E, U
VS内ファイルの切り替え Ctrl + Tab
Intellisenseの呼び出し Ctrl + Space
戻る(カーソル位置) Ctrl + -(マイナス)
次に進む(カーソル位置) Ctrl + Shift + –
全ての参照を検索 Ctrl + K, R
選択した関数の定義へと飛ぶ F12
名前の変更 F2

この中でも頻繁に使うのはカーソルの戻る・進むと全ての参照の検索です。
コードを行ったり来たりすることが多いので…

ショートカットとは違いますが、コードスニペットを使えばコード入力が楽になります。よく使う定型コードがあるなら独自のコードスニペットとして追加することも出来ます。
例えば私はenumeqcp[TAB][TAB]で以下のようなIEqualityComparerのひな形を作るスニペットを追加しています。まぁ滅多に使わないんですけどw


public enum MyEnum
{
}

private class MyEnumCompare : IEqualityComparer
{
  public bool Equals(MyEnum x, MyEnum y)
  {
    return x == y;
  }

  public int GetHashCode(MyEnum obj)
  {
    return (int)obj;
  }
}

ちなみにコード編集以外にもUnite 2016でVisual StudioをImage EditorやModel Editor、Shader Designerとして使う方法が紹介されました。積極的に使うかどうかは別ですが、とりあえずVisual Studioでこんなことも出来ると覚えておいて損はないと思います。
Visual Studio 2015 & Graphics Design Tool

スウィンぐるん開発裏話(4)

またまた方針の補足の続き。

  • デバッグに時間のかかるゲーム内容は避ける

これはなかなか難しい問題で、デバッグやバランス調整はどうしても時間がかかります。
そしてこれらの時間をかけないようにするには、例えばゲーム内容をシンプルにしたり規模を小さくする必要がありますが、これはデメリットとして内容が薄くなり飽きやすいゲームになる可能性もあります。
また、期間を優先することで本当に作りたいモノが作れるのかという問題もあります。が、逆に作りたいモノを追い続けて完成しないケースもあります。まぁこの辺は作る人次第ですし、それも含めて作品だと思います。

その辺の折り合いをつけながら決まったのが現在のスウィンぐるんになります。
「ゲームルールがシンプル」「ステージの量産が可能(ステージ毎の調整が不要)」、ストレートに言ってしまえば、1面が完成すればゲーム部分はほぼ実装完了になる内容です。

ただ開発が進んでいくとどうしても追加したくなる機能がいくつも出てきますが、今回はじっと我慢していずれ続編を作ることがあるなら入れようという気持ちで完成させました。
それでも明らかに入れないと困る機能は追加しました。例えばアーケードモードのコンティニューが追加されたのはコミケ前日の8/13だったりします。最初は総ステージ数が少なかったのでコンティニューはなくてもいいかなと思っていたんです…

ステージの作成はゲーム内にステージエディタを実装し、協力者の方々に作ってもらいました。
実際のステージエディタはこんな感じです。
160829_ステージエディタ

これで方針については終わりです。
さて、次は何を書こうかな…

(続く)

スウィンぐるん開発裏話(3)

方針の補足の続き。

  • Asset Storeを活用する

積極的に使います!そのための Asset Store!
特に一人で作っている時は強い味方になってくれます!

スウィンぐるんでは

  • Console Pro
  • QHierarchy
  • SRDebugger
  • TextMesh Pro
  • UIWidgets
  • Vectrosity
  • Sci-Fi Arsenal
  • Universal Sound FX
  • SOUND ATELIER

を使っています。
※プロジェクト内にはこれ以外のAssetも入っていたりはするんですが、入れただけで使っていないものも結構あります。

Console Pro・QHierarchy・SRDebuggerは大体どのプロジェクトでも使ってます。
どれも有名Assetだと思うので、改めて説明する必要はありませんね。
SRDebuggerは最新のUNIBOOK6でも紹介されているので、気になった方はそちらを読んで見るのもいいと思います。
UNIBOOK 6 情報【C90 – 3日目西f-21a】 – 日本Androidの会 Unity部

TextMesh Proは当初使うつもりはなかったんですが、開発途中からメニューやメッセージが増え、メッセージごとにテクスチャを作るのが面倒になったので導入しました。
導入後はかなり省力化になりましたし、扱いも簡単なので今後他のプロジェクトでも積極的に使いたいAssetの一つになりました。
導入に際して↓のサイトを参考にさせてもらいました。
UnityのText Mesh Proアセットで日本語を使うときの手順 – Qiita

UIWidgetsはサクッとUIを準備したいときに使っています。開発中のUIで使っているのでスウィンぐるんのゲーム本編ではほとんど出てきません。

Vectrosityは周囲のリングロープを描画しています。
試作版のように部屋の中だったら壁でターンすればよかったんですが、今のような謎空間だと接触するものがないので急遽リングロープ的なものを配置しました。

160828_ロープ

Line RendererやCylinderを細長くして描画しても良かったんですが、ロープでバウンドする処理の都合、スクリプトから簡単に制御・描画できるVectrosityを使いました。

ちなみにバウンド時のロープの描画は、ロープを常に A、X、Bの3点でつなぐように描画し、ルン子が接触していない場合は X=Aとして、ルン子が接触した場合は接触点をXとして描画することでロープを曲げています。
160828_バウンド

Sci-Fi Arsenalはゲーム中のたつまき・シールドのエフェクトとして使っています。
パーティクルは自分で作り始めると時間泥棒になりやすいので、Asset Storeで雰囲気が合うのが見つかると非常に助かります。

Universal Sound FX・SOUND ATELIERは毎度助けられている曲&効果音集です。
DustShootersやPanzerStrikeの効果音にも使わせてもらってます。

ただ、どうしてもイメージと合う音が見つからない場合は自分で作っています。例えば宝石を開いたときの音はグロッケンシュピールをC5→C7と駆け上がっている音だったりします。
※ピアノロールはC7→C9になってますが、実際の音はC5→C7です。

160828_効果音

なお効果音もパーティクル同様に自分で作り始めると時間泥棒になるので要注意だと思いますが、合うものを探す時間もかなりかかるので難しいところです。

最後に使用を断念したAssetとしてEasy Save 2があります。
一部のテスト環境でMoodkieSecurity.dllがノートンで隔離されるケースが発生したためです。

データの保存だけなら特に難しいこともないので、スウィンぐるんではデータをJson+暗号化し、.NETのSystem.IO.File.WriteAllLinesで保存してますが、マルチプラットフォーム運用を考えるなら Easy Save 2 のようなマルチプラットフォームの保存に対応した Asset に任せるのが楽だと思います。
実際、スウィンぐるんの Windows Store アプリ版も検討していますが、セキュリティやランタイムが WinRT と変更になる都合、修正作業が発生してしまいます。

(続く)

スウィンぐるん開発裏話(2)

方針の補足を。

  • Unityを使う

ここ数年はUnityばっかり使っているのでUnityでFAかと。Asset Storeの援護もありますし。
付け加えるなら、今回のように短期間で完成させる場合は、Unityと自分自身の出来る範囲で作りきるのが重要だと思います。

  • リソースはDustShootersのモノを出来るだけ使う

新しいデータを準備+チェックする時間もあまりないので、出来るだけDustShootersのリソースを使います。元々DustShootersのゲーム内ゲームとしての実装も考えていたので、リソースは共通化した方が便利というのもあります。

ただ、実際は開発中にどんどん差し替わり、最終的にほとんどが新規データとなりましたw

 

データの種類 想定 実際
プレイヤー 既存 新規
背景 既存 新規
ステージ部品 新規 新規
エフェクト 新規 新規
既存 既存
UI部品 新規 新規
BGM 既存 新規
効果音 既存+新規 既存+新規

その結果、画面はこのような変貌を遂げました。

160827_画面なお、見た目は大幅に変わってますが、ロジックは試作版で作ったものをほぼそのまま使っています。

(続く)

スウィンぐるん開発裏話(1)

コミケには何か出したい、でもDustShootersは間に合わないということで、急遽作り始めたのが「スウィンぐるん」になります。DustShootersの作業を中断して本格的に作り始めたのが7/24からだったので、3週間でマスターアップというちょっと厳しいスケジュールでした。

コミケまでに間に合わせるための方針として

  • Unityを使う
  • リソースはDustShootersのモノを出来るだけ使う
  • Asset Storeを活用する
  • デバッグに時間のかかるゲーム内容は避ける

を立て、9つぐらいのゲーム案を検討し、最終的に今のスウィンぐるんのゲームルールに落ち着きました。

ちなみに試作段階ではこんな画面でした
まんまアレっぽいですねw
old_CluClu

(続く)