【问题标题】:Adding health back to the player为玩家增加生命值
【发布时间】:2019-08-01 14:58:42
【问题描述】:

我有一个游戏,玩家有 10 点生命值。每次他失去生命值时,他的心脏就会下降 0.5 。为了给玩家一些希望,我决定为敌人添加可掉落的心。这些心可以填充 2 点生命值。

问题是我制作的健康脚本是公共的 Int 健康。这不允许“、+、-”而且我不知道如何适应这一点。

我的健康脚本

    [Header ("Max/Starting Health")]
    public int maxHealth;
    [Header ("Current Health")]
    public int health;

    void Start () {
        health = maxHealth;
    }

    public bool TakeHeal (int amount) {
        if (dead || health == maxHealth)
            return false;

        health = Mathf.Min (maxHealth, health + amount);

        if (OnTakeHealEvent != null)
            OnTakeHealEvent.Invoke();


        return true;
    }

HealthPickup 脚本


using UnityEngine;

public class HealthBoost : MonoBehaviour
{
    Health health;

    public float healthBonus = 2;

    void Awake()
    {
      health = FindObjectOfType<Health>();
    }

    void OnTriggerEnter2D(Collider2D col)
    {
      if(health < health.maxHealth)
      {
        Destroy(gameObject);
        health = health + healthBonus;
      }
    }
}

我正在考虑将 healthpickup 脚本更适合于治疗。但我不知道如何使它与游戏对象发生碰撞

【问题讨论】:

  • 你在添加生命值之前就已经破坏了拾取的游戏对象。之后就销毁它。
  • @MateusFernandes 仅供参考,除非您使用 DestroyImmediate(),否则游戏对象的销毁不会立即发生
  • @Iggy 没错,但最好在标记要销毁的对象之前添加健康状况,因为我们几乎无法控制垃圾收集器何时运行。还要注意,如果我们在脚本中销毁对象,函数仍然会完成。
  • @Eddge 当然,我也更喜欢把它放在最后。但是保持在这与GC无关。 Docs: "实际的对象销毁总是延迟到当前更新循环之后,但总是在渲染之前完成。"
  • @Iggy 啊,但是触发器不在更新循环中,它发生在物理循环中。这发生在更新循环之前,所以这可能意味着以相反的顺序执行可能是安全的,但正如你所说,我喜欢另一种方式,不喜欢诱惑命运 =)。

标签: c# unity3d game-physics


【解决方案1】:

您可能想要修改健康对象内的健康值:

if(health.health < health.maxHealth) {
    health.health = health.health + healthBonus;
}

【讨论】:

  • 是的,但问题仍然是 FLOAT 无法转换为它说我可以转换的 INT 值?但我不知道这意味着什么。
  • (int)myFloat 在这种情况下:health.health = health.health + (int)healthBonus
  • 尽管它确实触发并且健康确实消失了。这似乎不会增加玩家的健康回来?我做错了吗?
  • 我会删除 if 语句并在末尾添加一个夹子if health &gt; max; health = max
  • Maxhealth 在这种情况下不是问题,因为健康永远不会超过 maxhealth。问题是用户与 PickupHealth 发生碰撞,从而破坏了游戏对象。但是获得的生命值永远不会在玩家内部记录。
猜你喜欢
  • 1970-01-01
  • 2019-04-18
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多