【Unity, Collider】衝突したオブジェクトをタグで選択してマテリアルを変更する

Unity

はじめに

2018/11/25 開催の「1 Week Game JAM」でミニゲームを作りました。

このゲームではボールと足場のCubeが衝突するとCubeのマテリアルを変更する処理を導入しています。

この記事ではオブジェクト同士の衝突判定を取得する方法を紹介します。

 

 

 

Materialを用意する

Assetsフォルダ内にResourcesフォルダを作成し、その中にMaterialsフォルダを作成してください。

Materialsフォルダの名前はなんでもいいですが、Resourcesフォルダは特別なフォルダなので、必ず「Resources」と命名してください

 

右クリック>Create >Material よりマテリアルを作成してください。

今回は、「CubeMaterial」と「SphereMaterial」の二つを使用します。

 

マテリアルをクリックして、インスペクターからShaderの設定を、「Legacy Shaders > Diffuse」に変えてください。

 

ここで、Main Color やテクスチャの画像を変更できます。

テクスチャを変更する際は、右上の黒枠内に画像をドラッグ&ドロップしてください。

 

もし、この段階でSphereやCubeのマテリアルを変更したい場合は、ヒエラルキーのSphereをクリックし、インスペクター状でマテリアルをドラッグ&ドロップしてください。

 

 

 

 

Colliderで衝突判定を付与する

衝突判定にはColliderコンポーネントを使用します。

詳しい衝突判定の説明は、以下のページを参照してください。

 

Colliderを利用するために、インスペクター上でSphereに RigidbodyをAdd Compornentしてください。

また、以下のコードを記入したスクリプトをSphereにアタッチしてください。

 

materials = Resources.LoadAll<Material>(“Materials/”); でMaterialsフォルダ内に入っているマテリアルを全て取得します。

ただし、フォルダ内の並び順で取得するので、順番を変更したいときは、名前を「0」や「1」のようにナンバリングしてください。

 

スクリプトをアタッチした方のオブジェクトのマテリアルを変更するときは、

gameObject.GetComponent<Renderer>().material = materials[0];

 

衝突された方をオブジェクトのマテリアルを変更するときは、

collision.gameObject.GetComponent<Renderer>().material = materials[1];

 

と記入してください。

 

これで実行すると、SphereがMinusマテリアル、CubeはPlusマテリアルがセットされます。

 

 

 

Tagを設定して選択的にMaterialを変更する

ヒエラルキー上のSphere をクリックしてインスペクターを開き、上部にあるTag をクリックしてAdd Tagを選択してください。

 

TagsのList is Emptyの右下に+マークがあるのでクリックし、New Taf Name に Sphere と Cube を追加してSave してください。

 

 

これでオリジナルタグが使えるようになったので、Sphere に Sphere タグを、CubeにCubeタグをセットしてください。

これでタグの設定は終了です。

 

スクリプトのコードを以下のように書き換えてください。

これで、Cubeタグが付いているCubeと接触した場合のみ、マテリアルが変化します。

 

 

 

関連記事

 

 

 

忙しい人のためのUnity入門講座へ戻る

 

タイトルとURLをコピーしました