[참고 사이트]
https://dhshin94.tistory.com/137
서론
- 유니티 디자인 패턴을 검색하면 컴포넌트 패턴이 다가가기 쉽다는 내용이 있었다. 그래서 이번엔 유니티 컴포넌트 패턴에 대해 공부해보았다.
컴포넌트 패턴
- 위 참고사이트를 통해서 컴포넌트 패턴이란 무엇이고, 왜 사용하는지 알게되었다.
- 유니티는 기본적으로 컴포넌트를 활용하는 시스템이다. 실제로 오브젝트의 인스펙터 창에 들어가는 모든 것들이 다 컴포넌트에 해당한다. Transform, SpriteRenderer, Box Colider, Script 등등
- 내가 이해한 컴포넌트 패턴이란 오브젝트에 기능을 구현하기 위해 스크립트를 적용할 때, 기능을 구현하기 위한 하나의 스크립트가 아니라 세부 기능으로 나눈 여러 스크립트를 만든 다음 하나씩 추가하면서 기능을 구현하는 것이다.
즉, 구현하고 싶은 최종 기능이 있을 것이고, 그 안에 세부 기능들에 대한 각각의 스크립트를 생성해주고, 마지막에 해당 오브젝트에 추가하여 최종 기능이 구현되게 하는 것이라고 이해했다.
컴포넌트 패턴의 특징
- 각자 기능을 담당하는 컴포넌트들이 독립적으로 구현되어 있다.
- 이동 기능 컴포넌트, 물리 기능 컴포넌트, 애니메이션 컴포넌트 등 독립적으로 각자 기능을 담당하는 컴포넌트가 있는 것. - 어떠한 기능의 컴포넌트를 없앤다고 해서 다른 컴포넌트에 영향이 가지 않는다.
- +. -가 쉽다. - 코드의 의존성을 줄이고 재활용성을 가진다.
- 컴포넌트만 수정하면 되서 유지보수 시 편하다.
간단한 예시
- 오브젝트의 이동과 회전에 대한 기능을 추가.
- 이동 기능은 기본적으로 오른쪽으로 이동, 기준 포지션을 넘으면 왼쪽으로 이동. 이 때도 기준 포지션을 넘으면 다시 오른쪽으로 이동.
- 회전기능은 오브젝트가 오른쪽으로 회전.
=> 오브젝트가 이동과 회전, 두 개의 기능을 동시에 수행하는 것을 구현해보려한다.
▶ 하나의 스크립트로도 구현할 수 있지만 컴포넌트 패턴에 맞게 각 기능별로 스크립트를 만들어줬다.
▶ 이제 Move스크립트에는 이동기능 코드를, Rotate스크립트에는 회전기능 코드를 작성해보겠다.
[ Move.cs ]
public class Move : MonoBehaviour
{
[SerializeField]
bool moveRight;
void Start()
{
moveRight = true;
StartCoroutine("MoveCube");
}
IEnumerator MoveCube()
{
while (true)
{
if (transform.position.x > 4)
moveRight = false;
else if (transform.position.x < -4)
moveRight = true;
if (moveRight)
transform.Translate(0.5f * Vector3.right, Space.World);
else
transform.Translate(-0.5f * Vector3.right, Space.World);
yield return new WaitForSeconds(0.1f);
}
}
}
▶ 코루틴 함수를 사용하여 0.1초마다 이동하게 만들어줬다.
[ Rotate.cs ]
public class Rotate : MonoBehaviour
{
void Start()
{
StartCoroutine("RotateCube");
}
IEnumerator RotateCube()
{
while (true)
{
transform.Rotate(10 * Vector3.up);
yield return new WaitForSeconds(0.1f);
}
}
}
▶ 회전도 똑같이 0.1초마다 회전하게 만들어줬다.
[ 결과 ]
- 사람마다 사용하는 디자인 패턴이 다르지만 컴포넌트 패턴은 나에게 왠지 친숙한 느낌이었다. 지금은 간단한 예시만 구현했지만 직접 게임을 만들 때는 패턴을 고려하면서 사용해야 할 것 같다.
'Unity > Unity 디자인 패턴' 카테고리의 다른 글
[Unity 디자인 패턴] 팩토리 매서드 패턴(Factory Method Pattern) (0) | 2024.04.25 |
---|---|
[Unity 디자인 패턴] 심플 팩토리 패턴(Simple Factory Pattern) (0) | 2024.04.25 |
[Unity 디자인 패턴] 옵저버 패턴(Observer Pattern) (0) | 2024.04.22 |
[Unity 디자인 패턴] 싱글톤(SingleTon)에 대해 알아보자! (0) | 2024.04.16 |