●2016/05/25
今回は解説がかなり詳しくなりました。
ゲーム製作に役立ちそうな内容満載だぞ……。
毎回これくらい書きたいけど、たぶん無理だろう。
.
殴ったキャラをしばらくの間自動ロックオンするようになった。
クォータニオン使ってホーミング弾を作った。
.
●ロックオン
コンボが全く入らないので一度殴ったキャラを自動的にロックオンするようにしました。
殴ってから三秒間、半径二メートル以内にいるときは相手のほうを向き続けます。
.
●体力、ダメージ関係
体力関係のパラメータには、体力・耐久力(いわゆるスーパーアーマー)・転倒・気絶・防御があり、攻撃の種類ごとにダメージ量を設定できます。
ゆくゆくは毒ダメージ、麻痺ダメージなど状態異常の項目も持たせたい。
ハック&スラッシュRPGにも対応できるシステムにしたいところです。
ダメージを受けたとき、転倒値が残っている立ちよろめきモーションになり、転倒値がゼロ以下だと転倒モーションになります。
転倒値が一定以下のときに打ち上げなどのふっとばし系攻撃が入ると、上吹っ飛び、横吹っ飛び、下吹っ飛びになります。
気絶と防御は夜光蛾7のときにもパラメータとしてはあったのですが、ゲームには反映されていませんでした。
今回は気絶のみ反映させようと思っています。防御はあまり好きではない……。
.
●ホーミングとクォータニオン
XYZ軸で角度を制御するやり方だとホーミング弾や多関節キャラの製作に不具合が出るので、クォータニオンについて調べました。
実はGlashell2を作っているときにも少し勉強したんですが、さっぱりわけがわからなくて導入を断念していました。
XYZ軸(オイラー角)で制御する方法だとどんな不都合があるのかというと、目標に向かって少しずつ角度を変えるときにものすごく面倒な計算が必要になるのです。
複数回に分けて回転操作をして角度を算出しないといけません。
なぜかというと、XYZ軸で姿勢を制御していると「自分の位置・視線方向を原点とした相手の角度」を一発で出せないからです。
一度自分を原点とした座標系に変換してから角度を算出し、それを再度ワールド座標系に変換するという手間が必要になります。Galshell2では三角関数を駆使して計算していました……。
それがクォータニオンを使えば一発で出せるのです。すごい。魔法は数学の中に潜んでいた……。
また、XYZ軸で制御すると「ジンバルロック」という問題もおきます。これはつまり、ラジオのアンテナを垂直に立てると動きが制限されるやつです。
これはものすごくわかりやすい例えだと思ってるんですが、今はラジオのアンテナと言っても通じないのかな……。
クォータニオンの詳細については相変わらずわけがわからなかったものの、仕組みの理解は放棄して「なにができるか、どうやって使うか」のみに絞ったところ、なんとかホーミングミサイルを作ることができました。
クォータニオンを使ってホーミングミサイルを作る場合、ミサイルの進行ベクトルと目標物への回転軸があれば、あとは回転角度を与えるだけで一発で移動ベクトルが出せます。
自分がミサイルになったとして、空を飛ぶ鳥を狙って飛んでいくと考えると、今向いている方向と鳥の方向が作る平面を移動すれば、最短距離で鳥に到達できるわけです。(逆にこの平面を使わないと真っ当なホーミング弾にならない)
で、自分の体の中心線をその平面に合わせた姿勢で、両手を左右に伸ばすとそれが回転軸になります。
このへんの説明は図がないとわかりにくいんだけど、図があってもわかりにくいんだろうと思うのだった。
実際に作ってみなければわからない難しさと言いましょうか。
僕もGalshell2作り始めたときは、2Dだろうと3Dだろうとホーミングなんて同じだろ!楽勝だろ!と思ってたよ……。
しかし! この回転軸の出し方がわからない……。これを出すためには、結局複雑な三角関数の計算が必要なのではあるまいか?
と思ったところで、「この回転軸って要するに進行ベクトルと目標物へのベクトルの法線だよな……」と気付いたのでした。
法線は「外積」を使えば一発で出せます。すごい。魔法は数学の中に潜んでいた……。
実は外積の仕組みも全くわかってないんですが、3D関連のプログラムを調べていれば「外積で法線が出せる! これぞ魔法!」という利用法だけは嫌でも頭に入るでしょう。
まさに今の僕。
内積よりも難しいみたいに言われますが、仕組みは置いといて結果(利用法)だけでいえばこっちのほうが単純明快ではあるまいか。
そして実際の計算のほうは、こちらのライブラリをそのまま使ったのでした。
以前は、「ちゃんと仕組みを理解せねば、自分でアルゴリズムを考えねば、サンプルコピペじゃなくて自分なりに関数を作らなくては」と思っていたんですが、最近は「結果だけ手に入ればいいや……」という感じです。
若いうちは車輪の再発明もいいが、年を取ったらそういう手間は省いたほうがいい……。
こうしてホーミング弾は完成したのでした。
動画では胸から弾を撃ってますが、もともとは股間から撃っていました。なぜなら、キャラの中心が股間だからです。
しかし卑猥だ卑猥だとネタにされるのが嫌だったので適当に発射座標を上げたら胸の位置になりました。
.
●ゲームシステム関連。
ゲームのシステムは敵やステージデザインと直結しているという僕の持論があるのですが、これを言っても誰も納得してくれなくて悲しいです。
ゲームを完成させるための究極の秘訣だというのに……。
自機周りのシステムをいくら練っても、それを生かす敵や仕掛けがないと意味ないんですよ。
ゲーム製作が頓挫する理由の半分は、自機周りのシステムが完成し「五割完成した! 勝利が見えた!」と思ったもののその後のステージ製作で詰まったり飽きたりではないかと思っています。
「作っているゲームが面白いかどうかわからなくなる」というのも大抵がこれが原因ではあるまいか。
自機周りのシステムなんて、どんなすごいのを思いついても完成度で言えば10%以下、せいぜい5%というところなんですよ……。
だから、システムを考えるときに「これで何をやらせるか」を一緒に考えておくのです。つまりゲームシステムの真の主役は敵。
全部考えるのはさすがに無理なので、例えば全五面のゲームなら道中の仕掛け一つ、ボスの仕掛け一つくらいをあらかじめ考える。
ここで考えた仕掛けというのは「このゲームのおもしろい部分、見せたい部分」なので、よっぽどのことがない限り作ってる最中に「これは面白いのか?」とはならないわけです。というか面白いも何も、それを見せるために作ってるんだよ……。
もちろん製作中に「これは無理っぽい……」となることもあります。
でも、なぜ無理なのか、という部分から代替案が浮かび、その案というのはこれまでの製作過程でよりシステムを熟知したものであるため、結果的に面白さがアップしてしまうわけですよ。
直感に頼った製作法のほうが天才感がでていいんですが、ここはひとつ自分を凡人と認めてロジックの積み重ねでゲームを作ってみてはどうか。
ゲームを完成させたいのなら頼るべきはロジックですよ……。
.
とまぁ偉そうにいろいろ言ったわけですが、今のところは基本システムもできていない状態であるため、以下に記す案もラフデザインとすら言えないものです。
まったく別のものになる可能性も高い。
普段、思いついたアイデアを片っ端からメモしていて、その中の最近思いついたひとつといったところです。
製作記録公開企画として、ゲーム製作の前段階から詳細に記録していくというわけですよ。
他にもいろいろと考えていますが、その中でも一番無難で現実的なものです。
最初は普通でいいんですよ。完成させてノウハウを積み重ねることが大事なんだから。
.
あと、僕は企画書とか作業工程表みたいなものはまったく作らずメモと頭の中で全部すませる人間なので、プロ感溢れる内部資料みたいなものは今後も期待しないでくださいよ……。
.
○システム
基本は大味なスポーツ系TPS。近接攻撃要素をちょっと加える。
当たり判定は座標を基にした球やカプセルで、ヘッドショットはない。全方位STGに近いプレイ感。
自動回復の体力+アイテム取得式のシールド。シールドが切れてから本番という感じ。(PS2のBlackを参考にしている)
プレイヤーの射程は敵よりも短めなのである程度接近する必要がある。
偏差射撃をしてこないので、素早く動き続ければ当たりにくい。
敵に弾を当てたりそばに弾を撃ち込んだりすると敵が怯むので、その隙に突撃する。(PS2のBlackを参考にしている)
近接攻撃を当てると一定時間周囲の敵は射撃してこない。(同士討ちを避けるという名目)
射撃・近接共に攻撃が当たると「興奮ゲージ」が上昇し、攻撃力防御力が上がる。積極的に攻めると有利になる。
「紙回避」で興奮ゲージが大幅にアップ。
ふっとばし攻撃を当てるとふっとんだあと気絶する。一定時間行動不能にしてその間に他の敵に対処させるという形。
接近するまでが戦闘のキモで、接近すればボーナスステージみたいな感じにしたい。
ごり押し突撃ゲームにならないよう、遠距離での牽制を工夫する必要がある。
敵を倒した後「吸精」すると体力が若干回復し強化ポイントが手に入る。うまい人は無視してどんどん進め、へたな人はちまちま吸精してポイントを稼ぐ。
時間と共に吸精ポイントは減るので、ちまちま進む場合でもある程度積極的に戦ったほうが有利になる。
.
○ステージ構成
全20面ほど。
大きく分けて、屋内探索、屋外探索、屋内一本道アリーナ戦闘、屋外敵群戦闘をテーマにして、面ごとの印象を変える。
使いまわしの共用マップを5種類程度作る。各々3回くらい再利用する。建物倒壊等でルートを変えたりして雰囲気を変える。
ワールドマップからミッションマップに移行する形にしたい。面倒ならミッションリスト式。同じミッションに再挑戦してポイントを稼げるようにする。
うまい人なら強化無しの通しクリアできるようにする。
ボスは部位破壊を取り入れたい。
スイッチ床でエレベータ作動などの仕掛けを入れたい。
.
○ステージ案
ザコ大群ステージ。敵は近接、自分は射撃メインで、序盤はこれが続く。少しずつ遠隔敵を増やす。
スナイパー戦。障害物に隠れながらスナイパーのいる塔に近づいていく。途中近接戦闘が発生し、障害物の陰に誘導しつつ戦う形にする。
吹き抜けの大型建造物。ある程度はなれた上方の敵を射撃で狙う面。階上の敵を射撃で倒しつつ昇って行く。
洞窟面。ほぼ一本道で、たまにはさみうちや十字砲火がある。十字路で、後ろ・前・右に敵を出し、左の袋小路に逃げ込んで迎え撃つなど。ホラー感を出し、初回プレイでびっくりさせる。
ザコを生み出す巣を破壊していく面。
足場の狭い崖の道で、対岸の敵を射撃したり道を塞ぐ巨漢敵を近接攻撃で倒したり。
ステージ案とステージ構成を様々に組み合わせて、少ないネタでバリエーションを増やす。
○ボス案
部位破壊の大型歩行キャラ。四肢をにダメージを与えて移動速度を低下させられる。
ザコを投下する空中敵。
逃げ回る敵との廃墟での戦い。経路探索はめんどくさいので、高速大ジャンプ(壁すり抜け)で一気に離脱させてから再配置。
ザコと戦いつつ特殊オブジェクトを破壊していく。
.
これらのアイデアを半分でも入れられたらいいなぁと思うのだった。