助けて
開発FAQ

シングルトンをどのように使用しますか?

6min
シングルトンは、プログラム内に特定のクラスのインスタンスが1つだけ存在することを保証するデザインパターンです。 シングルトンパターンは、クラスの単一のグローバルインスタンスを提供し、ロジック、オーディオ、ui、世界内の集中リソースを管理するなど、必要な他のスクリプトから簡単にアクセスできるようにします。 zepetoscriptでは、次のようにシングルトンを実装できます: private static instance classname = null; public static get instance() classname { &#x9;if (this instance == null) { &#x9; this instance = gameobject findobjectoftype\<classname>(); &#x9;} &#x9;return this instance; } 👍 ヒント シーンにシングルトンスクリプトが付いたgameobjectがすでにある場合、この形式を使用できます。 ない場合は、gameobjectを作成するためのコードを追加します。 例: new gameobject("objectname") addcomponent\<classname>(); uiを管理するためのシングルトンを実装してみましょう: 1\) シーンにui > テキストとボタンを追加します。 "increasescore"ボタンが押されたときにスコアを増加させるロジックを設定します。 "decreasescore"ボタンが押されたときにスコアを減少させるロジックを設定します。 2\) "scoremanager"というスクリプトを作成し、シングルトンを適用します。 scoremanagerスクリプトは、スコアを増減させ、他のスクリプトから呼び出されたときにテキストを更新する責任があります。 import { zepetoscriptbehaviour } from 'zepeto script'; import { gameobject } from 'unityengine'; import { text } from 'unityengine ui'; export default class scoremanager extends zepetoscriptbehaviour { // シングルトンの宣言 private static instance scoremanager = null; public static get instance() scoremanager { if (this instance == null) { this instance = gameobject findobjectoftype\<scoremanager>(); } return this instance; } // 変数の宣言 public scoretext text; private currentscore number; start() { // テストのために初期スコアを0に設定 this currentscore = 0; } // 他のスクリプトがincreasescoreを呼び出すことができます public increasescore(amount number) { this currentscore += amount; this scoretext text = `スコア ${this currentscore}`; } // 他のスクリプトがdecreasescoreを呼び出すことができます public decreasescore(amount number) { this currentscore = amount; this scoretext text = `スコア ${this currentscore}`; } } スクリプトの説明 private static instance これはクラス内のプライベート静的変数で、初期値はnullです。 public static get instance この静的プロパティは、外部コードがこのクラスのユニークなインスタンスにアクセスする方法を提供します。 チェック if (this \\ instance == null) もしnullであれば、gameobject findobjectoftype<>()を使用してクラス名のコンポーネントを見つけて返し、それを静的変数に割り当てます。 3\) スクリプトを書いた後、インスペクターに戻り、テキストコンポーネントを接続します。 4\) 次に、「scorelogicsample」というスクリプトを作成し、シングルトンを呼び出す方法を示します。scoremanagerとscorelogicsampleが同じディレクトリにあることを確認してください。 このようにコードを書きます import { zepetoscriptbehaviour } from 'zepeto script'; import { gameobject } from 'unityengine'; import { text, button } from 'unityengine ui'; // シングルトンスクリプトをインポート import scoremanager from ' /scoremanager'; export default class scorelogicsample extends zepetoscriptbehaviour { public increasescorebutton button; public decreasescorebutton button; // scoremanager型の変数を宣言 private scoremanager scoremanager; start() { // scoremanagerを変数に割り当て this scoremanager = gameobject findobjectoftype\<scoremanager>(); this increasescorebutton onclick addlistener(()=> { // シングルトンで宣言された関数を呼び出す this scoremanager increasescore(10); }); this decreasescorebutton onclick addlistener(()=> { // シングルトンで宣言された関数を呼び出す this scoremanager decreasescore(10); }); } } シングルトンスクリプトを取得する際には、パスを正しく指定することが重要です。 必要に応じて、自分のスクリプト内でscoremanagerが呼び出される部分を調整できます。 5\) \[▶︎(再生)]ボタンを押してテストします。 scorelogicsampleのボタンをクリックすると、scoremanager内の関数が呼び出され、期待通りに動作するのを観察する必要があります。