在 Unity 游戏 C# 中从计时器中减去时间
Subtracting Time From Timer In Unity Game C#
最近,我一直在开发一款赛车游戏,该游戏要求玩家避开 Radioactive Barrels,应该 减去 15 秒,如果它们碰巧撞上的话;下面是我的 'Timer' 脚本和我的 Barrel Collision 脚本的代码。
计时器脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Timer : MonoBehaviour
{
public float timeRemaining = 10;
public bool timerIsRunning = false;
public Text timeText;
public void Start()
{
// Starts the timer automatically
timerIsRunning = true;
}
public void Update()
{
if (timerIsRunning)
{
if (timeRemaining > 0)
{
timeRemaining -= Time.deltaTime;
DisplayTime(timeRemaining);
}
else
{
Debug.Log("Time has run out!");
timeRemaining = 0;
timerIsRunning = false;
}
}
}
public void DisplayTime(float timeToDisplay)
{
timeToDisplay += 1;
float minutes = Mathf.FloorToInt(timeToDisplay / 60);
float seconds = Mathf.FloorToInt(timeToDisplay % 60);
timeText.text = string.Format("{0:00}:{1:00}", minutes, seconds);
}
}
接下来是我的桶碰撞脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ExplosionTrigger : MonoBehaviour
{
public AudioSource ExplosionSound;
public ParticleSystem Explosion;
public void OnTriggerEnter(Collider collider)
{
Explosion.Play();
ExplosionSound.Play();
Timer.timeRemaining += 1.0f;
}
}
无论如何我可以通过从计时器脚本中撞到所述桶来减去时间吗?
让 timeRemaining
暴露给其他 类 的最简单方法是使用 static 关键字。
public static float timeRemaining = 10;
通过使变量成为静态变量,它可以被其他人引用类。如果你不想完全暴露变量,你可以使静态setter/getters。当使用 setter/getter.
时,变量将是 private static float timeRemaining = 10;
public static float TimeRemaining
{
get{ return timeRemaining;}
set { timeRemaining = value;}
}
如果您碰巧想通过脚本向 类 公开更多变量或方法,我建议您实施 Singleton Pattern or possibly implement your own Event System,它使用单例模式在您的项目中自由传递事件.这样,您就可以为各种脚本订阅和触发事件以进行侦听。
是的,您可以使用 GetComponent<>()
从不同的游戏对象访问脚本。您应该设置一个 GameObject 变量,然后将带有脚本的游戏对象拖到上面。将此添加到您的桶脚本中:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ExplosionTrigger : MonoBehaviour
{
public AudioSource ExplosionSound;
public ParticleSystem Explosion;
public GameObject Timer;
public float timeLoss;
public Timer timer;
void Start()
{
timer = Timer.GetComponent<TimerScript>();
}
public void OnTriggerEnter(Collider collider)
{
timer.timeRemaining -= 1f;
Explosion.Play();
ExplosionSound.Play();
}
}
您可以使用句点更改 TimerScript 中的值。确保将 TimerScript 更改为 Timer 游戏对象上脚本的名称。
最近,我一直在开发一款赛车游戏,该游戏要求玩家避开 Radioactive Barrels,应该 减去 15 秒,如果它们碰巧撞上的话;下面是我的 'Timer' 脚本和我的 Barrel Collision 脚本的代码。
计时器脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Timer : MonoBehaviour
{
public float timeRemaining = 10;
public bool timerIsRunning = false;
public Text timeText;
public void Start()
{
// Starts the timer automatically
timerIsRunning = true;
}
public void Update()
{
if (timerIsRunning)
{
if (timeRemaining > 0)
{
timeRemaining -= Time.deltaTime;
DisplayTime(timeRemaining);
}
else
{
Debug.Log("Time has run out!");
timeRemaining = 0;
timerIsRunning = false;
}
}
}
public void DisplayTime(float timeToDisplay)
{
timeToDisplay += 1;
float minutes = Mathf.FloorToInt(timeToDisplay / 60);
float seconds = Mathf.FloorToInt(timeToDisplay % 60);
timeText.text = string.Format("{0:00}:{1:00}", minutes, seconds);
}
}
接下来是我的桶碰撞脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ExplosionTrigger : MonoBehaviour
{
public AudioSource ExplosionSound;
public ParticleSystem Explosion;
public void OnTriggerEnter(Collider collider)
{
Explosion.Play();
ExplosionSound.Play();
Timer.timeRemaining += 1.0f;
}
}
无论如何我可以通过从计时器脚本中撞到所述桶来减去时间吗?
让 timeRemaining
暴露给其他 类 的最简单方法是使用 static 关键字。
public static float timeRemaining = 10;
通过使变量成为静态变量,它可以被其他人引用类。如果你不想完全暴露变量,你可以使静态setter/getters。当使用 setter/getter.
时,变量将是private static float timeRemaining = 10;
public static float TimeRemaining
{
get{ return timeRemaining;}
set { timeRemaining = value;}
}
如果您碰巧想通过脚本向 类 公开更多变量或方法,我建议您实施 Singleton Pattern or possibly implement your own Event System,它使用单例模式在您的项目中自由传递事件.这样,您就可以为各种脚本订阅和触发事件以进行侦听。
是的,您可以使用 GetComponent<>()
从不同的游戏对象访问脚本。您应该设置一个 GameObject 变量,然后将带有脚本的游戏对象拖到上面。将此添加到您的桶脚本中:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ExplosionTrigger : MonoBehaviour
{
public AudioSource ExplosionSound;
public ParticleSystem Explosion;
public GameObject Timer;
public float timeLoss;
public Timer timer;
void Start()
{
timer = Timer.GetComponent<TimerScript>();
}
public void OnTriggerEnter(Collider collider)
{
timer.timeRemaining -= 1f;
Explosion.Play();
ExplosionSound.Play();
}
}
您可以使用句点更改 TimerScript 中的值。确保将 TimerScript 更改为 Timer 游戏对象上脚本的名称。