Unity

Collider Materialのbouncinessをスクリプトから変更する




こういったスロープ状のオブジェクトの上にボールを転がす時

Bouncinessを0.9くらいに設定しているとスロープ内で反射しまくります。

スロープの上にいるときはBouncinessを0にして反射させずにスルスルとボールを転がしたいのですよ。

反射させないオブジェクト用にNotReflecというタグを新しく作ります。

スロープオブジェクトのPlane.002にNotReflecタグを設定。

    
void OnCollisionEnter(Collision col)
    {
        //反射させない処理
        if (col.gameObject.tag == "NotReflec")
        {
            this.GetComponent<SphereCollider>().material.bounciness = 0;
            return;
        }
        //反射させない処理
    }

スクリプトの衝突判定処理内に上記を追加。

実行してみるとスロープの壁に反射せずにスルスルとボールが上がっていきます。やった^^

注意点としてはこの方法では反射させない障害物にぶつかっても
最初の1回は反映されずに反射してしまうようです。
2回目の衝突からは反映されて反射しなくなるみたい。

それと一度bouncinessを0にするとその後もずっと0のままなのでスロープを抜けるとまた0.9にしたい。

    void OnCollisionEnter(Collision col)
    {
        this.GetComponent<SphereCollider>().material.bounciness = 0.9f;

        //反射させない処理
        if (col.gameObject.tag == "NotReflec")
        {
            this.GetComponent<SphereCollider>().material.bounciness = 0;
            return;
        }
        //反射させない処理
    }

最初の行で0.9fに設定しておいてNotReflecタグの時だけ0にするようにしました。

するとスロープを抜けたら壁に反射するようになりました!

最短4週間!オリジナルのゲームアプリを開発しよう!




-Unity

© 2024 Bou.O The World Powered by AFFINGER5