我希望在Unity中,当我的球体靠近我的玩家时,我的球体会减少玩家的生命值


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class HealthBarScript : MonoBehaviour
{
public Image HealthBar;
public float CurrentHealth;
public float MaxHealth = 100f;
int Damage = 10;
PlayerController_Script Player;
private void Start()
{
HealthBar = GetComponent<Image>();
CurrentHealth = 100f;
}
public void TakeDamage(int Damage)
{
CurrentHealth -= Damage;
HealthBar.fillAmount = CurrentHealth/MaxHealth;
}
}

HealthBarScript:这是我的健康栏UI的脚本。生命值条是带有填充图像类型的旋钮图像。方法TakeDamage应该在第二个脚本(AddDamage)调用它时被调用。一旦受到伤害,生命条应该减少10,改变填充图像中的填充量。此脚本附加到图像健康栏。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AddDamage : MonoBehaviour
{
public float radius = 3;
public int Damage = 10;
public GameObject FPSController;
public HealthBarScript HealthBarScript;
void Start()
{
}
void OnCollisionEnter(Collision col)
{
Collider[] colliders = Physics.OverlapSphere(transform.position, radius);
foreach(Collider FPSController in colliders);
{
if(FPSController.tag == "Player");
{
HealthBarScript.TakeDamage(Damage);
}
}
}
}

AddDamage:这是我的碰撞脚本,当球体的碰撞器在其周围半径内有FPS控制器时(FPS控制器被标记为Player),它将看到FPS控制器的标签并调用HealthBarScript的TakeDamage方法。这个脚本附属于Game Object球体。

我目前遇到的问题是,尽管每当球体周围半径内有FPS控制器时,生命条应该减少10(每当FPS控制器在碰撞器数组内时,AddDamage调用HealthBarScript中的TakeDamage方法),但什么都没有发生。控制台没有错误。

void OnCollisionEnter(Collision col)
{
Collider[] colliders = Physics.OverlapSphere(transform.position, radius);
foreach(Collider FPSController in colliders);
{
if(FPSController.tag == "Player");
{
HealthBarScript.TakeDamage(Damage);
}
}
}

如果我理解正确的话:

  1. 等待该对象的3D碰撞(未触发)
  2. 获取该位置的所有3D碰撞器
  3. 检查每个碰撞器,如果它有"Player"标记
  4. 让健康栏脚本受到伤害

你正在等待碰撞,然后你用光线投射检查。如果你不想这样,把光线投射的东西放入一个(固定的)更新方法

最新更新