HELP
개발 FAQ

Singleton을 어떻게 사용하나요?

6min
싱글턴은 프로그램 내에서 특정 클래스의 인스턴스가 하나만 존재하도록 보장하는 디자인 패턴입니다 싱글턴 패턴은 클래스의 단일 전역 인스턴스를 제공하여, 논리 관리, 오디오, 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"라는 스크립트를 생성하여 singleton을 적용합니다 scoremanager 스크립트는 점수를 증가/감소시키고 다른 스크립트에서 호출될 때 text를 업데이트하는 역할을 합니다 import { zepetoscriptbehaviour } from 'zepeto script'; import { gameobject } from 'unityengine'; import { text } from 'unityengine ui'; export default class scoremanager extends zepetoscriptbehaviour { // singleton 선언 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<>()를 사용하여 classname 유형의 구성 요소를 찾아 반환하고 이를 정적 변수에 할당합니다 3\) 스크립트를 작성한 후, 검사기로 돌아가서 텍스트 컴포넌트를 연결합니다 4\) 다음으로, singleton을 호출하는 방법을 보여주기 위해 "scorelogicsample"이라는 스크립트를 만듭니다 scoremanager와 scorelogicsample이 같은 디렉토리에 있는지 확인하세요 이와 같이 코드를 작성하세요 import { zepetoscriptbehaviour } from 'zepeto script'; import { gameobject } from 'unityengine'; import { text, button } from 'unityengine ui'; // singleton 스크립트 가져오기 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(()=> { // singleton에 선언된 함수 호출 this scoremanager increasescore(10); }); this decreasescorebutton onclick addlistener(()=> { // singleton에 선언된 함수 호출 this scoremanager decreasescore(10); }); } } 싱글톤 스크립트를 가져올 때 경로를 올바르게 지정하는 것이 중요합니다 필요에 따라 자신의 스크립트에서 scoremanager가 호출되는 부분을 조정할 수 있습니다 5\) \[▶︎(재생)] 버튼을 눌러 테스트합니다 scorelogicsample에서 버튼을 클릭할 때 scoremanager의 함수가 호출되는 것을 관찰해야 하며, 예상대로 작동합니다