Chapter 37無料公開

プレイヤーのやられアニメーションを表示する

baba_s
baba_s
2021.08.08に更新

前項でプレイヤーのやられアニメーションを作成しました。

本項ではプレイヤーのやられアニメーションを表示するようにしていきます。

プレハブ化

プレイヤーのやられアニメーションはあらかじめシーンに配置しておくものではなく、プレイヤーがやられた時に生成するオブジェクトにするため、プレハブ化することでスクリプトから生成できるようにしていきます。

Hierarchy ウィンドウで「Hit (32x32)_0」オブジェクトを選択して

Inspector ウィンドウで入力欄に「PlayerHit」と入力して名前を変更します。

そして、Inspector ウィンドウから「PlayerHit」オブジェクトを「Assets/@Project/Prefabs」フォルダにドラッグします。

これで「PlayerHit」オブジェクトをプレハブ化できました。

スクリプトの作成

次はプレイヤーのやられアニメーションのオブジェクトを制御するスクリプトを作成していきます。

Project ウィンドウで「Assets/@Project/Scripts」フォルダを右クリックして「Create > C# Script」を選択し、

作成したスクリプトに「PlayerHit」と名前をつけてコードエディタで開きます。

PlayerHit.cs
using UnityEngine;

// プレイヤーのやられアニメーションを制御するスクリプト
public class PlayerHit : MonoBehaviour
{
    // やられアニメーションの移動の速さ
    public Vector3 m_velocity = new Vector3( 0, 15, 0 );

    // やられアニメーションの移動にかかる重力の強さ
    public float m_gravity = 30;

    // 毎フレーム呼び出される関数
    private void Update()
    {
        // やられアニメーションを移動します
        transform.localPosition += m_velocity * Time.deltaTime;

        // 重力を適用してだんだん落下するようにします
        m_velocity.y -= m_gravity * Time.deltaTime;
    }
}

「PlayerHit」スクリプトをコードエディタで開いたら上記のコードを入力して保存します。

Unity エディタに戻り Project ウィンドウの「PlayerHit」スクリプトを「PlayerHit」プレハブにドラッグします。

Project ウィンドウで「PlayerHit」プレハブを選択した状態で Inspector ウィンドウに「PlayerHit」スクリプトが表示されていればアタッチ完了です。

スクリプトの修正

プレイヤーのやられアニメーションを制御するスクリプトが作成できたので、次はプレイヤーが針に当たったらやられアニメーションを表示するように針を制御するスクリプトを修正していきます。

Project ウィンドウから「Spike」スクリプトをコードエディタで開きます。

Spike.cs
using UnityEngine;
using UnityEngine.SceneManagement;

// 針を制御するスクリプト
public class Spike : MonoBehaviour
{
    // ★この2行を追加
    // プレイヤーのやられアニメーションのプレハブ
    public PlayerHit m_playerHitPrefab;

    // 他のオブジェクトと当たった時に呼び出される関数
    private void OnTriggerEnter2D( Collider2D other )
    {
        // 名前に「Player」が含まれるオブジェクトと当たったら
        if ( other.name.Contains( "Player" ) )
        {
            // プレイヤーのオブジェクトを削除する
            Destroy( other.gameObject );

            // シーンに存在する CameraShaker スクリプトを検索する
            var cameraShaker = FindObjectOfType<CameraShaker>();

            // CameraShaker を使用してカメラを揺らす
            cameraShaker.Shake();

            // 2 秒後にリトライする
            Invoke( "OnRetry", 2 );

            // ★この7行を追加
            // プレイヤーのやられアニメーションのオブジェクトを生成する
            Instantiate
            (
                m_playerHitPrefab,
                other.transform.position,
                Quaternion.identity
            );
        }
    }

    // リトライする時に呼び出される関数
    private void OnRetry()
    {
        // 現在のシーンを読み込み直してリトライする
        SceneManager.LoadScene( SceneManager.GetActiveScene().buildIndex );
    }
}

「Spike」スクリプトをコードエディタで開いたら上記のコードの「★この2行を追加」「★この7行を追加」の2箇所のコードを入力して保存します。

Unity エディタに戻り Project ウィンドウで「Spike」プレハブを選択した状態で「PlayerHit」プレハブを Inspector ウィンドウの「Player Hit Prefab」の項目にドラッグします。

Hierarchy ウィンドウの「PlayerHit」オブジェクトは不要になるため、「PlayerHit」オブジェクトを選択した状態で Delete キーを押して削除します。

これで Unity を再生してプレイヤーを操作すると、プレイヤーが針に当たった時にやられアニメーションが再生されるようになったことが確認できます。確認できたら Unity の再生を停止します。

前後関係の修正

現状ではやられアニメーションの前後関係を設定していないので、場合によってはやられアニメーションがタイルマップの後ろに隠れてしまいます。これを防ぐためにやられアニメーションの前後関係を手前に変更します。

Project ウィンドウで「PlayerHit」プレハブを選択した状態で

Inspector ウィンドウで「Sprite Renderer」の「Order in Layer」に「2」と入力します。

これで、やられアニメーションがタイルマップの手前に表示されるようになりました。

アニメーションのループ設定

現状ではやられアニメーションのアニメーションがループ再生してしまうため、ループ再生しないように設定を変更します。

Project ウィンドウで「Hit」アニメーションを選択した状態で

Inspector ウィンドウで「Loop Time」のチェックを外します。

これで、やられアニメーションがループ再生されなくなりました。

以上で、プレイヤーのやられアニメーションを作成することができました。

Unity メニューの「File > Save」を押すか、Ctrl + S を押して、ここまでの作業内容を保存しておきます。