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

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

【Unity】Colliderをスクリプトから無効化する

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の位置や角度を変更してキャラクターを動かしていたのですが、それを今回は物理演算で実現する為、こちらの意図とは違う動作になったりすることが良くあります。

直近でぶつかった問題が・・・

 

f:id:Karvan:20200428201654g:plain

斜面を全く登れない・・・

 

最初はジャンプ時に力を加える方向が問題なのかと思ってプログラムのロジックを見直したりしたのですが全然直らず。

色々試した末、キャラクターの動きを良く良く見直して、ジャンプの立ち上がりの時にキャラクターのColliderが斜面のColliderに引っ掛かっているのではないか、という結論になりました。

 

Colliderの設定

キャラクターのColliderには複数のColliderでその形が簡略化したものになるよう設定しています。

 

キャラクターのCollider

f:id:Karvan:20200428201856p:plain

 

分からいずらいのでColliderだけにするとこんな感じ、どっかのアニメの潜水艦みたいな形になっています。

f:id:Karvan:20200428201943p:plain

 

どうやら、この胴体部分の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を有効化するようにしました。

 

結果・・・

f:id:Karvan:20200428202310g:plain

ちゃんと斜面を登れるようになりました。めでたし、めでたし。。。

 

 

 

 

後は完成させるだけですねぇ・・・(遠い目)

◇プライバシーポリシー

●個人情報の利用目的

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

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

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

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

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

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

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

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

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

●免責事項

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

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

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

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

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

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