前の記事と同様にプレイヤーも敵を近接攻撃できるようにしてみました。敵のHPゲージも作って攻撃が当たると減らします。
// プレイヤーにつけたスクリプト
// 刀で攻撃中
else if (animator.GetCurrentAnimatorStateInfo(0).IsName("KnifeAttack"))
{
if (!judged && animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.4f)
{
judged = true;
// 攻撃があたった時
Vector3 enemyPos = enemy.transform.position;
enemyPos.y = transform.position.y;
if (Vector3.Distance(enemyPos, transform.position) <= 2f && Vector3.Dot(Vector3.Normalize(enemyPos - transform.position), transform.forward) >= 0.8f)
{
sc_agent.SetHP(-0.1f);
audioSource.clip = audios[0];
audioSource.Play();
}
// 攻撃があたらなかった時
else
{
audioSource.clip = audios[2];
audioSource.Play();
}
}
}
// 刀を構えているとき
else if (animator.GetCurrentAnimatorStateInfo(0).IsName("KnifeStay"))
{
judged = false;
}
// 敵につけたスクリプト
[SerializeField] Image HpImage;
float HP = 1f;
public void SetHP(float f)
{
HP += f;
HP = Mathf.Clamp(HP,0f,1f);
HpImage.fillAmount = HP;
}
敵のHPゲージはプレイヤーと逆向きに減るので、ImageコンポーネントのFill OriginをRightにしておきます。
攻撃が当たったかどうかを距離と角度一つで判断しているので、境界が敵のシルエットに合っていません。