在Unity C#中创建游戏时间系统



我正在为我在Unity的游戏制作一个游戏系统。这是一个使用湖泊图像的2D钓鱼游戏。你点击某个地方投掷鱼竿,开始钓鱼。我想在游戏中有时间系统,主要是因为我想代表鱼;每小时活动";行为我想把它做成这样的地方,如果它是清晨,鱼更活跃,你会得到更多的诱饵,或者如果它的夜间特定类型的鱼更活跃。此外,我想在时钟到达时(例如20:00)慢慢开始减少SpriteRenderer RGB颜色值。";dims";这张照片给人的感觉越来越深。到23:00时,画面几乎完全变黑了。

这里所说的就是我在剧本中要做的。我有一个名为TimeSystem的脚本。在那里我有两个属性";小时;以及";分钟";以及2个称为"0"的浮点字段;定时器";和minuteToRealTime在游戏分钟中表示。

然后,在Update方法中im设置timer-=Time.deltaTime;然后我开始一些检查:

if (timer <= 0)
{
Minute++;
OnMinuteChanged?.Invoke();
if (Minute >= 60)
{
Hour++;
Minute = 0;
if (Hour >= 24)
{
Hour = 0;

}
OnHourChanged?.Invoke();
}

然后设置timer=minuteToRealTime;

我做这些检查是为了在它达到60时将我的分钟设置为0,或者在它达到24时将小时设置为0。

此外,我正试图使用"操作"委托在特定的时间或分钟触发事件。(不知道这是否是正确的方法)

这就是我的问题。

在那之后,我做了一个检查,看看现在是什么时间,我试图做以下事情:

if (Hour >= 20 || Hour <= 4) // if the hour is between 20:00 and 04:00 i do the darkening process
{
float oldRValue = _gameObject.GetComponent<SpriteRenderer>().color.r;
float oldGValue = _gameObject.GetComponent<SpriteRenderer>().color.g;
float oldBValue = _gameObject.GetComponent<SpriteRenderer>().color.b;
_gameObject.GetComponent<SpriteRenderer>().color = new Color(oldRValue - 0.004f, oldGValue - 0.004f, oldBValue - 0.004f,255);
}
else 
{
//same thing here but increasing color values so the picture brighens up again until 255,255,255,255 RGB and alpha values
}
timer = minuteToRealTime

基本上,将旧的RGB值存储在局部变量中,每一帧都会按指定的量减少或增加它们(我在示例中使用-0.004f,但这只是一个示例。如果一切正常,那么很容易通过尝试不同的数字来平衡这些数字,这样画面变暗更平滑)。

所以我从12:00开始玩游戏,一直到20:00,然后第一次检查时间是>=20:00,画面开始变暗。这非常好。然后在早上5点,画面开始慢慢变亮。昨天试过并测试过,看起来和感觉都很好,一切都在相应地工作。。。直到我检查第二个周期会发生什么。因此,早上5点后,天空变得明亮起来,一切都很凉爽,但当比赛第二次进入20点时,一切都没有发生。我的代码只在前24小时执行,当我将小时数重置为0时,它就会停止工作。。我还附加了一个文本网格,它在UI中显示时钟,并且时间的文本表示是正确的。文本正常工作,它将分钟设置为60,然后将其重置为0,并将+1添加到小时。当小时数达到24时,它们被重置为0,同样的过程不确定地重复。所以我希望";改变画面的颜色";按小时工作,但不知何故,它只在第一次工作。。。它只工作一次,就这样……当时钟第二天20:00再次响起时,画面的颜色并没有像预期的那样变暗。

我想指出的是,我对编程还很陌生,我主要制作TicTacToe和PingPong等游戏机应用程序或类似的游戏。但我想提高一点,开始学习使用Unity。所以,是的,现在我有一个简单的背景场景,带有一个按钮的ui面板,当你点击它时会显示一个地图和一个时钟的文本网格(至少看起来工作得很好)。现在我正在为我想在比赛中创造的时间而努力,但我被卡住了,找不到解决方案。我在网上读到,可以使用.NET中内置的DateTime和Timespan结构,然后更新每帧的时间。。但我不知道该怎么做。如果有更简单的方法来制作游戏日期和时间系统,请告诉我。我也希望有几秒钟和几年的时间。。也许几个月也不错,或者在我的游戏中建立一个完整的日历系统。但是我不知道如何构建它,所以我选择先尝试分钟和小时。。

不管怎样,如果有人真的会读到这篇文章的话,这是一堵长长的文字墙,因为它的AF很长,但我希望能得到一些帮助。如果你需要更多关于我的代码的信息,请告诉我,但我认为我涵盖了最重要的内容。

在理想的情况下,我希望我的时钟游戏中的时间表示为Hour:minute,旁边可能会有一条文字,上面写着周一、周二、周三。。这样,我有一天可以在游戏中举办活动,例如,如果现在你的时间是星期一14:00,我可以介绍一个";锦标赛;可能从周五14:00开始。因此,当周五下午14:00时,你可以去比赛地点开始钓鱼比赛。但是的,这只是我现在的梦想:D

无论如何,感谢您抽出时间,祝您度过美好的一天!:)

我让它与DateTime一起工作!事实证明,对我当前的时间说AddMinutes(1)并相应地更新它很容易。我在一个50行的剧本里得到了我想要的一切!我为自己感到骄傲,再次感谢周为我指明了正确的方向:D

关于精灵渲染器,我必须注意一件重要的事情。颜色R G B属性,默认情况下从1开始。我以为它们从255开始,我试图降低这个值,但这把我的代码搞砸了。相反,你想要的是在0和1之间减去/添加(取决于你的需要)像0.004f这样的浮动数字,以使图像变亮或变暗:)

只是说,为了将来参考任何遇到这个问题的人,他们可能会觉得这很有用:)所以这个话题解决了!

相关内容

  • 没有找到相关文章

最新更新