Destroyで一瞬にしてデストロイしちゃう
Destroyでオブジェクトを消す方法は分かったけれども、テストプレイを始めた瞬間にオブジェクト消失…。えっ、まだ当たってませんけど?覇気ですか?覇気で消し飛んだんですか?と言いたくなるところをぐっとこらえてプログラミングを修正しよう!
手順
- ぶつかる側のオブジェクトを選択
- Rigidbodyを追加する
- インスペクターウインドウの一番上辺りにタグというものがあるので、そこに分かりやすい名前を付けておく(例:enemyなど)
- スクリプトを書く
ぶつかる方のオブジェクトに名前を付けておいて、ぶつかり判定の時に名前で判断する、って感じの流れですね。
ぶつかる側のオブジェクトを選択
ぶつかったら消したい。この場合はぶつかって来る側を判定する必要があるので、ぶつかる側にタグという名前的なものを付ける必要がある。ひとまずはぶつかる側としたいオブジェクトを選択しよう。
Rigidbodyを追加する
インスペクター画面の最下部に「コンポーネントを追加」ボタンがあるので、それをクリック。
中から「Rigidbody」というものを選択。これは物理演算をしてくれる優れもので、これを設定していないとぶつかり判定をしてくれない~と思っておこう。
インスペクターウインドウの一番上辺りにタグというものがあるので、そこに分かりやすい名前を付けておく(例:enemyなど)
するとインスペクターウインドウが開くと思う。その一番上あたりにこのようなものがある筈。
このタグのUntaggedのところをクリックするとプルダウンが出て来る。その一番下にある「タグを追加」を押して…
プラスを押そう。
自分が付けたいタグを生成!そしてSaveしよう!セーブ!
そしたらその新しいタグが出来ているので、ぶつかりたいオブジェクトを再び選択し、ヒエラルキー画面の上の方にあったタグで先ほど追加したものを選択しよう。
スクリプトを書く
大事なのは、このスクリプトは消える方のオブジェクトに対して書くスクリプトだということ。さっきまでは消す方を設定していたので頭の中がごっちゃごちゃになっちゃうけれど。
書く場所はvoid Startでもvoid Updateでもない場所
注意したいのはこのプログラムを書く場所。どこでもないところに書く必要がある。
public class プログラム名 : MonoBehaviour
{
void Start()
{}
void Update()
{}
//書く場所に注意!!書くのはここだ!!
条件やスクリプトはここに書くのだ~!
プログラム
public class プログラム名 : MonoBehaviour
{
void Start()
{}
void Update()
{}
private void OnCollisionEnter(Collision collision) //ぶつかったら消える命令文開始
{
if (collision.gameObject.CompareTag("Tagutukeru"))//さっきつけたTagutukeruというタグがあるオブジェクト限定で~という条件の下
{
Destroy(gameObject);//このゲームオブジェクトを消滅させる
}
}
これで覇気で滅することはなくなりました。は~スッキリ★