Unity3Dで3Dシューティングの作り方、パート3(スコアの表示、多数の敵、ゲームオーバー画面)

今回で3Dシューティングゲームの作成完了です。

スコアをつける

Unity: Survival shooter – Scoring points

HUDCanvas → UI → Textを追加してScoreTextという名前にする。
ScoreTextのRect Transformの四角の中に2つの四角が入っているマークをクリックしてcenter topに変更する。Pos Yを-55、Widthを300、Heightを50にする。
Text(Script)のTextをSCORE:0、FontをFuckiestGuy、Font Sizeを50、AlightmentをCenter Middle、Colorを白にする。
Add ComponentからShadowを追加して、X:2、Y:-2に変更する。

Assets → Scripts → Managers → ScoreMangerスクリプトをScoreTextにアタッチする。
ScoreMangerスクリプトのコードは既に書かれてあるので、解説の動画を見ながらふーんという感じで進みます。

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class ScoreManager : MonoBehaviour
{
    public static int score;


    Text text;


    void Awake ()
    {
        text = GetComponent <Text> ();
        score = 0;
    }


    void Update ()
    {
        text.text = "Score: " + score;
    }
}

EnemyHealthスクリプトへ行き、敵が倒れたときスコアを追加するように変更します。

public void StartSinking ()
{
    GetComponent <NavMeshAgent> ().enabled = false;
    GetComponent <Rigidbody> ().isKinematic = true;
    isSinking = true;
    ScoreManager.score += scoreValue;
    Destroy (gameObject, 2f);
}

ScoreManagerのscoreはpublic staticなのでこんな感じで簡単にスコアを追加できます。

Playボタンを押して敵を倒すとスコアが10になります。

最後にZombunnyオブジェクトをPrefabsにドロップしてプレハブ化して、Zombunnyオブジェクトを削除します。

たくさん敵を出す

Unity: Survival shooter – Spawning Enemies

ゾンビ熊を作ります。
Assets → Prefabs → Zombearを選択する
Assets → Animation → EnemyACをZombearのAnimator Controllerにアタッチする。

他の2体とは形がだいぶ異なるゾンビ象を作ります。
Assets → Animation
Animator Override Controllerを作成してHellephantAOCという名前に変更する。
HellephantAOCを選択して、EnemyACをHellephantAOCのInspectorのControllerにアタッチする。

Assets → Models → Characters
Hellephantを展開して、その中にあるIdle、Move、DeathをHellephantAOCのInspectorにあるIdle、Move、Deathにそれぞれアタッチする。

Assets → Prefabs
Hellephantを選択して、HellephantAOCをプレハブのHellephantのAnimater Controllerにアタッチする。

ゲームの中で敵を自動的に作り出すためにEnemyManagerを作成します。
空のGameObjectを作成して名前をEnemyManagerに変更して位置をリセットする。
Assets → Scripts → Managers → EnemyMangerスクリプトをEnemyManagerオブジェクトにアタッチする。
解説の動画を見ながらEnemyMangerスクリプトを眺めます。

using UnityEngine;

public class EnemyManager : MonoBehaviour
{
    public PlayerHealth playerHealth;
    public GameObject enemy;
    public float spawnTime = 3f;
    public Transform[] spawnPoints;


    void Start ()
    {
        InvokeRepeating ("Spawn", spawnTime, spawnTime);
    }


    void Spawn ()
    {
        if(playerHealth.currentHealth <= 0f)
        {
            return;
        }

        int spawnPointIndex = Random.Range (0, spawnPoints.Length);

        Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
    }
}

空のGameObjectを作成してZombunnySpawnPointと言う名前にします。
青緑赤のキューブをクリックして青いボタンを選択します。
ZombunnySpawnPointのPosition X:-20.5 Y:0 Z:12.5、RotationのYを130にします。

空のGameObjectを作成してZombearSpawnPointと言う名前にします。
青緑赤のキューブをクリックして赤紫のボタンを選択します。
ZombearSpawnPointのPosition X:22.5 Y:0 Z:15、RotationのYを240にします。

空のGameObjectを作成してHellephantSpawnPointと言う名前にします。
青緑赤のキューブをクリックして黄色のボタンを選択します。
HellephantSpawnPointのPosition X:0 Y:0 Z:32、RotationのYを230にします。

HierarchyのEnemyManagerを選択します。
PlayerオブジェクトをEnemyManagerのInspectorのPlayer Healthにアタッチします。
PrefabsのZombunnyをEnemyManagerのInspectorのEnemyにアタッチします。
ZombunnySpawnPointをEnemyManagerのInspectorのSpawn Pointsにアタッチします。

HierarchyのEnemyManagerを選択します。
EnemyManagerスクリプトをEnemyManagerにアタッチします。
PlayerオブジェクトをEnemyManagerのInspectorのPlayer Healthにアタッチします。
PrefabsのZombearをEnemyManagerのInspectorのEnemyにアタッチします。
ZombearSpawnPointをEnemyManagerのInspectorのSpawn Pointsにアタッチします。

HierarchyのEnemyManagerを選択します。
EnemyManagerスクリプトをEnemyManagerにアタッチします。
PlayerオブジェクトをEnemyManagerのInspectorのPlayer Healthにアタッチします。
PrefabsのHellephantをEnemyManagerのInspectorのEnemyにアタッチします。
HellephantSpawnPointをEnemyManagerのInspectorのSpawn Pointsにアタッチします。

以上でZombunny、Zombear、Hellephantが各ポイントから湧いてきて襲いかかってくるようになります。

ゲームオーバー画面

Unity: Survival shooter – Game Over

シーンビューを2Dモードにします。
HUDCanvasを右クリックしてUI → Imageを追加します。
作成されたImageをScreenFaderという名前に変更します。
四角の中に2つの四角が入っているボタンをクリックしてstretch stretchに変更します。
Left、Top、Pos Z、Right、Bottomを0にします。
Image(Script)のColorを薄い青にします。

HUDCanvasを右クリックしてUI → Textを追加します。
作成されたTextをGaveOverTextという名前に変更します。
Widht:300 Height:50に変更します。
Text(Script)のTextをGame Over、FontをLuckiestGuy、Font Sizeを50、AlignmentをCenter Middle、Colorを白にします。
Add ComponentでShadowを追加してX:2 Y:-2にします。

HierarchyのHUDCanvasの子要素を下記の順番に変更します。
HealthUI
DamageImage
ScreenFader
GameOverText
ScoreText

下に行くほど前面に出ます。つまりScoreTextが画面の一番上にきて、その下にGameOverText以下が続きます。

ScreenFaderを選択してColorをクリックしてAを0にします。
GameOverTextを選択してColorをクリックしてAを0にします。

HUDCanvasを選択します。
Window → Animationを選択して表示されたWindowをシーンビューのところにドッキングします。

AnimationビューのAdd Curveをクリック。
Assets\AnimationにGameOverClipで保存します。
Add Curveのすぐ横に表示されるGameOverTextを展開してTextを展開してColorを選択(プラスボタンをクリック)します。
同じようにGameOverTextを展開してRect Transformを展開してScaleを選択します。
同じようにScoreTextを展開してRect Transformを展開してScaleを選択します。
同じようにScreenFaderを展開してImageを展開してColorを選択します。

言葉で説明するのは難しいので設定画像を載せておきます。

プレイヤーが倒された1秒後にゲームオーバー画面が表示されます。
最初はGame Overの文字の大きさは0%から始まって0.2秒後に120%、その0.1秒後に100%の大きさになります。
Game Overの表示は最初透明から始まって0.3秒かけて白になります。
ScoreTextは最初100%から始まって0.3秒後に80%の大きさになります。
ScreenFader(青い画面)は最初透明から始まって0.3秒後に青色になります。

こんな感じで文字でもアニメーションにすることができます。

このままではループするので、Assets → Animation → GameOverClipのLoop Timeのチェックを外します。

このままではゲーム開始時にゲームオーバー画面が表示されてしまうので、敵に倒されたときに表示されるように設定します。
Assets → Animation → HUDCanvas
AnimatorビューでCreate State → Empty
作成されたNew Stateの名前をEmptyに変更します。
EmptyをSet As Defaultにします。
EmptyからGameOverClipへTransitionを作成します。
GameOverというTriggerのParameterを作成します。
EmptyからGameOverClipへTransitionを選択して、ConditionsをExit TimeからGameOverへ変更します。

Assets → Scripts → Managers
GameOverManagerスクリプトをHUDCanvasへドロップします。

解説の動画を聞きながらGameOverManagerスクリプトを眺めます。コードが不足していたので解説を見ながら追加します。

using UnityEngine;

public class GameOverManager : MonoBehaviour
{
    public PlayerHealth playerHealth;
	public float restartDelay = 5f;

    Animator anim;
	float restartTimer;

    void Awake()
    {
        anim = GetComponent<Animator>();
    }


    void Update()
    {
        if (playerHealth.currentHealth <= 0)
        {
            anim.SetTrigger("GameOver");

			restartTimer += Time.deltaTime;

			if(restartTimer >= restartDelay)
			{
				Application.LoadLevel(Application.loadedLevel);
			}
        }
    }
}

HUDCanvasを選択してInspectorのGame Over Manger(Script)のPlayer HealthのところにPlayerオブジェクトをドロップします。

最後のBackgroundMusicを選択してPlay On Awakeをチェックします。

Playボタンを押してゲームをしてみましょう!

Unity3Dの3Dシューティングゲームの完成品!

最後にBuildしてWebに公開です。
サイズが27MBもある・・・。

ゲーム開始するのに少し時間がかかるかも。
あと音が少しうるさいかもしれません。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください