Не может сделать столкновение между врагом и игроком нанести урон игроку - PullRequest
0 голосов
/ 21 февраля 2020
using UnityEngine;
using UnityEngine.UI;

public class HealthBarController : MonoBehaviour
{
    private GameObject[] heartContainers;
    private Image[] heartFills;

    public Transform heartsParent;
    public GameObject heartContainerPrefab;

    private void Start()
    {
        // Should I use lists? Maybe :)
        heartContainers = new GameObject[(int)PlayerStats.Instance.MaxTotalHealth];
        heartFills = new Image[(int)PlayerStats.Instance.MaxTotalHealth];

        PlayerStats.Instance.onHealthChangedCallback += UpdateHeartsHUD;
        InstantiateHeartContainers();
        UpdateHeartsHUD();
    }

    public void UpdateHeartsHUD()
    {
        SetHeartContainers();
        SetFilledHearts();
    }

    void SetHeartContainers()
    {
        for (int i = 0; i < heartContainers.Length; i++)
        {
            if (i < PlayerStats.Instance.MaxHealth)
            {
                heartContainers[i].SetActive(true);
            }
            else
            {
                heartContainers[i].SetActive(false);
            }
        }
    }

    void SetFilledHearts()
    {
        for (int i = 0; i < heartFills.Length; i++)
        {
            if (i < PlayerStats.Instance.Health)
            {
                heartFills[i].fillAmount = 1;
            }
            else
            {
                heartFills[i].fillAmount = 0;
            }
        }

        if (PlayerStats.Instance.Health % 1 != 0)
        {
            int lastPos = Mathf.FloorToInt(PlayerStats.Instance.Health);
            heartFills[lastPos].fillAmount = PlayerStats.Instance.Health % 1;
        }
     }

    void InstantiateHeartContainers()
    {
        for (int i = 0; i < PlayerStats.Instance.MaxTotalHealth; i++)
        {
            GameObject temp = Instantiate(heartContainerPrefab);
            temp.transform.SetParent(heartsParent, false);
            heartContainers[i] = temp;
            heartFills[i] = temp.transform.Find("HeartFill").GetComponent<Image>();
        }
    }
}

Это HealthbarController, и оно работает, когда урон наносится кнопкой. То же самое с heal и addheart, но я не могу заставить своих врагов наносить урон.

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

public class DamageScript : MonoBehaviour
{
    public void Hurt(float dmg)
    {
        PlayerStats.Instance.TakeDamage(dmg);
    }
}

, и это сценарий урона для моих врагов. Как я могу заставить врага наносить урон игроку при столкновении с игроком? Я пробовал с OnCollisionEnter, но всякий раз, когда я помещал его в код, я получал только кучу ошибок.

1 Ответ

0 голосов
/ 21 февраля 2020

Что делать, если вы пытались присвоить врагу метку "Враг", а вашему игроку - коллайдер сфер (проверено isTrigger).

А затем создать сценарий получения урона, например:

public class takeDamage : MonoBehaviour
{     

private int PlayerHp = 10f;

private void OnTriggerEnter(Collider other)
        {
            if (other.gameObject.CompareTag( "Enemy")) {
                PlayerHp -= 1;
                Debug.Log("Hit, HP: " + PlayerHp);
               //Add GUI update function here
            }

        }
}

и прикрепите его к плееру.

Не забудьте масштабировать сферический коллайдер до соответствующего размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...