【问题标题】:Unity3D scripting timeSinceLevelLoad variable not returning c#Unity3D脚本timeSinceLevelLoad变量不返回c#
【发布时间】:2015-12-12 18:48:32
【问题描述】:

我正在设计我的第一个游戏,我正在尝试创建一个步长为 5 秒的时间变量(比如比实时慢 5 倍)。

这是我拥有 GUI 的地方(仅粘贴相关部分):

using UnityEngine;
using Assets.Code.Interfaces;
using Assets.Code.Scripts;
using Assets.Code.PowerPlants;
namespace Assets.Code.States

Debug.Log (TimeManager.gametime);
public void ShowIt()
    {

GUI.Box (new Rect (Screen.width - 650, 10, 100, 25), TimeManager.gametime.ToString() );  // GAME TIME HOURS
}

这是计算我的游戏时间的地方:

using System;
using UnityEngine;
namespace Assets.Code.Scripts
{
    public class TimeManager
    {
        public static int gametime;
        public TimeManager ()
        {
        gametime = (int)Time.timeSinceLevelLoad / 5;
        }
    }
}

我没有收到错误,但游戏时间的值始终为 0。这以前有效,但不再有效,我不知道为什么。有什么提示吗?

【问题讨论】:

    标签: c# unity3d unity3d-gui


    【解决方案1】:
    namespace Assets.Code.Scripts
    {
        public class TimeManager
        {
            public static int gametime 
            { 
               get { return (int)Time.timeSinceLevelLoad / 5;  }
            }
        }
    }
    

    ctor 在您的情况下没有用,只需添加一个返回您需要的值的属性。

    【讨论】:

      【解决方案2】:

      我想,这是因为你在TimeManager 的构造函数中只设置了一次gametime。所以,它永远不会更新。放到Update里就可以了。

      【讨论】:

      • TimeManager 不是 MonoBehaviour,所以它没有更新。你是对的,因为它在 ctor 中设置了一次并且从未更新。
      • 好的,那么你可以给它一个更新方法,并在你需要新值之前从另一个方法调用它。
      • 您确实可以做到,但请查看我的答案(我并不是说这是可能的最佳答案)。 Unity 已经负责更新 timeSinceLevelLoaded,他所需要的只是除法。如果不是每帧都进行调用,那么在 Update 中运行会有点浪费。但同样,您做对了,添加更新并从 MonoBehaviour 调用它是一种解决方案。
      猜你喜欢
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      相关资源
      最近更新 更多