i-school - 異なる色のブロックを作る

設計


 異なる色のブロックを新しく1つ作り、耐久度(破壊しにくさ)を追加してゲーム性を増加させます。
また、すでにあるブロックとは異なる点数を持たせることで、プレイヤーに破壊しにくいが点数が高い、というシステムを提示できます。

実装手順


 以下の手順で実装します。

1.Boxプレファブを利用して、新しいBox(HardBox)を作成してプレファブにします。
2.Destroyerスクリプトを修正します。
3.さらにブロックの種類を増やしたい場合には、1の手順を繰り返します。


1.Boxプレファブを利用して、新しいBox(HardBox)を作成してプレファブにします。


 ヒエラルキー内に、PrefabsフォルダにあるBoxプレファブ・ゲームオブジェクトをドラッグ&ドロップします。
その後、このBoxの名称を変更します。(HardBox、など)
このBoxを元に異なる色のBoxを作成していきます。

 Materialsフォルダの中で右クリックをして、create -> Materialを選択し、好きな名称( HardBoxMaterial など)を付けて新しい色を作成します。
その新しいMaterialをHardBoxにドラッグ&ドロップします。これで色が変更になります。



 HardBoxをヒエラルキーより、Prefabsフォルダにドラッグ&ドロップします。
ヒエラルキーのHardBoxの文字の色が青字になれば無事にプレファブ化できています。
その後、ヒエラルキーより削除してください。




2.Destroyerスクリプトを修正します。


 続いて、Destroyer.csを修正し、耐久力やSEなどを追加します。

Destroyer.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Destroyer : MonoBehaviour {

    public int point;              //  得点
  public GameObject masterObj;  //  "Master"という名前のゲームオブジェクト用

    public int initHp;                 //  耐久力の最大値          <- ここから
    private int currentHp;             //  耐久力の現在値

    public AudioClip hitSE;        //  破壊されない場合のSE    
    public AudioClip destroySE;     //  破壊された場合のSE
 
    void Start () 
    {
        //  Boxの耐久力を初期化します。(現在値=最大値にする)     
        this.currentHp = initHp;                                      
    }

    private void OnCollisionEnter(Collision collision)
    {
        //  ボールが接触するたびに、耐久力を1ずつ減らします。     
        this.currentHp -= 1;

        //  壊れる場合
        if (this.currentHp <= 0)
        {
      //  破壊されるSEを再生
            AudioSource.PlayClipAtPoint(DestroySE, transform.position);
            // 残りのブロック数を1つ減らす
            masterObj.GetComponent<GameMaster>().boxNum--;
            // スコアを加算する
            FindObjectOfType<Score>().AddPoint(point);
            // このゲームオブジェクト(ブロック)を破壊する    
            Destroy(this.gameObject);
        }
        //  まだ壊れない場合
        else
        {
            //  ボールを跳ね返すSEを再生
            AudioSource.PlayClipAtPoint(hitSE, transform.position);     
        }                                                               < - ここまで
    }
}

 publicで用意した変数が多いので、数値の入力やSE音源ファイル用のコンポーネントを追加して、アサインしておいてください。



 また、SEについては、Destroyer スクリプト内に HitPlaySound の機能(破壊時と非破壊時で分岐が発生するため)を追加してありますので、
先程アタッチしたHitPlaySound.csは不要です。Boxよりアタッチを解除しておきます。

 Prefabs内のBoxを選択し、インスペクターのスクリプトを選んでRemove Componentをしてください。
Destroyer スクリプトが付いている他のBoxについても、同じように Remove Compnent をおこなってください。


3.さらにブロックの種類を増やしたい場合には、1の手順を繰り返します。


 次の実装にて、異なるブロックをランダムに生成する処理を行います。異なるブロックが多いほどランダム性が増しますので
HardBox以外にもBoxを作成してプレファブにしてみてください。その場合には、必ず1つずつ色を変えておいてください。