ちびのはてな

「ちび(猫)」と「キノコ」から生まれた「ちびキノコ」。ドラゴンボール最強!純粋なサイヤ人のように生きたいと思っているモノ作りを楽しむ人です。IT技術で少しでも多くの人が笑顔になってくれたらいいなと。

Unity - ブロック崩しチュートリアルで学んだこと

はじめに

本記事は自分の理解のために雑にまとめたもの。

参考 URL

http://tutorial.unity3d.jp/archive/my-first-unity/
http://baba-s.hatenablog.com/entry/2018/01/16/212800
http://baba-s.hatenablog.com/entry/2018/01/16/212900
http://baba-s.hatenablog.com/entry/2018/01/16/213000

第一回

まずは、各オブジェクトの大きさや配置などの設定。
パドルの操作とボールの制御を行う。

  • Cube を使って豆腐を「直方体」にして壁を作る
    • GameObject > 3D Object > Cube
  • インスペクタビューの Transform を使って位置や大きさの調整
    • Position, Rotation, Scales

カメラ

  • シーンビューのカメラの向きを変更する
    • シーンビューのカメラだけだとゲームビューは変わらない
    • Cube と同じように Transform する

自機

  • 壁と同じく Cube を使って自機となる「直方体」を作成&配置

パドルを操作できるようにする

  • C# Script を追加する
    • Assets > Create > C# Script
public class PaddleController : MonoBehaviour
{
    public float accel = 1000;

    private void Update()
    {
        var force = transform.right * Input.GetAxisRaw("Horizontal") * accel;
        GetComponent<Rigidbody>().AddForce(force, ForceMode.Impulse);
    }
}

// Input.GetAxisRaw("Horizontal") により、
// 水平方向 (Horizontal) のユーザー入力を -1 ~ 1 の正規化された範囲で取得している
// ユーザー入力はキーボードでもジョイスティックでも OK

// ForceMode.Impulse は質量を考慮して動作に反映される
  • C# Script をドラッグ&ドロップで Paddle に設定する
    • Add Component した状態と同じになる。

パドルに物理特性を追加する

  • インスペクタビューから Add Component を押下して Rigidbody を追加する
    • ボール(Sphere)Regidbody という機能を追加した感じ
  • Regidbody のパラメータを設定する

ボール

  • ボールも同じノリで Sphere を選択して作成&配置
    • GameObject > 3D Object > Sphere

ボールに物理特性を追加する

  • インスペクタビューから Add Component を押下して Rigidbody を追加する
    • ボール(Sphere)Regidbody という機能を追加した感じ
  • Regidbody のパラメータを設定する

ボールに初速度を与える

  • C# Script を追加する
    • Assets > Create > C# Script
  • GameObject 起動時に速度を与える
public class BallController : MonoBehaviour
{
    public float speed = 10;
    
    private void Start()
    {
        var force = (transform.forward + transform.right) * speed;
        GetComponent<Rigidbody>().AddForce(force, ForceMode.VelocityChange);
    }
}

// transform.forward はボールの正面 (Z方向) を示す単位ベクトル
// transform.right はボールの右方向 (X方向) を示す単位ベクトル
// これらを足して Speed を掛け合わせることで右斜めのベクトルを得ている
  • C# Script をドラッグ&ドロップで Sphere に設定する
    • Add Component した状態と同じになる

ボールをバウンドさせる

今のままだとボールが跳ね返らない

  • Physic Material をボールに設定する
    • Assets > Create > Physic Material
    • Physic Material は物理パラメータを管理するもの

第二回

ターゲットとなるブロックを作成する

ブロックの作成と配置

  • 壁と同じノリで Cube を追加して Block という名前にする
  • C# ScriptBlock に追加する
public class BlockController : MonoBehaviour
{
    private void OnCollisionEnter(Collision collision)
    {
        Destroy(gameObject);
    }
}

// OnCollisionEnter は、Rigidbody で動作しているオブジェクトが接触したときに呼ばれる処理
// 引数の collision には接触対象オブジェクトが入っている

// Destroy メソッドで gameObject、
// つまりコンポーネントを実行したオブジェクトつまり接触したブロックを削除している

Block を複製する

  • Empty なゲームオブジェクトを作成して Blocks という名前にする
    • GameObject > Create Empty
    • 今回は、ディレクトリ的(グループ化)な扱いに利用する
  • BlocksBlock をドラッグ&ドロップする
  • Block を選択して Ctrl + D で複製
  • 複製した Block それぞれにX座標を設定する
  • Blocks には Z座標を設定して全ての Block を制御する

Blocks を複製する

  • 更に Blocks を複製して5行6列なブロック群を作る
    • 複製した Blocks にはそれぞれZ座標を設定する

ゲームオーバーの実装

  • 下側の壁に C# Script を追加する
public class BottomWallController : MonoBehaviour
{
    private void OnCollisionEnter(Collision collision)
    {
        Destroy(collision.gameObject);
    }
}

// ブロックの時とは異なり、接触対象の gameObject をデストロイしている
// つまり、ボールをデストロイしている

第三回

サウンドを付ける

チュートリアル用の *.unitypackage をインポートする

ダウンロードした sound.unitypackage には、BGM や SE が格納されているので、 Custom Package としてインポートする。

SE の実装

  • C# Script を追加する
public class HitPlaySound : MonoBehaviour
{
    public AudioClip sound;

    private void OnCollisionEnter( Collision collision )
    {
        AudioSource.PlayClipAtPoint( sound, transform.position );
    }
}

// AudioClip は音を登録する変数
// AudioSource.PlayClipAtPoint にて音を再生
// 音の発生源は第二引数で指定

SE を設定する

  • 壁の GameObject を選択して、上記で追加したスクリプトをインスペクタビューの Add Component へドラッグ&ドロップ
  • 先ほどインポートした壁の音となる SE ファイルを C# ScriptAudio Clip へドラッグ&ドロップ

ブロック

  • ブロック全ての GameObject を選択して、同様にスクリプトをインスペクタビューの Add Component へドラッグ&ドロップ
  • 先ほどインポートした壁の音となる SE ファイルを C# ScriptAudio Clip へドラッグ&ドロップ

パドル

  • 上記に同じ

下側の壁

  • 4つの壁のうち下側の壁にはゲームオーバー用の SE を設定する

BGM の設定

  • Main Camera に BGM を設定する
    • 選択状態にして Add ComponentAudio Source を追加する
    • Audio Clip に BGM もドラッグ&ドロップ
    • 音がデカイ場合は Volume で調整

ブロックの色を変更

  • Material を作成する
    • Assets > Create > Material
  • Mterial のカラーを設定する
  • 全てのブロックを選択して上記で作成した Material をインスペクタビューへドラッグ&ドロップ