触发器无法正常使用GetComponent.出了什么问题
本文关键字:什么 问题 GetComponent 常使用 触发器 | 更新日期: 2023-09-27 18:28:37
这是玩家健康脚本。。。它从Unity内部设置玩家的健康状况,并将其推送到GUI上。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class PlayerHealth : MonoBehaviour
{
public Text hpText; //HP Value Text Element.
public int PlayerHP; // Make it a property so you can alter its value in the editor
void Start()
{
SetHPText ();
}
void Update ()
{
SetHPText ();
}
void SetHPText ()
{
hpText.text = "Health: " + PlayerHP.ToString();
}
}
然后这个获取玩家当前的健康状况(并不断更新)。如果玩家的生命值为0(或更低),则会加载一个新场景。问题是玩家的标签标签检查和施加伤害不起作用。
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
public class DamageAuroa : MonoBehaviour {
public int PHP; //PHP = Player Health from PlayerHealth.cs script.
public int Damage; //Amount of damage.
public string Level;
void Update()
{
PHP = GameObject.Find("Player").GetComponent<PlayerHealth>().PlayerHP;
}
void OnTriggerEnter(Collider coll)
{
if (coll.gameObject.tag == "Player")
PHP = PHP - Damage;
if (coll.gameObject.tag == "Ball")
{
gameObject.SetActive(false);
SceneManager.LoadScene(Level);
}
if (PHP <= 0)
SceneManager.LoadScene(Level);
}
}
这一切最奇怪的部分是在我更新Unity之前(我知道新手的错误)。有人知道怎么回事吗?在有人问"是"之前,触发器和标签都已正确设置。我还意识到我必须将更新后的HP值传递给玩家健康脚本,以便它在GUI上更新。只是想让这些触发器发挥作用。
以下代码不起作用,因为您正在创建等于玩家HP的新变量PHP
(但不引用它,因为int
是一种值类型,而不是引用类型),并且当您更改PHP
时,它只更改此变量,而不更改PlayerHealth
脚本中的PlayerHP
。
void Update()
{
PHP = GameObject.Find("Player").GetComponent<PlayerHealth>().PlayerHP;
}
void OnTriggerEnter(Collider coll)
{
if (coll.gameObject.tag == "Player")
PHP = PHP - Damage;
....
}
如果您想更改PlayerHealth
,您应该直接从PlayerHealth
脚本实例更改它。
if (coll.gameObject.tag == "Player")
GameObject.Find("Player").GetComponent<PlayerHealth>().PlayerHP= PHP - Damage;
或者,您可以创建一个引用类型的变量,引用PlayerHealth
脚本。
public class DamageAuroa : MonoBehaviour {
PlayerHealth player;
void Start ()
{
player = GameObject.Find("Player").GetComponent<PlayerHealth>();
}
...
然后使用此对象设置玩家hp。
if (coll.gameObject.tag == "Player")
player.PlayerHP = player.PlayerHP- Damage;
是的,我不确定这是否有效,因为我没有那么先进,但试着使用coll.tag,因为coller类有一个标记变量it self。