유니티 - 매니저(Manager)
2023. 1. 3. 00:40ㆍ유니티/기능
객체 지향에서는 각각의 클래스가 독립되어야 한다.
한 가지 클래스에서 여러가지 기능을 추가하게 되면 추후 수정 시 힘들어질 수 있다.
명령을 수행하는 클래스를 컨트롤러(Controller)하며
컨트롤러에 명령을 내리도록 요청하는 클래스를 매니저 (Manager) 라고 한다.
컨트롤러 간의 상호작용은 매니저를 통해서 이루어지게 된다.
매니저는 한 가지 매니저가 여러개가 생성되지 않게 하기 위해 싱글톤을 사용한다.
만약 한 가지 매니저가 여러개 생성 된다면, 한 번 요청에 두 번의 명령 수행이 이루어질 수도 있다.
간단한 예제를 기록하겠다.
중요한 것은 매니저의 사용이기 때문에, 오브젝트는 간단하게 만들겠다.
public class Object : MonoBehaviour
{
private int hp;
private int damage;
public int GetDamage(int _damage)
{
this.hp -= _damage;
// ** 남은 체력을 로그에 남긴다.
Debug.Log("남은 체력 : " + hp);
// ** hp를 반환시킨다.
return hp;
}
}
public class Player : Object
{
private void start()
{
hp = 100;
damage = 10;
}
}
public class Enemy : Object
{
private void start()
{
hp = 20;
damage = 2;
}
}
오브젝트 A 와 B 가 있으며, 둘은 각각의 체력과 공격력을 가지고 있다.
부모 클래스에서는 데미지를 받을 수 있게 함수를 만들었다.
이 둘 간에 데미지를 주도록 명령을 내릴 데미지 매니저를 추가한다.
public class DamageManager() : MonoBehaviour
{
// ** 싱글톤 인스턴스
private static instance;
public DamageManager Instance
{
get
{
if (instance == null)
instance = this;
return instance;
}
}
// ** 데미지를 받을 타겟과, 적용할 데미지를 매개변수로 받는다.
public int GiveDamage(GameObject _target, int _damage)
{
if (target != null)
target.GetDamage(_damage);
}
}
이제 각 컨트롤러에서 매니저 인스턴스를 받아와서 함수를 호출해주면 데미지를 넣을 수 있다.
public class Player : Object
{
private void Start()
{
hp = 100;
damage = 10;
}
private void Update()
{
// ** 좌클릭 시 실행
if (Input.GetMouseButton(0))
{
// ** 데미지를 줄 적 탐색.
// ** 코드는 임시로 대충 사용하였다.
GameObject enemy = GameObject.Find("Enemy");
// ** 매니저 인스턴스에서 데미지 입히기 함수를 호출
DamageManager.instance.GiveDamage(enemy, damage);
}
}
}
// ** 프로그램 실행 후, 좌클릭 입력 시
// 남은 체력 : 15
// 남은 체력 : 10
// 남은 체력 : 5
// ...
'유니티 > 기능' 카테고리의 다른 글
Unity - IOException 오류, 유니티 파일 접근 오류 (0) | 2023.03.25 |
---|---|
Unity - 폴더, 파일 탐색 및 생성 (0) | 2023.03.25 |
Unity - 클라이언트 데이터 저장/불러오기, 파일 유효성 검사 (1) | 2023.03.24 |
유니티 - 싱글톤 패턴(Singleton Patton) (0) | 2023.01.03 |
Unity - 기본 화면 구성 [2021.3.XX] (0) | 2022.12.06 |