Unityに関連する記事です

BOXの耐久力を視覚的に分かるようにするために、弾が当たるごとに色を変えるようにします。

https://gyazo.com/cdaaa65ee46cd48b59e97d170a8fbc05

https://gyazo.com/176e966356e8c57db0dcdc088787535c

新しいスクリプト「ChangeColorOnHit」を作成します。
Assetes -> Script フォルダ内で右クリックをして、create -> C# scriptを選択します。
ソースコードは下記の通りです。
using UnityEngine;

public class ChangeColorOnHit : MonoBehaviour
{
    //Hierarchyからカラーをセットするために配列を用意する
    public Color[] blockColors;

    /// <summary>
    /// ブロックの色を変更するメソッド。配列のSizeで指定した数が、色の変わる順番と内容になる
    /// </summary>
    /// <param name="index">ブロックの残りのHP</param>
    /// <returns></returns>
    public Color ChangeMaterialColor(int index) {
        //  indexは [Blockのhp - 1]の値を利用する
        index--;
        //  ブロックの色を配列に登録されているIndexの色に変更する
        return blockColors[index];
    }
}

 上記のChangeColorOnHitスクリプトをMainシーンのMasterゲームオブジェクトにアタッチします。
Masterゲームオブジェクトのインスペクターを確認して、ChangeColorOnHitスクリプトがアタッチされているか確認します。



 無事にアタッチされていると、BlockColors というColor型の配列のアサイン情報が表示されていますので、こちらのSizeを、Blockの持つ耐久力の内で最も高い値と同じ数字に設定します。
例えばBoxのHpが1、HardBoxのHpが3の場合には、このSizeを3に設定します。そうするとElement情報が追加されます。



 Sizeを指定すると画像のように色を設定する項目が表示されます。(初期値はすべて黒色) 各Elementには好きな色を登録してください。
この処理では、Elementの値と各BlockのInitHp(耐久力)の値とをリンクさせて、ブロックにボールが当たる度に色が変化するようにしています。
 
 


続いて、Destroyer.csの下記の場所に変更を加えます。

public class Destroyer : MonoBehaviour {

  (中略)

///* 宣言フィールドに2つ変数を追加 *///

    public Renderer rend;                 // ブロックの色の変更用
    private ChangeColorOnHit changeColorOnHit;    // 色を変更するクラスの情報を代入する変数

    void Start()
    {
        //Boxの耐久力を初期化(現在値=最大値にする)
        this.currentHp = initHp;

///* ここから追加 *///

        // masterObjの持っているChangeColorOnHitコンポーネントを取得して変数に代入して参照利用できるようにする
        changeColorOnHit = masterObj.GetComponent<ChangeColorOnHit>();

        // ブロックの色を残りの耐久力に合わせて変更する(ChangeColorOnHitクラスのChangeMaterialColorメソッドの戻り値としてColorをもらう)
        rend.material.color = changeColorOnHit.ChangeMaterialColor(currentHp);

///* ここまで *///

    }

    private void OnCollisionEnter(Collision collision)
    {
        (中略)

        //  まだ壊れない場合
        else
        {
            //  ボールを跳ね返すSEを再生
            AudioSource.PlayClipAtPoint(hitSE, transform.position); 

            // ブロックの色を変更      // <= 追加
            ChangeBlockColor();        // <= 追加
        }                                                               
    }

///* ここからメソッドを1つ追加 *///

   /// <summary>
    /// ブロックの色を残りの耐久力に合わせて変更する
    /// ChangeColorOnHitクラスのChangeMaterialColorメソッドに現在の耐久力の値を渡し、戻り値としてColor(色の情報)をもらう
    /// </summary>
    private void ChangeBlockColor() {
        rend.material.color = changeColorOnHit.ChangeMaterialColor(currentHp);
    }

///* ここまで *///

}

 スクリプトを修正しましたら、BoxプレファブとHardBoxプレファブのインスペクターを確認します。(他にもBoxのプレファブを作成している場合にはそれらも)
Rend という変数がアサイン情報として追加されていますので、そちらにBoxプレファブ自身の持つ MeshRenderer コンポーネントをアサインします。
これを各Boxのプレファブで同じように設定してください。

https://gyazo.com/b85f8daf6267f3343f7c804cc8b351a6

 以上で準備は完了です。ゲームを実行してみてください。スタート時に各ブロックの色が自分の耐久力の値に合わせて変化し、その後、ボールが当たる度に色が変化すれば成功です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます