この解説は
Unityのサイトに昔からあるチュートリアルに、以下があります。
「はじめてのUnity」(旧)
http://tutorial.unity3d.jp/archive/my-first-unity/
これを独自にC#化したものをベースとしています。以下を
この解説は以下の段階があります、前の内容を実行した上でのものとして参照して下さい。現時点(20151026)では、新しい「はじめてのUnity」の玉転がしゲームが公開されています。本サイトのブロック崩しと併せて学習すると広がりがあり、初期の学習にはとても有効です。
- [超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(1)ステージ配置
- [超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(2)色を変える
- [超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(3)動くボール
- [[超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(4)ラケットを動かす]
(http://qiita.com/JunShimura/items/5fac20966bba6b223427) - [超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(5)消えるブロック
- [超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(6)ブロックを手作業で並べる
消えるブロック
「ブロック崩し」ですから、ブロックが在って消えないとはじまりません。ブロックを配置しBallと衝突すると消えるようにしましょう。
ブロックを配置する
先ずはブロックを用意します。
上に在るメニューの[GameObject]>[3D Object]>[Cube]を選んで下さい。

大きさを考える
次に、どう配置するかを考えます。今回のステージの枠の内側は、TopWallの幅と一致していますから、Scaleで10の幅が在ります。

ここにきれいにBlockを並べたいので、整数で割り切れる大きさが望ましいことになります。ここでは判りやすい大きさとして、横の幅を2とし、横に5個を並べることにします。縦はとりあえず、そのまま1にしておきましょう。

位置を考える
Blockをステージの左上に一つ、配置してみましょう。このとき、Blockの座標をいくつにするかを考えます。中心点は以下になっています。
- 左右の中心点は、幅=
2なので左から1のところ - 上下の中心点は、高さ=
1なので0.5のところ
ステージの端の角は、(-5,0,9.5)のところに在ります。ここにBlockをぴたりとおさめるには、その座標から中心点のオフセットを加算したところを、TransformのPositionにすればいいことになります。
以上から、設定する値は、以下になります。
| 座標 | 値 |
|---|---|
Position.x |
-5+1=-4 |
Position.y |
0 |
Position.z |
9.5-0.5=9.0 |
Ballと衝突すると消えるようにする
消えるようにするには、当たり判定で相手がballのときに消える、という動作になります。相手を判断する方法と、消える部分の制作をします。
BallにTagを入れる
当たり判定で反応したときに、その当たった相手が何かを判定するのによく用いられるのがTagです。TagはProject毎に設定できる、GameObjectに付与するキーワードです。同じTagを複数のGameObjectに付与することが可能です。
先ず、Tagの一覧にBallを追加します。
[Inspector]タブのTagのところでUntaggedをクリックして出るプルダウンから、Add tag...を選びます。

出てきたTagの一覧の左にある'+'をクリックし、出てきた空欄にBallを追加します。
これでBallというTagが使えるようになりました。
Ballを再度選択します。その状態で[Inspector]タブのTagのプルダウンを選ぶと、Ballが現れるのでそれを選択します。

BlockがBallと当たると消える処理の追加
上記のTagを用いて、Block側で当たり判定を用意し、Ballとの当たり判定の処理を加えます。
Block.csを作成しコンポーネントに追加
Blockを選択した状態で、インスペクターの一番下にある[Add compornent]をクリックして、Scriptアセットを作成、追加します。
- ファイル名は
Blockと入力してください。 - ファイル形式は
csを選びます。
[Create and Add]のボタンを押すと、Block.csが[Asset]タブにできています。

衝突判定の処理を入れる
Block.csをダブルクリックし、編集します。
using UnityEngine;
using System.Collections;
public class Block : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnCollisionEnter(Collision collision) {
//衝突判定
if (collision.gameObject.tag == "Ball") {
//相手のタグがBallならば、自分を消す
Destroy(this.gameObject);
}
}
}
内容を解説します。
code |
説明 |
|---|---|
void OnCollisionEnter(Collision collision) { |
Scene中のGameobjectでColliderが有効な物同士が衝突すると呼び出される関数です。ぶつかった相手の情報はcollosionに入ってきます。つまり、この関数の中ではcollisionを調べると、相手が判ります。 |
if (collision.gameObject.tag == "Ball") { |
相手のgameObjectの持っているtagの内容が"Ball"かを確認します。 |
Destroy(this.gameObject); |
Destroy関数は、引数で指定されたGameObjectをSceneから消去します。 |
くわしくは、以下を参考にして下さい。
- Unity - スクリプトリファレンス OnCollisionEnter http://docs.unity3d.com/ja/current/ScriptReference/MonoBehaviour.OnCollisionEnter.html
- Unity - スクリプトリファレンス GameObject.tag http://docs.unity3d.com/ja/current/ScriptReference/GameObject-tag.html
これで衝突すると消えるBlockになりました。Blockになかなか衝突しない場合は、実行中にBlockを[Inspector]タブでTransformの値を変えて、ぶつかりやすくしてみましょう。
まとめ
- 衝突は
SceneにあるColliderコンポーネント同士で検出し、OnCollisionEnterが呼び出される - 衝突した相手を判定するには、
tagで判定する方法がある -
Destoroy関数で、Scene中のgameObjectを消すことが出来る
この解説は以下の段階があります、前の内容を実行した上でのものとして参照して下さい。
- [超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(1)ステージ配置
- [超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(2)色を変える
- [超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(3)動くボール
- [[超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(4)ラケットを動かす]
(http://qiita.com/JunShimura/items/5fac20966bba6b223427) - [超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(5)消えるブロック
- [超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(6)ブロックを手作業で並べる






