【问题标题】:UNITY Looking for a way to store temporary global delta value for a specific spellUNITY 寻找一种方法来存储特定咒语的临时全局增量值
【发布时间】:2022-08-07 17:15:18
【问题描述】:

我对统一有点陌生,目前正在设计一个咒语架构多人游戏这可能会使法术参数随环境而变化(例如角色、装备、增益等...)。

是的,它是一个多人游戏我使用Mirror 作为多人服务框架,这意味着我可以将这些delta values 视为同步变量。

例如,我设计了一个火球法术。这个法术的伤害可能会增加,因为我可以获得一个增益。我的想法是使用scriptable object 来存储法术的基本参数值(例如伤害、法术半径等),然后将所有增量值(例如伤害增量)收集到某个地方。这个地方应该是玩家专属的。

通过这种方式,我可以通过将所有增量值添加到存储在可编写脚本对象中的基本伤害上来计算总伤害。

我的问题是在哪里分别存储每个咒语的这些增量值?

有没有一种全局方法来存储这些增量值而不实例化一个对象?

我试过scriptable objects,但由于它们是资产,在这种非持久性场景中使用它们可能不是一个好主意。我希望这些增量值可以在我不需要时由 GC 收集。

我还尝试在运行时创建scriptable objects,但效果不佳。我不想在实例化对象后访问这些scriptable objects,而当对象被销毁时scriptable objects 不再存在。我希望这些增量值可以在伴随游戏整个生命周期的全局变量中。所以我可以继续发射提高伤害的火球。

角色(英雄)已经有一个临时的脚本对象来存储所有法术的增量值。但是如果我只想提高像火球术这样的特定法术伤害呢?

或者实际上有更好的架构来实现这个拼写系统而不单独存储增量值?

在@derHugo 提醒后(非常感谢),我发现我忘了解释这是一个多人游戏。一个简单的面向所有玩家的静态类可能无法解决这个问题。

  • I want these delta values could be in a global variable that accompanies the entire life cycle of the game -> 为什么不直接使用public static class?或者一般来说是static 乘数?或者让它成为例如static 乘数列表,您可以根据需要添加和删除...
  • 好的,因为它是一个多人游戏,所以全局静态类会对所有游戏法术产生影响。我希望每个玩家都有一个单独的地方来存储他们自己的增量值。非常感谢@derHugo 指出了我在问题中遗漏的内容。这是一款多人游戏。
  • 不会改变任何东西 tbh .. 然后有一个静态字典并单独存储每个玩家的乘数 .. 虽然实际上你只需要自己玩家的统计数据 .. 其他玩家的统计数据将通过网络同步。 . 所以无论如何都没有必要把这些放在你身边

标签: c# unity3d game-development unity3d-mirror


【解决方案1】:

我发现我可以在不存储 delta 拼写参数的情况下满足我的需求。它们可以由其他SpellCalculator动态计算。

如果我坚持,我还可以通过在运行时动态创建ScriptableObject 来存储增量拼写参数。显然,这是不必要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多