気持ちよさを上げる音ゲー開発の考え方

はじめに

www.adventar.org

この記事はみす裏Advent Calendarの6日目の記事です。

 

こんにちはyukiです。

当初の予定ではHololensのことを書こうと思いましたが、諸事情により見送ることになりました。

と言うわけで、現在開発をしているゲームについて書こうと思います。

 

コトノネドライブについて

今現在、私は「コトノネドライブ」と言うスマホ向け音ゲーの開発をしています。

コトノネドライブ - gameatelierbb ページ!

 

コトノネドライブはタイトル通り琴をモチーフにした操作性と和風×サイバーなデザインや世界観を特徴にしています。

 

ゲームにおける接待

1人用のゲームを作る時、接待と言う考え方は非常に重要です。ここで言う接待とは、ゲームがプレイヤーに対して接待すると言う意味です。

例えば、アクションゲームにおいて主人公の攻撃は見たままの通りに当たり判定を行なっていないケースの方が多いです。

それは多くの場合において、画像や3Dモデルの画像どおりに判定を行うと攻撃が当たらなかったり、気持ちよくないからです。

市販のゲームなどをよく見てみると分かりますが、多くが明らかに疑惑の判定してます。プレイヤーは目の前にいる敵を倒したいのであって、主人公の武器を正確に敵に当てたい訳ではありません。

 

これと同じように音ゲーにも同じことが言えると思います。

つまり、判定などはプレイヤーに有利になるように設定しなければいけません。 

 

音ゲーにおける判定

最初、コトノネドライブを作っていた時は見たままの判定を行なっていました。

ノーツのデータをクラスNoteで宣言して、

private List<Note> noteList;

みたいな感じで楽曲のノーツのデータを保持していました。

楽曲中ではリストに入った順番通りに参照しながら、次に判定されるべきノーツを常に確認していました。

private int index = 0;

void Update()

{

    if (レーンをタッチした場合)

    {

        var note = noteList[index];

        // ~正しいタイミングで押せているか判定~

        index++;

    }

}

と言ったように、インデックスに指定されているノーツを見て、判定処理が行われれば次にタッチしたときはその次にあるノーツを見られるようにインデックスに1を加算する、と言ったような処理でした。

 

ただ、これでは問題が発生しました。

極端な例ですが、こんな譜面があると一つもノーツが取れません。

f:id:yyukix:20161206210051j:plain

原因は単純です。この時点では一番先頭にあるまだ判定が行われていないノーツから判定が始まります。つまり一番先頭にあるノーツがMISS圏内に居るとどれだけ頑張ってもノーツがMISS判定になってしまいます。

 

そこで、少し発想を変えました。

判定は可能な限りプレイヤーが最も高い得点を取れるようにしました。

例えばタップが行われた時、どれか一つのノーツの判定を行わなければなりません。

その際に、複数の得点の取り方が存在した場合、どのようなロジックで取得していくべきでしょうか。

 

コトノネドライブでは、現在の楽曲の再生位置から前後の近いノーツを取得します。

それらを比較して、最も高い得点が取れる取り方を計算して取れるようにします。

また、得点のしきい値の範囲内であれば、なるべく先頭のノーツの判定を行うようにしました。

 

このようにすることで、違和感を感じずに気持ちよくノーツを取る事ができます。

 

まとめ

このように、1人用ゲームの場合はプレイヤーが有利になるように判定などのロジックを実装するよう考えるとプレイヤーは快適に遊べるようになります。

一見、プレイヤーが有利になるようにする判定はゲームの低難易度化を招くように見えます。しかしそんなことはありません。

ゲームにおいて何が大事か、何が一番面白いポイントかを考えるとどこを優先すべきかが見えてくるはずです。

多くのゲームは絶妙な敵の配置や技、トラップの組み合わせなどのレベルデザインによってプレイヤーはゲームオーバーになるべきです。

決してゲームの操作性の悪さや仕様でゲームオーバーになるべきではありません。

プレイヤーが手足のようにキャラクターや自機を動かせる前提の元で難易度は調整されるべきだと思います。