読者です 読者をやめる 読者になる 読者になる

エディトリアルデザイナーのアプリ制作日記

Unityで遊ぶ個人開発者のメモ書き

Unityアクションゲーム制作記 その17 基本操作のおさらいと調整

Unity アクション アプリ ゲーム

 めずらしく更新が早いですが、今回は復習ネタが多めでいきます。

 さて、これまでさらしている動画を見ていただければわかるのですが、今回作っているゲームの操作にはバーチャルパッドを使っています。導入する際の方針としては以下の2つがありました。

  • どこを押しても対応できるようにする
  • いわゆるボタンは使わない

 どこを押しても大丈夫というのは、ユーザーがプレイする時にベストポジションで遊べるようにしたかったということもありますが、縦・横どちらでも遊べるようにしたかったのが大きいです。特に縦持ちにした時には、横にUIを置くスペースが限られる(というか置けない)ですからね。

 ボタンを実装しない理由は簡単で「自分の手では、ちゃんと狙って押せない!」から。幾つかそういったタイプのゲームもやってみたのですが、すぐに押す場所がずれてしまいストレスの溜まること溜まること。

 どこまでできるかどうか全くわからないまま、「1タップのみの操作でどこまでできるか」この点だけは最初から決めていたのですが……結果、くそ面倒なことになりましたが……(自業自得)。

f:id:hamazakifactory:20170206144418j:plain

 まず「1タップ」でできることいえば、画面を「押す」「離す」これだけ。あとは、押している時間、離している時間、移動距離との組み合わせで、操作のバリエーションを作るしかありません。キャラクターの移動に関しては、上の写真にある通り、最初にタップした場所からスライドさせた方向へ、キャラクターを移動するようにしてあります。操作としては「押しっぱなし+移動」ですね。

 攻撃自体は、タップ=「押して離す」動作で実現しています。連打することで攻撃がつながるものと、特定タイミングでタップすることでつながる連続攻撃の2つを用意していますが、当然のことながら、1タップでは移動しながら攻撃するという操作ができません。そこで攻撃している最中に、敵を少しだけ追尾するようにしています。

f:id:hamazakifactory:20170206151137j:plain

 今のところは、連続攻撃の初弾で攻撃した敵の中からプレイヤーキャラに一番近い敵をターゲッティング。以後、連続攻撃を繰り出すたびにそのキャラをちょっとだけ追尾するようにしてあります。そして連続攻撃が途切れたら、次の攻撃時に新たなターゲットを探すという具合です(黄色の1〜3)。攻撃を繰り出すたび、「常にプレイヤーに近い敵を叩いていく=敵全体に平均的にダメージを与えていく」のもありなのですが、今回は「1匹を追尾してとにかく敵の数を潰し、プレイヤーへの脅威を減らす」ことを優先としました。

 しかし、もう一つ困ったことがあって、それはプレイヤーが倒したい敵の優先順位をどうやって知ればいいのかが、現段階では知る術がないということによるものです。特にボス戦。なによりボスが重要なターゲットであり、倒すべき敵として優先度の高いものです。しかし、時にはボスが召喚した雑魚を先に片付けたい状況というのも発生することもあるので、一概にボスまっしぐらが正しい状況とは言えないのが悩ましいところ。青の1〜2の順で攻撃するか、それとも黄色の1〜3で攻撃するか……勝手に判断してやってくれるようにするにはどうすればいいのか……。脅威判定って、自分の攻撃力と敵のHPの兼ね合いで判断できるのかなぁ……とか思いを巡らせたこともあるのですが、「いまはその時ではない=そこまでやってらんねーな」とさっくり投げ出してあります。悩みどころですが、現状で致命的な問題となっていないので、今後の課題とします(=おそらく放置したままなパターン)。

 んで、ようやく今回調整した部分。最近、操作としてフリック操作による、ダッシュ移動を実装しました。操作としては「押す(ごく短い時間)+移動(そこそこ大きく)」で、緊急回避用として用意しました。実装したのは、フリックした方向に一定距離ダッシュ移動するというごく基本的なものです。

 多数の敵に囲まれた状況から脱出するための操作としては、立派に役割を果たしました。操作を覚えることでスピーディーな戦闘が楽しめるようになった……んですが、遊んでいくうちにどうにも「なーんか物足りねぇなあ」と思うように。ダッシュ移動は気持ちいいのですが、そのあとに敵を叩くためにえっちらおっちら移動しなければならない展開がちょっとだるい。まぁ、ダッシュ移動そのものが敵から離れることを第一目的としているんだから当たり前です。でもでも、もーちょっとアクティブにダッシュ移動を使えないかなーと欲張ってみたい、要は、攻撃する時に敵を追尾したように、ダッシュ移動をしたときもいい感じで、敵を追尾できないかなーということです。

 まずやってみたのは、ダッシュ操作直後に敵を追尾し始めること。回避するという概念はどこへやら、ただ単に敵まっしぐらになってしまうのでNG。しかたなく、ダッシュ移動そのものをじっくりと見直してみることに。

 今回のダッシュ移動は、一定速度で高速に移動する期間とそこから次第に減速していくというシーケンスで実現していました。そこで、高速に移動しているときはそのままにして、減速していくときに敵を追尾させていけばいい感じにならない? とやってみたところ、そこそこ思い通りに敵の後方へ回り込むような軌道が実現できました。

f:id:hamazakifactory:20170206160347j:plain

 やったーと喜んでいたのですが、問題はすぐに発生。次なる問題は、追尾する敵をどう選べばいいか? です。脅威度判定は今後の課題ということで、追尾する敵を選ぶ基準は、いまのところ距離だけ。なので、移動しているどこのポイントから、敵を選ぶだけになります。タイミングとしては、

  1. ダッシュ開始時
  2. ダッシュ移動終了時
  3. ダッシュ+減速終了時(ダッシュ完了後)

くらい。まぁ結論から言うと、ダッシュ開始時にダッシュ完了後の最終到達地点の座標を計算(直線移動なので楽ちん)、そこから一定の範囲にいる敵を探してターゲッティングするという方法に落ち着きました。

f:id:hamazakifactory:20170206164638j:plain

 こうすることで、敵のいない方向へダッシュ移動すれば確実に敵から離れられます。ダッシュ移動の距離を把握している必要はありますが、覚えてしまえばダッシュ移動して敵との距離を素早く詰めることも可能になりました。めでたしめでたし……。

 とはいかないのが現実。先ほどからちょくちょく出てきている敵の脅威判定をちゃんとやってないので、現状では、ダッシュ移動後にとりあえず手近な敵にまっしぐらしてしまいます。つまり、プレイヤーの思惑と外れた場所へ突っ込む可能性も高いということですね。プレイヤーは、ゲームに慣れてくればくるほど、先読みというか戦闘状況の先を見て戦うようになります。つまり、こういったアシスト機能が、プレイヤーが描いている戦略と変わってくると、結構なストレスを感じてしまうんですよねぇ。わかっていても解決策は浮かばず……。

 しっかし、最近は問題を解決するどころか課題だけが積み上がってきて、ゲームが出来上がる気がしなくなってきてるけど、気のせいだろうか……。まぁ引き続きがんばっていこう、うん。