UnityでVampire survivers 風のゲームを作ろう!第7回攻撃の間隔を空ける&ヒットマークの表示

vampire survivors

前回はパンチを敵にあてたときの処理を実装しました。

今回は数秒ごとに一回攻撃を行うという処理に変更していきます。
+敵を殴った時に出るヒットマークと効果音も実装していきます。
PlayerStatusのSPANを2に設定します。
PlayerScriptを書き換えます。

public class PlayerScript : MonoBehaviour
{
[SerializeField] StatusData statusdata;
Vector3 worldAngle;//角度を代入する
public SpriteRenderer spriteRenderer;
private float currentTime;
[SerializeField]GameObject punch;
[SerializeField] Sprite imageIdle;
[SerializeField] Sprite imagePunch;

void Start(){
        		spriteRenderer.sprite = imageIdle;//待機状態の画像
        		punch.GetComponent <BoxCollider2D>().enabled = false;//Punchの当たり判定をなくす
		}
 
~省略~
void Update()
    {
        myTransform = this.transform;
        myPos= this.transform.position;

	 

	}

 IEnumerator Punchswitch()
    {
            yield return new WaitForSeconds(5);//5秒後に下の2行を実行する
            spriteRenderer.sprite = imageIdle;//待機状態の画像に切り替える
            punch.GetComponent<BoxCollider2D>().enabled = false;//あたり判定をなくす
    }

~省略~

public SpriteRenderer spriteRenderer;
画像の切り替えをするためにSpriteRenderer型の変数を宣言します。

spriteRenderer.sprite = imageIdle;
待機状態の画像を初期設定にします。
punch.GetComponent ().enabled = false;

待機状態の時はBoxCollider2Dを無効にすることで攻撃判定をなくすという処理をセットで行います。

if (currentTime > statusdata.SPAN)//2秒ごとに実行される
 {
spriteRenderer.sprite = imagePunch;//Playerの画像を攻撃用の画像に切り替える
punch.GetComponent<BoxCollider2D>().enabled = true;//あたり判定をつける
            StartCoroutine("Punchswitch");//攻撃を持続させるためのコルーチンを起動する
            currentTime = 0f;        } 

IEnumerator Punchswitch()    {
            yield return new WaitForSeconds(5);//5秒後に下の2行を実行する
            spriteRenderer.sprite = imageIdle;//待機状態の画像に切り替える
               punch.GetComponent<BoxCollider2D>().enabled = false;//あたり判定をなくす
    }

2秒に一回攻撃をして、その攻撃が5秒持続するという処理になっています。
コルーチンは処理を遅延させる時によく使われます

PlayerのInspector上のPlayerScriptにアサインしていきます。
Sprite RendererにPlayer
ImageIdleとImagePunchにそれぞれの画像を当てはめます。

効果音を鳴らす

PunchScriptを書き換えます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PunchScript : MonoBehaviour
{
[SerializeField] StatusData statusdata;
public AudioClip sound;//☑
AudioSource audioSource;//☑
     void Start(){
		audioSource = GetComponent<AudioSource>();
	}
	void Update(){}

 void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag == "Enemy")
        {
		audioSource.PlayOneShot(sound);//☑
            other.gameObject.GetComponent<EnemyScript>().Damage(statusdata.ATK);
            other.gameObject.GetComponent<EnemyScript>().NockBack(statusdata.NockBack);
   
        }
    }

AudioSourceは音を鳴らすためのコンポーネントです。
AudioClipに音声ファイルを読み込ませます。
audioSource.PlayOneShot(sound);で殴った時に効果音がなるようにしていきます。

Punchのインスペクター上でSoundに小キックを読み込ませてください。
AddComoponentからAudio Sourceを追加します。

続いては敵を殴ったときのヒットマークを表示するようにしていきます。
HitImgをダウンロードしてimagesフォルダにインポートします。

インスペクターのPixesls Per Unitを800に設定します。

Prefabフォルダの中のEnemy1のインスペクターを開きます。
Assets>ImagesからHitImgをEnemy1の子要素にします。

SpriteRendererのチェックマークを外しておいてください。
攻撃が当たった時に表示されるようにしていきます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class EnemyScript : MonoBehaviour
{

GameObject Player;
Vector3 PlayerPos;
[SerializeField] StatusData statusdata;

[SerializeField] GameObject Hitmark;//☑
Vector3 Hitpos;//☑

int HP;
bool MUTEKI;//攻撃を受けるかどうかの切り替えを行う
private float currentTime = 0f;

Vector3 diff;//プレイヤーとの距離を測るための
Vector3 vector;
private Rigidbody2D rb;

 void Upd;ate(){

	~省略~
	
	    if (MUTEKI)//攻撃を受けてから0.2秒後にする処理
        {
            currentTime += Time.deltaTime;
            if (currentTime > statusdata.SPAN )
            {
                currentTime = 0f;
                MUTEKI = false;//無敵状態終わらせる
                rb.velocity = new Vector2(0, 0);//ノックバックをとめる 
		Hitmark.GetComponent<SpriteRenderer>().enabled = false; //ヒットマーク画像を非表示に戻す☑
            }
            
        }

	 if (HP <= 0)//HPが0以下になったら消える
        {
	  Hitpos = this.transform.position;
            Hitpos.z = -2f;
            Hitmark.transform.position = Hitpos;
            Hitmark.GetComponent<SpriteRenderer>().enabled = true;//ヒットマーク画像を表示する☑
            }
		Destroy(this.gameObject);
	  }
}
public void Damage(float damage) {
        if (!MUTEKI) {//無敵状態じゃないときに攻撃を受ける
            Hitpos = this.transform.position;
            Hitpos.z = -2f;//Z軸を敵キャラよりも手前に設定
            Hitmark.transform.position = Hitpos;//ヒットマークの画像位置を移動させる
            Hitmark.GetComponent<SpriteRenderer>().enabled = true; //ヒットマーク画像を表示する☑
            HP -= damage;//HP減少
		Debug.Log(HP);//現在のHPを表示
            MUTEKI = true;//無敵状態にする
        }
    }
~省略~

Prefabフォルダの中のEnemy1を開きインスペクターのHitmarkにHitImgをアサインします。

保存してテストプレイを行ってみましょう。

画像の切り替え、効果音、画像の表示非表示の切り替えができましたでしょうか。
音量が大きいなと感じた方はPunchに追加したAudioSourceのVolumeで調整できます。

次回は攻撃用ドローンの追加をしていきます。
主人公の代わりに自動的に攻撃してくれる代物です。

UnityでVampire survivers 風のゲームを作ろう!第8回攻撃用ドローンの追加
UnityでVampire survivers 風のゲームを作っていきます。 攻撃用ドローンを追加します。

コメント

タイトルとURLをコピーしました