Binaryの今の課題とこれから、SANDBOX2019後書き

まえがき

一般の方にプレイしていただいたフィードバックとかをもとに今Binaryに対して僕が思ってることをつらつら書きます。 ここに書いてることは全く正論でも事実でもないし、なんとなく今思ってることを深く考えずに書いてるだけです。 ブラックな内容、というか愚痴っぽい内容になりそうなので、気分を害されそうな方はここでスキップだ!

そもそもの話

「Binaryってなんで作ろうと思ったんだっけ?」 というのを思い出させるようなコメントを貰ったので思い出してみると

  • 当時仕事でやっていたソーシャルゲームの開発がつまらなさすぎる、のと
  • 元々サーバーやインフラしかさわれない人間なので、モデリングやUnityを第二スキルとして習得したい、というのと、
  • DevilMayCryシリーズ、ないしアクションゲーム全般のスーパープレイ見るのもプレイするのも好きだから、僕も作ってみたかった。

というのが元ネタです。

そこから僕が好きな攻殻機動隊とか映画のマトリックス、コミックの"人形の国"、 あと18禁のエロゲーなんですけど、戯画のBALDR SKYとか、Deus Exシリーズみたいなサイバーパンクフィクションの世界観でキャラから設計した感じになります。 攻殻機動隊に関してはイノセント見てなかったせいでモグリ扱いされたんですけどね…コミックも実は読んでなくて、アニメ版ばっかり見てました。

開発を始めたのがログ見るとプリプロ開始が2017年6月、本開発が2018年8月20日(ってgitのログに書いてあった)ぐらいなので、だいたい2年ぐらいになるんでしょうか。 当時はモデルの作り方もわからなかったし、Unityも知識0でした。 期間中ほとんどキャラ作ってた気がする。

ロックオンの壁

BinaryはDevilMayCryシリーズ、ないし他のアクションゲーでもよくある、"R1"ボタンをホールドでロックオンする形にしているのだけど、 (なんなら操作系まるっとDevilMayCryっぽいのだけど)、これが結構難しいみたい。

TOKYOSANDBOXではロックオンを上手に使えるプレイヤー、ないしDMC経験者等はすごく上手にコンボを決めることができていたのだけど、 そうじゃない人は敵を倒すのがやっとみたいな感じでした。

特徴としてはレバーを倒してしまう、ロックオンを押していない、パターンが多かったです。

いや実はゲーム側に問題があって、非ロックオン時の方向補正が効いてなかったというのがすごく大きかった。 例えばDMCだと、非ロックオン時の挙動として

  • リーチ内に敵がいない場合は現在の向きを維持する
  • リーチ内に敵がいる場合は、近くの敵の向きに自動的に補正される。ただし、スティックを倒している場合はそちらを優先する

というのがあるんですが、わかっていたくせにこれができてなかった。テストプレイだと自分はロックオン押しっぱなしにするから。
これがあるだけでもプレイフィールだいぶ違ったんだろうなーと思うと申し訳ない気持ちになるし、後悔しています。

もっと欲を言うと距離補正もつけたかった。
技のモーションをそのまま再生してしまうと「現在のキャラの距離と敵の距離によっては次の攻撃が当たらない」という現象が発生してしまうので、 「技の予備動作に余分に移動量をつけておいて、敵の距離に応じて予備動作のフレームを任意の量スキップする」ことができると、コンスタントにコンボが決まるような実装にすることができると思っています。

ブリンクの壁

Binaryはサイバーパンク・アクションゲーム、主人公のダリア(Dahlia)はクラッカーで"ある組織”に対して侵入・捜索活動を行うという世界観のゲームです。 電脳世界の話なので、どれだけ人間離れした動きでもアクションゲームとして成立させることができます。 (※だからモーションを考えたり作ったりする作業が一番好き。)

その一つにブリンクとブリンクジェイルという要素があるのですが、雑に説明すると

  • 対象または前方へ無敵状態で高速移動する
  • ブリンクした地点の周辺にいる敵に小さなノックバックを与えて位置を固定する

というものがあります。ブリンクを使えば敵が止まるので確定でコンボが決まるように直前に入れた仕様でもあります。 ブリンクジェイル、これ本当に入れてよかったなぁ…

このブリンクが使えないとBinaryっぽい”卑怯なぐらいの”連撃ができなくなってしまうので、面白さが失われてしまっていました。
いや、そもそもL2/R2とかいうすごく押しにくい(しかもR1はロックオンで押し続けることを要求する)ところに置いてしまっていたので、これも反省点かなぁと思います。
コントローラーの操作は基本的に両手と親指、人差し指だけで構築するべきで、中指での操作は頻繁には使わないような操作に置くべきでした。
親指で押せる範囲に修正しようかなー、と思ってます。

PathFinderの壁

PathFinderはいわゆる侵入要素、あと技のオーバーライドができてキャラビルディングができます。
たとえば空中戦特化にしたり、広範囲攻撃を多くとってドミネーションをたくさん打てるようにしたり、重撃特化で一体づつすばやく片付ける、単純にモーションがかっこいいやつばっかりにする…みたいな"ビルド"ができるような予定をしています。

時間がなかったとはいえここの説明が足りておらず、ほとんどの人が「?」を浮かべてました。

覚える技の図解とかスキルツリーみたいな感じでもう少しグラフィカルに作れれば良いなーと思ってはいます。
あとは侵入要素、リスク&リターンの設計やグラフィクス面でのアップデート、自動生成周りもちゃんとやらねばなりません…

あと元々日本向けではなく海外向けに作ろっかなーとか思っていたせいで決定が✕ボタンなのですが、ほとんどの日本の方は○押してました…
これに関しては事前にもう少し決定ボタンを押すタイミング増やして理解の補助にできないかなーと思ってます。

あと全体的に使っているフォントがデザイン先行で決めたので読みにくいみたいなところは大いにありそう。
mojimo-games契約しているし、フォント変えようかなぁ。

プレイ動画の弊害

正直僕はアクションゲームが苦手な人間です。好きなんですけどね。
格ゲーとかだと絶対勝てないし、FPSでも立ち回り重視です。

とはいえ開発者なのでBinaryに関してはそれなりの動きができるようになってます。
プレイ動画でもそれなりのコンボができていたわけなのですが、
「動画を見て、試遊して、でも操作難しいのでコンボできなくて、失望してしまった」
みたいなパターンが結構あって、どうしたものかなぁと。

もちろんアクションゲームの向き不向きはあるのだけど、 「チュートリアルの情報量が大きすぎてワーキングメモリから落ちて、操作がよくわからなくなった」 みたいなことがおそらく起きていて、市販のゲームって本当によく設計されているなぁと改めて関心してました。

何なら「これオートモードとか無いんですか?」まで言われてしまいました。こんなアクションゲームだし、コンボしたいよね。

みんながスーパープレイできるアクションゲームって何なんだろうなーってあれからずっと考え続けてます。
簡単にしすぎると今度はアクションゲーム得意なプレイヤーが細かく操作できなくなってしまってつまらなくなってしまう。
オートモードがその解決になるなら、オートモード、余裕があったら作ってみたいかもしれません。

これからやること

  • UX改善
  • ビルドの幅を持たせるアクションの追加
  • ドミネーション以外のハッキングモジュールの追加
  • ボスやエネミーの追加

TGSのインディー審査枠、デジゲー博などに応募しようかと考えています。 どちらも審査ありなので出れるかどうかわかりませんが、いずれに出展できなくても11月に体験版出せれば良いなーと思ってます。

これからも楽しく開発できればいいなと思います。

TOKYOSANDBOX2019にBinaryを出展してきました

Binaryを出展してきました

してきました。

いろいろありすぎて全部は書き切れてないです。皆さんありがとう。

1日目

異臭騒ぎ

初出展で緊張しながらブースを構築してると、早速異臭騒ぎが起きました。 「めっちゃごま油のにおいする!!!」ってなってたんですけど、多分僕がPCの下に化学繊維系の布敷いてて、PCがすごい発熱してその熱で臭ってたんじゃないか説がありました… 直後からにおいしなくなったので多分あれなんだろうなーと思ってます。その節は周辺のブースの皆様方並びに運営の方、ご迷惑をおかけしました…

Binary人が来ない問題

会期中はとりあえずタイトル画面で放置してたんですけど、それだけだと何ゲーなのかすらわからなさすぎてぶっちゃけ浮いてました。 ブースぱっと見で「これはどういうゲームなのか」がわからないとスルーされます。当たり前なんですけど…

f:id:fortysan:20190408224205p:plain ※これは誰が見てもわからんw

事前情報ばらまいて来てもらうという方法もありそうですけど、無名だしそもそも完成度もそんなに高くないので…
もっと初見の人が来てくれるような工夫、というか想像が圧倒的に足りてませんでした。
完全に準備不足だったんですが、途中でその事に気がついてからは人がいない間自分がデモプレイをすることで対応しました。 結果明らかにブースを覗いていく人が増えたし、プレイされていく方も増えました。
熱中してプレイしてくれる方とか、好きとか面白くなりそうって言ってくれる方もちらほらいて、(それは社交辞令かもしれなかったけど)言ってくれた事自体が嬉しかったです。

この日は数えて21人ぐらいの方がブースに来てくれました。感謝

終わったあとにやったこと

一日目に終わったあと、実際にプレイされた方の様子から以下のように変更を入れました。

  • ロックオンのチュートリアルが一瞬で消えてしまうので、1.5秒以上ホールドしたら消えるように
    • ロックオンの壁の緩和です…これに関しては別記事で
  • 各種コマンドのチュートリアルを一本化しました。(アサルトグライドとか、スノーフレークとか技名で説明されてもわからんw)
    • 操作に関する情報量を減らして、プレイヤーが混乱しないように。
  • ドミネーションが何故かマーク無しでチュートリアルクリアされてしまうのを修正
    • 単純にバグでした。これを直してもまだわかりにくいみたいなので、どうしようかな。
  • コマンド技の方のダメージを向上させました。
  • オーバーロードの継続時間等を調整しました
  • ミッションプログレスゲージのデザインを変更しました。
  • Depth5で終了してリザルトに行くようにしました。パスファインダーゴールラインを見せて、終わりをわかりやすくしました。
    • (上手い人はずーっとプレイできてしまっていたので、途中で疲れてきた方が多かったです。)

f:id:fortysan:20190408230415p:plain ※こんな感じで、3までクリアすると見えるぐらいのやつ

  • あとは自分でプレイした動画を撮って、ブースに人がいない間は動画を流せるようにしておきました。
  • 難易度としては、アクションゲームが苦手そうな方はちょっと早めに時間切れになるような調整をしました。

2日目

開始直後からプレイ動画を流してました。
この日プレイしてくれた方の半分ぐらいが外国籍の方で、つたない英語でしたが無事アテンドできました。
めっちゃ笑顔で頷きながらプレイしてくれる人とか"Beautiful!"連呼してくれる方とかがいてすげー嬉しかったのと、 ボタン連打で夢中でプレイしてくれるおかげで偶然かっこいいアクションができたりして、プレイされている本人が驚かれているのも印象的でした。
自分ゲームプレイ中は真面目なので真顔になっちゃうんですが、あのようにに感情を出しながらプレイされるのってすごく嬉しいから、自分も次から真似しようかな。

この日は数えて36人ぐらいの方がブースに来てくれました。圧倒的感謝

TOKYOSANDBOX総評

結論出せてよかったなぁと思ってます。 現実のプレイヤーに対してどういう時間や感情を提供できるのかが少しわかったのと、今後の課題やマイルストーンなどが整理されつつあります。

TOKYOSANDBOXで変わったこと

  • ブースでも第一印象が大事、見ただけで何ゲーかわかる工夫は最低限すること。
  • どれだけ言葉を尽くしてもわからないものはわからない。何でも理解されない前提で設計すること。
  • ボスの存在はあんまり考えていなかったけど、なんとなくやる気になりました
  • ハクスラ要素、というかパスファインダーがわかりにくいので、もう少しモーションをドラスティックに変えたい
  • デジゲー博やTGSへ出展応募するモチベーションが少し上がりました。
  • デジゲー博ぐらいに合わせてボス戦込の体験版その1が出せると良いなーと思ってます。
  • 現時点で気持ちいいって言われた部分(ブリンクや空中技)は更にこだわって最高を目指したい。
  • DevilMayCryシリーズはすごく尊敬しているけれど、丸パクリと言われない努力はしていきたいなと言う強い気持ち

あと、化学繊維系は溶けるとごま油みたいな匂いがする。かもしれない。いいね?

Position (Circle)を回転させる

Position (Circle)などの向きを変える

初期位置を決める上でBoxやTorus,Circleなどが便利なのですが これらの向きを変える方法です

Graph

f:id:fortysan:20190317231706p:plain

一度Positionで値を決めたあとに、再度Set Positionします。

この辺は通常のShaderやプログラミング言語と同様に上から下に処理されるので、 Position(Circle)した直後にGetAttribute(position)とすると、Position(Circle)が適用された状態のPositionが取れます。

これにTransform(Position)で回転をかけることで向きを変えることができます。

2019年

遅れまして皆様あけましておめでとうございます。

2018年、なんとか製作中ゲームの方が軌道に乗ってきました。

本当はいろいろ足りていないのですが、なんとなく、アクションゲームっぽくなってきたと思います。

あとタイトルを決めました。BINARY.というタイトルになります。 動画に出ているキャラクターが電脳世界で暴れまわる…みたいなコンセプトのゲームになります。 よくインディーゲームのキャッチコピーに「ハイスピードアクション」みたいなの結構あるとおもうんですが、 このタイトルは”本来の意味で"ハイスピードなアクションゲームになる予定です。

そんなところで2018年のまとめと、2019年にやること/やりたいことをまとめておきたいと思います。

2018年にやったこと/起きたこと

  • モーションとモデルのリワーク。
  • Substance Designer/Painterが何となく使えるようになった
  • Gamesynthにちょっと手を出した
  • モーションツールをHoudiniへ移行した
  • エフェクト制作を少し学んだ
  • UnityのVFXEditorの記事をいくらか書いた
  • Unityのシェーダーが書けるようになった
  • Unityの勉強会に行くようになった

2019

  • モーションのクオリティーを上げる
  • VFXのクオリティーを上げる
  • サウンドの実装をする
  • "アクションゲーム"としてもう少しとがらせる
  • インディーのコミュニティーに溶け込みたい
  • Houdiniもう少しちゃんと使えるようになりたい
  • TOKYOSANDBOX, TGS, デジゲー博等のいずれかにプレイアブル出展したい

今後共FortyWorksをよろしくお願いいたします。

Unity公式のHoudini HDAを使って、Unity用のPointCache(.pcache)やVectorField(.vf)を出力する

Unity公式のHoudini HDAを使って、Unity用のVectorFieldを出力する

Unity-TechnologiesのGithub Organizationに先週ぐらいからVFXToolBoxというものが公開されており、この中にVFXGraphなどで使えるPointCache(.pcache)や、Unity公式のVectorFieldファイル形式(.vf)をHoudiniから出力するためのHDAが含まれています。

今回はそのお話です。

VectorFIeld (.vf)

Unity向けのVectorField(.vf)ですが、必ずこの形式でないと駄目?と言うとそうでもなくて、UE4などで利用できる.fgaなどから3D TextureとしてインポートしてもVectorFieldとして使えます。

.fgaからUnityの3D Textureを焼く方法は、以下の記事で以前に紹介したとおりです。今のところは、好きな方を採用するといいと思います。

forty.hatenadiary.jp

PointCache (.pcache)

PointCacheに関しては、エディター上からも作成することができます。 難しいことはできませんが、こっちのほうが簡単に作れます。

(UnityEditor) Window > Visual Effects > Utilities > Point Cache Bake Tool

f:id:fortysan:20181113040327p:plain

検証環境

Houdini Indie 17.0.352

HDAのインストール

VFXToolBoxをgit cloneします。 gitがわからない方は、zipで落としてきてもいいと思います。 github.com

Houdiniの新規作成から、空のプロジェクトを作成します。

作成したら、File > Import > Houdini Digital Assetを開きます。

f:id:fortysan:20181113025902p:plain

git cloneしてきたVFXToolBoxの中の、VFXToolbox\DCC-Tools\HoudiniUnity_VFX_Tools.hdaというHDAがあるので、これをインポートします。

f:id:fortysan:20181113025412p:plain

pcachevolume_exporterというノードが新たに使えるようになります。 インストールしたら、適当な位置にプロジェクトを保存しておきます。

Point Cacheを出力する

Test Geometry Rubbertoy 先生にお越しいただきます。

f:id:fortysan:20181113030525p:plain

Scatterノードにつないで点に分解したあと、Point Cacheノードにつなげます。

f:id:fortysan:20181113030744p:plain

今回は単純に各pointの座標のみエクスポートすることにするので、Point CacheノードのExport AttributesPのみにしています。 Point Cacheでは他にも速度や色を出力して使うことができるようになっています。 下図は、UnityのVFXGraphで読み込んだときのノードの状態です。

f:id:fortysan:20181113031318p:plain

Point CacheノードのGeneral Settings > Conditionの値を1以上にすると、ファイル(.pcache)が出力されます。 .pcacheファイルは、そのままUnityへインポートすることができます。

f:id:fortysan:20181113031436p:plain

Volume ExporterでUnity向けVectorField(.vf)を出力する

手前味噌ですが、以前に作ったゴブレット型のVolumeを利用してみようと思います。 サンプルもつけているので、試す場合はぜひ参考にしてみてください。

forty.hatenadiary.jp

GameDev ROP VectorFieldの代わりに、今回インストールしたVolume Exporterをつなぎます。

f:id:fortysan:20181113035304p:plain

Output file nameVFに設定して、Volume NameにエクスポートしたいVolumeの名前を入力します。 上記のデモでは、velocityという名前になっています。 Volumeノードで設定しています。 Vectorとして値を格納しているため、Volume TypeScalerからVectorへ変更しています。

Point Cacheノード同様、General Settings > Conditionの値を1以上にすると、ファイル(.vf)が出力されます。 .vfファイルは、そのままUnityへインポートすることができます。

作成した(.vf)は、VFXGraphやUnity 2018.3から使える、ShurikenのExternal Force Moduleなどから利用することができます。

f:id:fortysan:20181113035600p:plain

Export形式に(.tga)がありますが、これはちょっと使い方がわからなかったので、調べてそのうち追記しようと思います。 以上、Point CacheとVectorFieldの作成手順でした。

【Unity】UnityへFGAをインポートしてVisual Effect GraphのVectorFieldとして使う方法

.fgaに焼いたVectorFieldをUnityへインポートする

VectorFieldとは、ざっくり言えばパーティクルに速度を与えるために事前計算した力場のようなものです。

UnityではVisual Effect Graphの"Vector Field Force"ブロックとして実装されています。(あと2018.3のShurikenパーティクルシステムにもあるはず) f:id:fortysan:20181107042018p:plain

Visual Effect Graphのサンプルで言うと、Unityのロゴが出るサンプルで利用されています。 f:id:fortysan:20181107041939p:plain

UE4では、Vector Fieldモジュールとして実装されており、.fgaという拡張子のファイルでインポートすることができるのですが、Unityの場合3Dテクスチャに変換する必要があり、標準で.fgaからUnityの3Dテクスチャへインポートする手段が(現在のところ)ありません。

Mega Flow等有料のアセットを買ってインポートしてもいいのですが、.fgaのインポーターができてしまったので、インポーターの公開とその使い方を書こうと思います。

Vector Fieldの焼き方は前の記事などを参考にしてみてください。

Unity向け.fgaインポーター

github.com

リポジトリをクローンしてプロジェクトに入れるか、または.unitypackageを提供しているので、これをプロジェクトへインストールしてください。 MITライセンスです。

使い方

インストール後は、Window/Visual Effects配下にFGA Importerが現れます

f:id:fortysan:20181107043036p:plain

Import FGA を押すとインポート元VectorField(.fga)と変換先の3DTextureアセット(.asset)を聞かれるので、任意の場所を指定してください。

焼けたら、Visual Effect GraphのVector Field Forceブロックの"Vector Field"へ入れて利用することができます。

その他

バグとか見つけたら、Githubのissueの方へお願いします。

HoudiniでVectorField(.fga)を作成する方法(サンプルプロジェクト付き)

前書き&サンプルプロジェクト

これ↓に利用しているVectorFieldの作成方法です。ちょっといじれば他の形も簡単に作れます。

github.com

早速ですけどサンプルプロジェクトです。 記事ではざっくりとした解説しかできないので、サンプルプロジェクトを見てもらうとよりわかりやすいかもしれません。 .hipncで作ってあるので、無料のHoudini Apprenticeで開けるようになっています。

HoudiniのGame Development ToolSetが事前に必要です。 GameDev ROP VectorFieldというノードがあって、これを使って.fgaを作成します。

作成した.fgaは、UE4などへインポートして使うことができます。 UnityのVisual Effect Graphでも使うことができるのですが、3Dテクスチャへのコンバートが必要になります。 これはまた別の記事として書こうと思います。

作り方

ゴブレットのポイントクラウドを作成する

一言で説明するなら、NURBSをResample SOPでバラしたあと、Copy SOPで回転コピーして形にします。 ついでにWrangleでAttributeへ各PointののTangentを入れておきます。 PolyFrame SOPは、Tangentを取得するために使います。

f:id:fortysan:20181106234832p:plain

画像とてもわかりにくくて申し訳ないんですが、点の集合でゴブレット型ができました。

f:id:fortysan:20181106234946p:plain

ポイントクラウドからVolumeの作成

Bound SOPでバウンダリボックスを作成して、Volume SOPへの引数とします。

f:id:fortysan:20181106235225p:plain

Volume VOP内でVectorFieldの値を取得する

Volume VOPをつなげます。 第一引数はVolume、第二引数に先ほど作成したポイントクラウドを与えておきます。

f:id:fortysan:20181106235344p:plain

VOPの中身です。 Output2を引数にPoint Cloudとして扱い、 Point Cloud Filterで各点のAttributeを取得して、Bind Exportヘ流しています。

f:id:fortysan:20181106235438p:plain

シーンビューだとこんな感じ。

f:id:fortysan:20181106235641p:plain

その後、GameDev ROP VectorFieldへ流せば完成です。

f:id:fortysan:20181106235736p:plain

ノードのRenderボタンを押せば、ファイルが出力されます。やったね!

f:id:fortysan:20181106235822p:plain