帮助
开发常见问题

如何使用单例模式?

6min

单例是一种设计模式,确保在程序中只有一个特定类的实例。

单例模式提供了一个类的全局唯一实例,使其可以从其他需要它的脚本中轻松访问,例如管理逻辑、音频、用户界面和世界中的集中资源。

在ZEPETOScript中,您可以通过以下方式实现单例:

TypeScript


👍 提示

  • 如果场景中已经有一个附加了单例脚本的GameObject,您可以使用这种格式。
  • 如果没有,请添加代码以创建GameObject。
    • 示例: new GameObject("ObjectName").AddComponent<ClassName>();

让我们实现一个用于管理用户界面的单例示例:

1) 将UI > 文本和按钮添加到场景中。

  • 设置逻辑,当按下“增加分数”按钮时增加分数
  • 设置逻辑,当按下“减少分数”按钮时减少分数
Document image




2) 创建一个名为 "ScoreManager" 的脚本,其中将应用单例模式。

  • ScoreManager 脚本将负责增加/减少分数,并在从其他脚本调用时更新文本。
TypeScript




  • 脚本描述
    • private static _instance: 这是类中的一个私有静态变量,初始值为 null。
    • public static get Instance: 这个静态属性提供了一种方法,让外部代码可以访问这个类的唯一实例。
    • 检查 if (this.\_instance == null). 如果它为 null,使用 GameObject.FindObjectOfType<>() 查找并返回类型为 ClassName 的组件,并将其分配给静态变量。



3) 编写脚本后,返回检查器并连接文本组件。

Document image




4) 接下来,创建一个名为 "ScoreLogicSample" 的脚本,以演示如何调用单例。确保 ScoreManager 和 ScoreLogicSample 在同一目录中。

Document image

  • 像这样编写代码:
TypeScript




  • 在获取单例脚本时,正确指定路径是很重要的。
  • 您可以根据需要调整在您自己的脚本中调用 ScoreManager 的部分。



5) 按下 [▶︎(播放)] 按钮进行测试。

  • 当您点击 ScoreLogicSample 中的按钮时,您应该观察到 ScoreManager 中的函数被调用,使其按预期工作。
Document image