Unityに関連する記事です

学習内容


 ここでは、スクリプトを利用して、コライダーのオンオフ切り替えテストを行います。

 コライダーはオブジェクトに衝突用の当たり部分を与えます。
コライダーを持つオブジェクト同士がぶつかると、そこで衝突が発生します。(いわゆる、当たり判定と呼ばれるものです。)
 
 この機能はゲームオブジェクトにアタッチされている各コライダー系のコンポーネントによって付与されます。

 今回の学習では、スクリプトを利用して、コライダーコンポーネントのスイッチのオンオフを切り替える制御を実装し、制御できているかをテストします。


スクリプトを作成する


 それでは先ほどのRendererTestとおなじように、Projects内のAsset → Scripts をダブルクリックして開き
その中で Create → C# Scriptを選択します。名前はColliderTestにします。

 ColliderTestファイルをダブルクリックしてVisual Studioを開いて、コードを書いていきましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// コライダーのテスト用クラス
/// コンポーネントの取得とオン/オフ、コンポーネントの持つプロパティの変更を行う
/// </summary>
public class ColliderTest : MonoBehaviour
{    
    [Header("コライダー(接触判定)のオンオフ用")]
    public BoxCollider boxCollider;

    void Start()
    {

    }

    void Update()
    {
        // ボタンを押す度にBoxColliderコンポーネントの状態をオン・オフ切り替える
        if (Input.GetKeyDown(KeyCode.A)) {

            // [変数名.enabled]で現在のコンポーネントの状態を確認できる。trueならオンの状態
            if (boxCollider.enabled == true) {
                // オフに切り替える
                boxCollider.enabled = false;
            } else {
                // ifの条件でないなら、こちらの処理を実行 = falseの場合
                boxCollider.enabled = true;
            }
        }
    }
}


 コードを書き終わったら、読み直すくせをつけましょう。

 スクリプトをセーブ(ctrl + Shift + s キー)し、コンパイルエラーがなければ、このファイルもCubeオブジェクトにアタッチしましょう。
アタッチ後はCube のインスペクターを確認し、ちゃんとColliderTestコンポーネントが追加されているか、確認します。
もしもアタッチできないようであれば、Consoleを確認しましょう。エラーが出ている可能性が高いです。


ゲームを実行して確認する


 無事にアタッチができたら、ゲームを実行し、設定したボタンを押してみましょう。
ヒエラルキーにある Cube ゲームオブジェクトを選択しておくことで、インスペクター上から、BoxCollider コンポーネントのオンオフの制御切り替えが確認ができると思います。

 BoxCollider コンポーネントの左側にあるチェックボックスのチェックが、入ったり外れたりすれば制御成功です。


スクリプトを書き換えて、同じ処理をスマートに記述する


 スクリプトを修正し、オンオフの切り替え部分を、よりスマートに記述する方法を学習しましょう。

 bool 型の変数に限り、! 演算子を利用することで、現在の状態を反転させる処理を記述できます。
この機能を活用すると、true => false となり、false => true と反転させることが出来ます。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// コライダーのテスト用クラス
/// コンポーネントの取得とオン/オフ、コンポーネントの持つプロパティの変更を行う
/// </summary>
public class ColliderTest : MonoBehaviour
{    
    [Header("コライダー(接触判定)のオンオフ用")]
    public BoxCollider boxCollider;

    void Start()
    {

    }

    void Update()
    {
        // ボタンを押す度にBoxColliderコンポーネントの状態をオン・オフ切り替える
        if (Input.GetKeyDown(KeyCode.A)) {

            // [変数名.enabled]で現在のコンポーネントの状態を確認できる。trueならオンの状態
            //if (boxCollider.enabled == true) {
                // オフに切り替える
                //boxCollider.enabled = false;
            //} else {
                // ifの条件でないなら、こちらの処理を実行 = falseの場合
                //boxCollider.enabled = true;
            //}

            // 1行で書く場合(上記の内容と同じ処理になる)
            boxCollider.enabled = !boxCollider.enabled;
        }
    }
}

 従来の処理はコメントアウトし、新しい処理を1行追加してください。

 スクリプトを修正したらセーブをします。


 ゲームを実行して、いままでと同じように制御が行えるかを確認してください。


コンポーネント内の別の機能を制御する


 スクリプトを修正し、今度は、IsTrigger プロパティについて、ボタンを押すたびにオンオフが切り替わる機能を実装してみましょう。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// コライダーのテスト用クラス
/// コンポーネントの取得とオン/オフ、コンポーネントの持つプロパティの変更を行う
/// </summary>
public class ColliderTest : MonoBehaviour
{    
    [Header("コライダー(接触判定)のオンオフ用")]
    public BoxCollider boxCollider;

    void Start()
    {

    }

    void Update()
    {
        // ボタンを押す度にBoxColliderコンポーネントの状態をオン・オフ切り替える
        if (Input.GetKeyDown(KeyCode.A)) {

            //オンオフに切り替える
            boxCollider.enabled = !boxCollider.enabled;
        }


////* ここから処理を追加します  */////


        // ボタンを押す度にBoxColliderコンポーネントの持つIsTriggerプロパティのオン・オフを切り替える
        if (Input.GetKeyDown(KeyCode.S)) {

            if (!boxCollider.isTrigger) {   // boxCollider.isTrigger == falseと同じ
                // オフならオンにする
                boxCollider.isTrigger = true;
            } else {
                // オンならオフにする
                // if-else文なので、必ずどちらかの分岐に入る
                boxCollider.isTrigger = false;
            }
        }  


////* ここまで  */////


    }
}



ゲームを実行して確認する


 ヒエラルキーにある Cube ゲームオブジェクトを選択して、ゲームを実行します。
指定されたボタンを押すたびに、BoxCollider コンポーネント内にある IsTrigger プロパティのチェックが外れたり、入ったりすれば制御成功です。

コンポーネント内の別の機能を制御する


 スクリプトを修正し、今度は、IsTrigger プロパティについて、ボタンを押すたびにオンオフが切り替わる機能を実装してみましょう。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// コライダーのテスト用クラス
/// コンポーネントの取得とオン/オフ、コンポーネントの持つプロパティの変更を行う
/// </summary>
public class ColliderTest : MonoBehaviour
{    
    [Header("コライダー(接触判定)のオンオフ用")]
    public BoxCollider boxCollider;

    void Start()
    {

    }

    void Update()
    {
        // ボタンを押す度にBoxColliderコンポーネントの状態をオン・オフ切り替える
        if (Input.GetKeyDown(KeyCode.A)) {

            //オンオフに切り替える
            boxCollider.enabled = !boxCollider.enabled;
        }


        // ボタンを押す度にBoxColliderコンポーネントの持つIsTriggerプロパティのオン・オフを切り替える
        if (Input.GetKeyDown(KeyCode.S)) {

            //if (!boxCollider.isTrigger) {   // boxCollider.isTrigger == falseと同じ
                // オフならオンにする
                //boxCollider.isTrigger = true;
            //} else {
                // オンならオフにする
                // if-else文なので、必ずどちらかの分岐に入る
                //boxCollider.isTrigger = false;
            //}     


      boxCollider.isTrigger = !boxCollider.isTrigger;

        }
    }
}

 先ほどと同じように if / else 文の部分をコメントアウトし、新しい処理を追加します。

 isTrigger プロパティも bool 型であるため、このように書き換えることが出来ます。


ゲームを実行して確認する


 ゲームを実行して、今まで通りに IsTrigger プロパティのオンオフが行えるかを確認してください。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます