C# 距离单位3D上的启动计时器
在我的游戏中,有一个敌人。如果该敌人与玩家的距离最小,则计时器应启动。这很好,但我不知道如何在UI上显示计时器。我尝试了这个脚本,并在Inspector中附加了一个文本:C# 距离单位3D上的启动计时器,c#,unity3d,timer,countdown,C#,Unity3d,Timer,Countdown,在我的游戏中,有一个敌人。如果该敌人与玩家的距离最小,则计时器应启动。这很好,但我不知道如何在UI上显示计时器。我尝试了这个脚本,并在Inspector中附加了一个文本: using UnityEngine.SceneManagement; using UnityEngine.UI; public class EnemyFollow : MonoBehaviour { public Text TimerText; public Transform target; pub
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class EnemyFollow : MonoBehaviour
{
public Text TimerText;
public Transform target;
public Transform myTransform;
private const float minDistance = 5f;
float TimeLeft = 10.0f;
public float lockedY = 1f;
[SerializeField] private string loadlevel;
void Start()
{
TimerText.enabled = false;
Vector3 tmp = transform.position;
tmp.y = lockedY;
transform.position = tmp;
}
// Update is called once per frame
void Update()
{
//Enemy follows the player
transform.LookAt(target);
transform.Translate(Vector3.forward * 7 * Time.deltaTime);
//If enemy is at minDistance, a Timer starts
if ((myTransform.transform.position - target.transform.position).sqrMagnitude <= minDistance * minDistance)
{
TimeLeft -= Time.deltaTime;
TimerText.enabled = true;
TimerText.text = "Drone sends Signal:" + Mathf.Round(Zeit);
}
//If the Countdown is done, the game is over
if (Zeit < 0)
{
SceneManager.LoadScene(loadlevel);
}
}
}
但是文本会显示整个游戏,仍然会显示新的文本。游戏对象上可能没有其他文本组件,您可能希望改用GameObject.SetActivebool active,但这可能无法解决您的问题
我忍不住想到编辑器中的一个引用问题,可能缺少对TimerText的引用。你说得对!我输入了错误的文本对象羞辱我,但现在还有另一个问题。如果敌人被杀,其脚本将被销毁,但文本仍保留在画布上。在这一点上,文本应该是不可见的。那么我如何从另一个脚本获得对Textelement的访问权限呢?或者,当敌人使用并禁用/隐藏/删除文本对象/组件从您的EnemyFollow组件中被摧毁时,您也可以获得一个事件。如果您不想完全删除elemy,也可以使用。您不知道OnDisable。它完全奏效了!非常感谢: