Моя игра содержит дату и время для представления внутриигровой даты, и она будет автоматически пересылать время.И у меня есть ряд событий, которые произойдут только в определенную дату.
Вопрос в том, как лучше всего, чтобы, когда придет время, это вызвало эти события?
Теперь самое лучшееЯ могу подумать об установке даты для каждого из этих событий, поэтому каждый раз, когда игровое время обновляется, я проверяю, если (игровое время> = время события).Но, похоже, это сильно истощает ресурсы, потому что время обновляется очень часто в секунду.Есть ли лучший способ сделать это?
public class DateTimeManager : MonoBehaviour
{
//Singleton
public static DateTimeManager dateManager;
//Get other objects
private GameStatManager gameStatManager;
//Local var
private Text displayTime;
private Text displayDate;
private Image timeScaleImage;
float counter;
int dayCounter;
//Get speed icon
public Sprite slow;
public Sprite medium;
public Sprite fast;
//Output var
public DateTime dateTime;
void Start(){
//Singleton
dateManager = this;
//Get other objects
gameStatManager = GameObject.Find("GameStatManager").GetComponent<GameStatManager>();
displayDate = transform.Find("Date").gameObject.GetComponent<Text>();
displayTime = transform.Find("Time").gameObject.GetComponent<Text>();
timeScaleImage = transform.Find("TimeScale").gameObject.GetComponent<Image>();
//Initialize
dateTime = gameStatManager.GetDateTime();
//Set default
Time.timeScale = 1;
timeScaleImage.sprite = slow;
counter = 0f;
dayCounter = 0;
}
void Update()
{
counter += Time.deltaTime;
if (counter >= 1f / Time.timeScale){
counter -= 1f / Time.timeScale;
//Add 10 muinutes
dateTime = dateTime.AddMinutes(10);
//Add dayCounter
dayCounter++;
if(dayCounter >= 144){
dayCounter = 0;
gameStatManager.AddTotalDay();
}
//Display datetime
displayDate.text = dateTime.ToString("dd MMM, yyyy");
displayTime.text = dateTime.ToString("h:mmtt");
//To GSM
gameStatManager.SetDateTime(dateTime);
}
}
//Button function
public void ChangeTimeScale(){
// 1f = 10mins/sec || 6f = 1hrs/sec || 36f = 6hrs/sec
if (Time.timeScale == 1f){
Time.timeScale = 6f;
timeScaleImage.sprite = medium;
}
else if (Time.timeScale == 6f){
Time.timeScale = 36f;
timeScaleImage.sprite = fast;
}
else {
Time.timeScale = 1f;
timeScaleImage.sprite = slow;
}
}
}