【问题标题】:How can I stop the enemy from instantly killing the player?如何阻止敌人立即杀死玩家?
【发布时间】:2019-02-27 22:33:58
【问题描述】:

我正在尝试让玩家健康脚本在敌人用敌人的射弹脚本射击玩家游戏对象后降低健康值 我怎样才能让这个健康脚本工作?我将脚本附加到玩家身上,但玩家游戏对象在射击时立即死亡。我添加了一种碰撞方法来获取组件弹丸我在正确的道路上吗?欢迎任何反馈。

     using UnityEngine;
     using UnityEngine.UI;
     using System.Collections;

     public class PlayerHealth : MonoBehaviour
     {
     [SerializeField] GameObject deathFX;
     [SerializeField] Transform parent;
     public Image Bar;
     public Text Text;
     public float max_health = 100f;
     public float cur_health = 0f;


     //Use this for initialization
     void Start()
      {
     // Initialize the health that is given
     cur_health = max_health;

    InvokeRepeating("decreaseHealth", 0f, 2f);

    }
    void Update()
    {
    if (cur_health <= 0)
    {
        Destroy(gameObject);   //if the player has no health point left, destroy the player.
    }
    }
    void OnCollisionEnter(Collision collision)
    {
    if (collision.gameObject.GetComponent<Projectiles>())
    {
    max_health -= cur_health;
        //if the collision object has a homing script, minus player health by damageToPlayer
    }
    }
    void decreaseHealth()
    {
    //Subtract the health at the following rate
    //Check if the health is 0 before we do any damage
    if (cur_health < 0)
    {
        cur_health = 0;
    }

    //make a new variable and divide the current health my the maximum health
    //this is because the fill value goes from 0 to 1
    float calc_health = cur_health / max_health; // 70 / 100 = 0.7
    SetHealth(calc_health);

    //Change the color of the health bar
    if (cur_health != 0 && cur_health <= max_health / 1.6 && cur_health > max_health / 2.9) // on the scale of 1000, if health <= 625 and is greater than 345, do the following
    {
        Bar.color = new Color32(171, 162, 53, 255);
    }
    else if (cur_health != 0 && cur_health <= max_health / 2.9) // on the scale of 1000, if health <= 625, do the following
    {
        Bar.color = new Color32(158, 25, 25, 255);
    }
}

void SetHealth(float myHealth)
{
    //defill the bar based on the current health
    Bar.fillAmount = myHealth;

    //change the text to display the amount of health
    Text.text = cur_health.ToString("f0") + "/100";
}
}

【问题讨论】:

  • 你能告诉我们你在哪里打电话给ApplyDamage吗?另外,当你说玩家被击中时死亡,你的意思是玩家游戏对象被摧毁了吗?
  • GameObject fx = Instantiate(deathFX,.... 似乎怀疑可能发布该代码
  • 这是迄今为止我整理的所有代码,是的,我的意思是玩家游戏对象被破坏了。我想知道我在他的代码中遗漏了什么对我遗漏的任何指导/提示将不胜感激。我理解这对任何人都没有意义。我正在尝试:/
  • damageToTake多少钱?

标签: c# unity3d


【解决方案1】:

也许我完全误解了这个问题,但我认为你只需要一个 if 语句。

public void ApplyDamage(int damageToTake)
{
    Debug.Log(Time.frameCount + ": ApplyDamage was called.");
    currentHealthPlayer -= damageToTake;
    if (currentHealthPlayer <= 0)  //Only apply death effect if health goes to zero
    {
        Debug.Log("Player met an unfortunate end. Time of death: " + Time.frameCount);
        GameObject fx = Instantiate(deathFX, transform.position, Quaternion.identity);
        fx.transform.parent = parent;
    }
}

【讨论】:

  • 我最近更新了我的帖子,如果你有时间,请再次查看我的脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多