話題と拡散
「たった1人の投稿が大きな輪に広がって」というSNS神話を信じている純粋な皆さんこんにちは。私はこれまでブログもTwitterもそこまで積極的に利用していませんでしたが、事前の話題も仕掛けもない投稿がバズってTV等に取り上げられて彼方此方のマスコミから取材を受けるようなるとか、そんな幸運が転がっているなのらもっと積極的にSNSを利用していこうと思いました。嘘だけど。
前回からの続き
さて、前回のブログではGW中に製作したGameJam投稿作品『切磋琢磨するしかない!』について企画からコンセプト決めまでの過程を記事に書きました。
【雑記】作りたかったゲームと作ったゲーム:GameJamを振り返る(その1) - 原カバンは鞄のお店ではありません。
『room6GameJam2020』兼『おうちGameJam』投稿作品はこちら
『切磋琢磨するしかない!』は螺旋状のステージをジャンプだけで進んでいくアクションゲームとなっています。
今回はこのゲームを作るにあたって苦労した点や工夫した点についてを実装編として記事に記したいと思います。
物理演算で公転させる
『切磋琢磨するしかない!』ではステージが螺旋状となっている為、プレイヤーのキャラクターは当然ながら螺旋の中心を軸とした公転となるように動かさないといけません。
Transformを使用した公転運動はRotateAroundメソッドがUnityで用意されていますが、今回の場合は物理演算を活用するのでRotateAroundではなく、Rigidbodyに力を加える方向を調整して公転運動を実現しています。
これについてはブログでも以前記事にしました。
【Unity】RigidBodyを使って螺旋階段を登りたい - 原カバンは鞄のお店ではありません。
要は『円軌道の接線方向に力を加え続ける』ことで公転運動を実現しているのですが、キャラクターは止まっている場合もあるのでジャンプしている間だけ『接線方向に力を加える』ということになります。
しかし、接線方向に加える力はForceMode.Force(継続的な力)となるので、この力を掛けづけるとキャラクターの挙動しては移動方向へ引っ張られたような挙動になります。
試しに、ジャンプ開始時にForceMode.Impulse(瞬間的な力)を加えただけの場合と、ジャンプ中にForceMode.Forceで力を加え続けた場合の動作を比較すると、キャラクターのジャンプ軌道は放射線より不自然に伸びた軌道になりちょっと違和感を覚えます。
ジャンプ開始時のみ
ジャンプ中に力を加えた場合
この為、接線方向に力を加えるのはジャンプ中全てではなく、ジャンプ開始から一定時間だけ、としています。
ここで問題が
実は『円軌道の接線方向』というのは『円軌道から離れる方向』となるので、接線方向に力を加えるのを一定時間だけとすると、その後は着地するまで円軌道から離れていき、どうしても公転運動の円周が徐々に大きくなる運動となってしまいます。
図にするとこんな感じ
この為、『切磋琢磨するしかない!』ではジャンプ中に加える力は『円軌道の接線方向ベクトル』に『軌道を戻す方向ベクトル』を加えた方向に力を掛けるようにしています。
上の図のオレンジの方向へ力を掛ける
その他の調整
キャラクターの挙動を物理演算に任せると言う事で、上記の対応に加えてジャンプ時に加える力や角度、地面との反発係数や摩擦係数だったりのパラメータを色々変えながらテストが必要でした。
その中で分かった事
- ジャンプを繰り返すなら、着地のタイミングでrigidbodyのvelocityを0にした方が良い
- オブジェクトの重心はRigidbodyのcenterOfMassで変えることができる
他にも色々な修正を加えて納得できる挙動になるまで時間がかかりました。
また、当初はキャラクターが画面の中央に来るように設定していたのですが、足場が螺旋状(円筒状)に並んでいるステージ構成上、どうしても移動先の地点が見ずらくなる、また、前(右)へしか進まない為、自機より後ろの領域が多い(=プレイヤーにとって無意味な領域が増える)と言う事に気づいて、目標地点が中央に来るようなカメラ位置に変更しました。
自機が中央の場合
左寄りに修正
こっちの方がプレイしやすいし、無駄がない
以降の作業はバタバタ
上記の色々な調整に時間を取られたせいでroom6gamejam2020の締め切りが5/6なのに、2日前になってやっとステージ作成に取り掛かる状態、しかも最終日の5/6はなぜか出勤日だったので実質的な締め切りは5/5、「あー、終わらないかも」と半分絶望的な気分で作業を進めていました。
まぁ、ステージの制作はギミックをステージ上に並べるだけだったのですが、その配置でクリア可能なのか設置する毎にテストプレイで確認する必要があって思った以上に作業が進まない、しかもSEやBGM関連の処理も全然未実装だったので本当にギリギリの作業でした。
それも日が変わって最終日の深夜になってやっと全作業が終了。なんとか期限内にunityroomへ投稿することができました。どうもありがとう。
作業を終えて・・・
振り返ってみると、今回は物理演算を使ったゲームを作るのが初めてと言う事もあって、色々な調整に時間が掛かったという印象です。
作品の出来自体は自分的には満足なのですが、ゲームバランスの考慮等々の配慮が足らなかったせいなのか評価はイマイチで、閲覧数(=プレイ数)もなかなか増えずにいます。残念。
『おうちGameJam』では実際にプレイ実況を配信されるそうなので、そちらの反応も楽しみにしつつ、今回の反省点を次作以降に繋げていければなぁ、と思っています。
『切磋琢磨するしかない!』では新たに物理演算に関するアセットを購入して使用しているので、そちらに対する使い方、感想等は次回の記事で。