原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【雑記】作りたかったゲームと作ったゲーム:GameJamを振り返る(実装編)

話題と拡散

「たった1人の投稿が大きな輪に広がって」というSNS神話を信じている純粋な皆さんこんにちは。私はこれまでブログもTwitterもそこまで積極的に利用していませんでしたが、事前の話題も仕掛けもない投稿がバズってTV等に取り上げられて彼方此方のマスコミから取材を受けるようなるとか、そんな幸運が転がっているなのらもっと積極的にSNSを利用していこうと思いました。嘘だけど。

 

前回からの続き

さて、前回のブログではGW中に製作したGameJam投稿作品『切磋琢磨するしかない!』について企画からコンセプト決めまでの過程を記事に書きました。

 

【雑記】作りたかったゲームと作ったゲーム:GameJamを振り返る(その1) - 原カバンは鞄のお店ではありません。

 

『room6GameJam2020』兼『おうちGameJam』投稿作品はこちら

unityroom.com

 

『切磋琢磨するしかない!』は螺旋状のステージをジャンプだけで進んでいくアクションゲームとなっています。

今回はこのゲームを作るにあたって苦労した点や工夫した点についてを実装編として記事に記したいと思います。

 

物理演算で公転させる

『切磋琢磨するしかない!』ではステージが螺旋状となっている為、プレイヤーのキャラクターは当然ながら螺旋の中心を軸とした公転となるように動かさないといけません。

Transformを使用した公転運動はRotateAroundメソッドがUnityで用意されていますが、今回の場合は物理演算を活用するのでRotateAroundではなく、Rigidbodyに力を加える方向を調整して公転運動を実現しています。

 

これについてはブログでも以前記事にしました。

【Unity】RigidBodyを使って螺旋階段を登りたい - 原カバンは鞄のお店ではありません。

 

要は『円軌道の接線方向に力を加え続ける』ことで公転運動を実現しているのですが、キャラクターは止まっている場合もあるのでジャンプしている間だけ『接線方向に力を加える』ということになります。

しかし、接線方向に加える力はForceMode.Force(継続的な力)となるので、この力を掛けづけるとキャラクターの挙動しては移動方向へ引っ張られたような挙動になります。

 

試しに、ジャンプ開始時にForceMode.Impulse(瞬間的な力)を加えただけの場合と、ジャンプ中にForceMode.Forceで力を加え続けた場合の動作を比較すると、キャラクターのジャンプ軌道は放射線より不自然に伸びた軌道になりちょっと違和感を覚えます。

 

ジャンプ開始時のみ

f:id:Karvan:20200519214355g:plain

 

ジャンプ中に力を加えた場合

f:id:Karvan:20200519214446g:plain

 

この為、接線方向に力を加えるのはジャンプ中全てではなく、ジャンプ開始から一定時間だけ、としています。

 

ここで問題が

実は『円軌道の接線方向』というのは『円軌道から離れる方向』となるので、接線方向に力を加えるのを一定時間だけとすると、その後は着地するまで円軌道から離れていき、どうしても公転運動の円周が徐々に大きくなる運動となってしまいます。

 

図にするとこんな感じ

f:id:Karvan:20200519214605p:plain

 

この為、『切磋琢磨するしかない!』ではジャンプ中に加える力は『円軌道の接線方向ベクトル』に『軌道を戻す方向ベクトル』を加えた方向に力を掛けるようにしています。

 

f:id:Karvan:20200519214710p:plain

 上の図のオレンジの方向へ力を掛ける

 

その他の調整

キャラクターの挙動を物理演算に任せると言う事で、上記の対応に加えてジャンプ時に加える力や角度、地面との反発係数や摩擦係数だったりのパラメータを色々変えながらテストが必要でした。

 

その中で分かった事

  • ジャンプを繰り返すなら、着地のタイミングでrigidbodyのvelocityを0にした方が良い
  • オブジェクトの重心はRigidbodyのcenterOfMassで変えることができる

他にも色々な修正を加えて納得できる挙動になるまで時間がかかりました。

 

また、当初はキャラクターが画面の中央に来るように設定していたのですが、足場が螺旋状(円筒状)に並んでいるステージ構成上、どうしても移動先の地点が見ずらくなる、また、前(右)へしか進まない為、自機より後ろの領域が多い(=プレイヤーにとって無意味な領域が増える)と言う事に気づいて、目標地点が中央に来るようなカメラ位置に変更しました。

 

自機が中央の場合

f:id:Karvan:20200519214850p:plain

 

左寄りに修正

f:id:Karvan:20200519214926p:plain

こっちの方がプレイしやすいし、無駄がない

 

以降の作業はバタバタ

上記の色々な調整に時間を取られたせいでroom6gamejam2020の締め切りが5/6なのに、2日前になってやっとステージ作成に取り掛かる状態、しかも最終日の5/6はなぜか出勤日だったので実質的な締め切りは5/5、「あー、終わらないかも」と半分絶望的な気分で作業を進めていました。

 

まぁ、ステージの制作はギミックをステージ上に並べるだけだったのですが、その配置でクリア可能なのか設置する毎にテストプレイで確認する必要があって思った以上に作業が進まない、しかもSEやBGM関連の処理も全然未実装だったので本当にギリギリの作業でした。

それも日が変わって最終日の深夜になってやっと全作業が終了。なんとか期限内にunityroomへ投稿することができました。どうもありがとう。

 

作業を終えて・・・

振り返ってみると、今回は物理演算を使ったゲームを作るのが初めてと言う事もあって、色々な調整に時間が掛かったという印象です。

作品の出来自体は自分的には満足なのですが、ゲームバランスの考慮等々の配慮が足らなかったせいなのか評価はイマイチで、閲覧数(=プレイ数)もなかなか増えずにいます。残念。

 

『おうちGameJam』では実際にプレイ実況を配信されるそうなので、そちらの反応も楽しみにしつつ、今回の反省点を次作以降に繋げていければなぁ、と思っています。

 

『切磋琢磨するしかない!』では新たに物理演算に関するアセットを購入して使用しているので、そちらに対する使い方、感想等は次回の記事で。

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。