Unityに関連する記事です

設計


 異なる色のブロックを新しく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つずつ色を変えておいてください。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

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

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

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

private



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

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