#この解説は
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)ブロックを手作業で並べる