unity3d 如何实现一个可以在Unity Inspector中修改的静态嵌套类?

cuxqih21  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(174)

我希望实现一个带有嵌套类的静态类,这些嵌套类可以在Unity Inspector中查看和修改。
如何实现这一目标有何建议?
我尝试过成功地使用嵌套的静态类,但是我无法将它们添加为组件以便在检查器中查看。
如何实现这一目标有何建议?
这是我的示例代码。如果没有Monobhavior,我就无法将其作为组件添加到检查器中。

  1. using UnityEngine;
  2. public static class Parameters
  3. {
  4. [System.Serializable]
  5. public static class GroupA
  6. {
  7. public static float varA = 1f;
  8. }
  9. [System.Serializable]
  10. public static class GroupB
  11. {
  12. public static float varB = 2f;
  13. }
  14. }

然后我可以调用它,例如。
Parameters.GroupA.varA;
提前感谢,抱歉我的代码臭。
最好的,罗布

nwnhqdif

nwnhqdif1#

我用“奥丁督察”来对付这种情况。

  1. using UnityEngine;
  2. using Sirenix.OdinInspector;
  3. public static class Parameters
  4. {
  5. [System.Serializable]
  6. public class GroupA
  7. {
  8. public float varA = 1f;
  9. }
  10. [System.Serializable]
  11. public class GroupB
  12. {
  13. public float varB = 2f;
  14. }
  15. [ShowInInspector]
  16. public static GroupA staticGroupA;
  17. [ShowInInspector]
  18. public static GroupB staticGroupB;
  19. void Start()
  20. {
  21. GroupA = new GroupA();
  22. GroupA.varA = 1f;
  23. GroupB = new GroupB();
  24. GroupB.varB = 2f;
  25. }

希望能帮上忙最好。

展开查看全部
ecbunoof

ecbunoof2#

我最终使用了一个第二次运行的单例。为此我在父类中添加了:

  1. public static Parameters myInstance {get; private set;}

并且对于每个内部类

  1. public GroupA groupA = new GroupA();

我删除了所有其他静态引用。

6ljaweal

6ljaweal3#

您的用例不需要第三方库。
而不是使用static在这一点上,我会使用ScriptableObject
这些是资产,因此任何东西都可以引用它们,它们可以存储序列化值并实现自己的逻辑。
因此,在您的情况下,

  1. [CreateAssetMenu]
  2. public class Parameters : ScriptableObject
  3. {
  4. [System.Serializable]
  5. public class GroupAClass
  6. {
  7. public float varA = 1f;
  8. }
  9. [System.Serializable]
  10. public class GroupBClass
  11. {
  12. public float varB = 2f;
  13. }
  14. public GroupAClass GroupA;
  15. public GroupBClass GroupB;
  16. }

然后通过Assets →右键单击→创建→参数创建一个资产
现在,您可以像往常一样通过检查器调整值。
最后,每当您需要访问它们时,您都有一个字段

  1. public Parameters parameters;

拖入相应的资产并通过以下方式访问值:

  1. parameters.GroupA.varA
展开查看全部

相关问题