Итак, я создал два скрипта, один с именем «Stats.cs» регистрирует статистику игрока, а другой с именем «PlayerHealth.cs» «заставляет игрока получать урон при контакте и обновляет сердца в HUD.Моя проблема в том, что всякий раз, когда я сталкиваюсь с объектом, имеющим тег «Projectile», он просто не работает, мой игрок вообще не получает урона.Сценарий Stats.cs отсутствует ни в одном объекте, PlayerHealth.cs находится в моем объекте Player.
Stats.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Stats{
private int health;
public int maxHP = 3;
public int Health
{
get
{
//Some code
return health;
}
set
{
//Some code
health = Mathf.Clamp(value, 0, maxHP);
}
}
public void SetHealth()
{
Health = maxHP;
}
}
PlayerHealth.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PlayerHealth : MonoBehaviour
{
Stats playerStats = new Stats();
public int curHealth;
public int numOfHearts = 3;
public Image[] hearts;
public Sprite fullHeart;
public Sprite emptyHeart;
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Projectile"))
{
Debug.Log("Hello");
DamagePlayer(1);
Destroy(other.gameObject);
}
}
public void DamagePlayer(int damage)
{
playerStats.Health -= damage;
}
// Start is called before the first frame update
void Start()
{
playerStats.SetHealth();
curHealth = numOfHearts;
}
// Update is called once per frame
void Update()
{
curHealth = playerStats.Health;
numOfHearts = playerStats.maxHP;
if (curHealth>numOfHearts){
curHealth = numOfHearts;
}
if(curHealth <= 0){
Die();
}
for (int i = 0; i < hearts.Length; i++)
{
if(i < curHealth){
hearts[i].sprite = fullHeart;
} else
{
hearts[i].sprite = emptyHeart;
}
if(i < numOfHearts){
hearts[i].enabled = true;
} else {
hearts[i].enabled = false;
}
}
}
void Die(){
//Restart
Application.LoadLevel(Application.loadedLevel);
}
}
curHealth обновляется, поэтому он будет оставаться фактическим здоровьем в статистике и будет менять изображения в HUD.
У игрока есть RigidBody2D на нем два коллайдера, один - ящик для тела, а другой -является круговым коллайдером, поэтому, когда игрок приседает, круговой коллайдер отключается.
Снаряды также имеют и RigidBody2D с 0 гравитацией (чтобы он не падал в воздухе) и BoxCollider2D.