unity1weekとroom6gamejam
何処にも行けないGWを目前にunity1weekが始まりました。今回のお題は「密」だそうで、毎年話題の「今年の漢字」並みに世相を反映したお題となっています。これと同時開催として毎年恒例となっていたroom6さん主催のroom6gamejamも始まっています。
同じ作品でどちらのイベントにもエントリー可能だそうですが、ちょっとだけ受付期間や評価方式が異なるので注意が必要です。
■Unity1Week
- 受付期間: 2020/04/27 00:00 ~ 2020/05/03 20:00 (遅刻可)
- お題:『密』
- 投稿時のハッシュタグ:『unity1week』
- 評価期間: 2020/05/04 ~ 2020/05/10
- 評価方式:プレイヤー投票による採点方式
- イベントURL: https://unityroom.com/unity1weeks
■room6GameJam2020
- 受付期間: 2020/04/27 00:00 ~ 2020/05/06 23:59
- お題:なし
- 投稿時のハッシュタグ:『room6gamejam2020』
- 評価期間: 2020/05/07 ~ 5月下旬
- 評価方式:プレイヤー投票、および各審査員による副賞
- イベントURL: https://www.room6.net/room6gamejam2020
一応、前回の記事のネタの為にちょっとだけ作ったプロジェクトがあるので私も参加する予定です。
まぁどちらにも参加できれば良いのですが、期限に間に合わない&お題に沿ったものになりそうもない、ということで『room6gamejam2020』だけのエントリーになるかと、、、そちらの期限には間に合うように頑張りたいと思います。
と、いうわけで・・・
前回の記事でも紹介したようにエントリー用の作品はキャラクターがジャンプしながらステージを進んでいくアクションゲームになる予定なのですが、そこ、良くあるやつって言わない、個人的な挑戦としてキャラクターの動作にRigidbodyの物理演算を活用することに取り組んでいます。
これまでは直にtransformの位置や角度を変更してキャラクターを動かしていたのですが、それを今回は物理演算で実現する為、こちらの意図とは違う動作になったりすることが良くあります。
直近でぶつかった問題が・・・
斜面を全く登れない・・・
最初はジャンプ時に力を加える方向が問題なのかと思ってプログラムのロジックを見直したりしたのですが全然直らず。
色々試した末、キャラクターの動きを良く良く見直して、ジャンプの立ち上がりの時にキャラクターのColliderが斜面のColliderに引っ掛かっているのではないか、という結論になりました。
Colliderの設定
キャラクターのColliderには複数のColliderでその形が簡略化したものになるよう設定しています。
キャラクターのCollider
分からいずらいのでColliderだけにするとこんな感じ、どっかのアニメの潜水艦みたいな形になっています。
どうやら、この胴体部分のCapsuleColliderがジャンプの立ち上がりの時に斜面に引っ掛かって、ジャンプしようとしても直ぐに斜面に戻されて全然前に進めない状態になっているようで、つまりはジャンプ開始直後はこのCapsuleColliderを無効化しないといけない、ということになります。
早速、Google先生に尋ねてみると、Colliderの有効/無効の設定は通常、Inspector上のチェックボックスによる設定で行いますが、スクリプトではColliderコンポーネントのenabledオプションの値を変更することで、設定の変更を行うことができることが分かりました。
private Collider[] CapCollArray; void OnEnable() { // CapselColliderの取得 CapCollArray = this.GetComponents<CapsuleCollider>(); } void Enabled_Collider() { // Colliderを有効化する foreach (CapsuleCollider col in CapCollArray) { col.enabled = true; } } void Disabled_Collider() { // Colliderを無効化する foreach (CapsuleCollider col in CapCollArray) { col.enabled = true; } }
CapsuleColliderは複数あるのでGetComponentsメソッドで配列として取得します。
ジャンプ開始時にDisabled_ColliderをコールしてColliderを無効化、タイマー処理で一定時間、Enabled_ColliderによりColliderを有効化するようにしました。
結果・・・
ちゃんと斜面を登れるようになりました。めでたし、めでたし。。。
後は完成させるだけですねぇ・・・(遠い目)