게임 오브젝트를 만들떄 인터페이스를 사용하다보면 비슷한 기능을 하지만 적용하지 못하는 비슷한 인터페이스 함수들이 존재한다 클래스 Player, Npc, Item 로 예를들어 보자면 Player - Npc 대화, Plaer - Item 사용 기능으로 상호작용 한다면

어뎁터의 맞추기 형식으로 인터페이스를 사용 가능하다.


Player의 G키를 누를시 레이케스트를 이용해 range안의 오브젝트와 상호작용 하도록 설정했다.


인터페이스와 어뎁터를 만들어주고,


아이템의 이름을 출력하기 위해 연결시켜주고


npc는 상호작용으로 인사말 함수를 구현하였다.
결과
1) 아이템 사용(빨간 오브젝트)



두 오브젝트 모두 상호작용 가능한걸 확인할 수 있다.
단일의 인스턴스로 전역적인 접근이 가능하여 싱글톤을 사용하는 객체들의 정보를 어디서나 전역적으로 저장 가능하다.
이로인해 편리하게 데이터의 저장이 가능하도록 하는 기능이지만, 데이터의 의존도가 높아지게되고 데이터의 보호수준에 따라 의도치않은 데이터의 변화가 일어날 수 있다.

instance를 static으로 선언하여 전역적인 접근이지만 private으로 설정하여 직접적인 영향을 받게 설정하지 않는다.
public 에서 Instance의 프로퍼티를 사용하여 instance가 없을경우 GameManager 오브젝트를 생성하고 GameManager스크립트를 추가해준다. 저장할 정보는 score로 지정해주었다.

Awake에서 CreateInstance()를 실행하는데 Awake에서 instance가 존재하지 않을 때 instance를 현객체를 사용하고 DontDestroyOnLead를 통해 씬을 변경하거나 어디서든 정보를 저장하도록 설정한다. 만약 instance가 있을경우 뒤에 만들어진 GameManager는 삭제한다.

GameManager의 score를 level1, level2 모두 영향이 가도록 스코어를 지정해주었고 버튼을 누를때마다 GameManager의 score가 하나씩 상승하게 구현하였다.

2번을 누를시 Level2, 1번은 Level1씬으로 가도록 설정





다음과같은 출력 결과를 볼 수 있다.