在距离 Unity3D 上启动计时器
Start Timer on Distance Unity3D
在我的游戏中,有一个敌人。如果这个敌人在玩家的 minimalDistance
处,则应启动计时器。这工作正常,但我不知道如何在 UI 上显示计时器。我试过这个脚本并在检查器中附加了一个文本:
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);
}
}
}
但文字显示了整个游戏,仍然显示"new text"。
带有文本组件的游戏对象上可能没有其他内容,您可能想使用 GameObject.SetActive(bool active)
代替,但这可能无法解决您的问题。
我不禁想到编辑器中的引用问题,可能缺少对您的 TimerText 的引用。
在我的游戏中,有一个敌人。如果这个敌人在玩家的 minimalDistance
处,则应启动计时器。这工作正常,但我不知道如何在 UI 上显示计时器。我试过这个脚本并在检查器中附加了一个文本:
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);
}
}
}
但文字显示了整个游戏,仍然显示"new text"。
带有文本组件的游戏对象上可能没有其他内容,您可能想使用 GameObject.SetActive(bool active)
代替,但这可能无法解决您的问题。
我不禁想到编辑器中的引用问题,可能缺少对您的 TimerText 的引用。