You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从类实例中读取静态属性?(基于Time类多态场景)

解决方案:通过接口抽象实现Time类的调试/发布切换

问题根源

你原来的思路走不通有两个核心原因:

  1. C#中静态成员属于类本身,不能通过实例对象访问,所以timer.deltaTime会触发编译错误
  2. 静态成员不支持多态,你用new关键字定义的TimeDebug.deltaTime只是隐藏了基类的静态成员,无法通过基类引用实现多态切换

正确实现方式

通过定义接口抽象时间提供逻辑,分别实现发布模式(包装Unity原生Time)和调试模式(返回固定值)的实现类,再通过接口参数实现多态传递。

1. 定义时间提供接口

public interface ITimeProvider
{
    // 用实例属性替代静态属性,支持多态
    float DeltaTime { get; }
}

2. 实现发布模式的时间提供类

包装Unity原生的Time.deltaTime静态属性:

public class UnityTimeProvider : ITimeProvider
{
    public float DeltaTime => UnityEngine.Time.deltaTime;
}

3. 实现调试模式的时间提供类

返回固定的调试值:

public class DebugTimeProvider : ITimeProvider
{
    public float DeltaTime => 0.2f; // 可自定义的固定调试值
}

4. 修改目标方法接收接口参数

void DoSomething(ITimeProvider timeProvider)
{
    // 正常访问DeltaTime,支持多态
    Debug.Log(timeProvider.DeltaTime);
}

5. 根据编译模式切换调用

利用Unity的编译宏自动切换:

#if DEBUG
DoSomething(new DebugTimeProvider());
#else
DoSomething(new UnityTimeProvider());
#endif

扩展说明

如果需要使用Time类的其他属性(比如timeScale、fixedDeltaTime),只需在ITimeProvider接口中添加对应的属性定义,再在两个实现类中分别实现即可。


内容的提问来源于stack exchange,提问作者oscar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:30:01