의식의 흐름대로 게임 만들기 4. 플레이어 사격

2023. 7. 19. 23:30GAME/Unity

자 이제 플레이어가 마우스 버튼을 클릭하면 총알을 발사하고 싶습니다.
 
조금 더 구체적으로 말하면, 마우스 버튼을 클릭할시 총알 객체를 생성하고 총알은 플레이어가 바라보는 방향으로 일정한 속력을 가지고 이동한다. 가 되겠네요.
 
자 그럼 총알 발사 스크립트를 제작해 봅시다.
 

하지만, 여기서 의문점이 있습니다. 왜 스크립트를 굳이 2개를 만드나요?
그냥 플레이어 스크립트 하나만 만들어서 FIre,Move등 플레이어에 대해서 모든 처리를 하는 스크립트 하나만 만들면 되지 않을까요?
 
여기서 문제가 발생합니다.
 
간단한 예시를 들자면
마리오를 보면 굼바가 걸어다닐때가 있고 굼바가 날개가 달려 날아다닐때가 있습니다.
 
이것을 '굼바' 스크립트 안에다가 몽땅 넣을시 어떤 문제가 발생할까요?
 
한번 생각해보죠.
1.스크립트가 너무 길어져서 가독성이 떨어진다.
(모든 기능들이 마구마구 담겨있다면 읽기가 상당히 힘들것입니다.)
 
2.마리오에는 굼바 말고 엉금엉금 등 다양한 적이 있는데 엉금엉금도 날고싶다면 나는 스크립트를 또 작성해야한다.
(다른 적들에게 같은 기능을 넣으려면 같은 내용을 또 작성해야 합니다.)
 
3.기능 추가,수정,삭제가 까다롭다.
(2번과 비슷합닌다. 굼바가 날고싶을때 손보고 날고싶지 않을때 굼바의 스크립트를 손보고 까다롭습니다.)
 
하지만 이것을 'Fly' 라는 스크립트를 하나 만들어두고
그냥 굼바한테 달아주고 엉금엉금한테 달아주면 되는거 아닌가요?
 
만약 날아다닐때 "띠용" 효과음을 넣고싶다면 Fly 스크립트에서 효과음을 재생하고
 
굼바만 날고싶지 않을때는 굼바에게서만 Fly 스크립트를 없애면 되죠!
 
 

이렇게 한다면 쿠파, 심지어 마리오까지 날게 만들수 있겠죠.
 
유니티는 이러한 기법을 사용하는데요!
 
어떠한 객체에 물리를 적용하고 싶을때 물리 스크립트를 추가하고 적용하기 싫을때는 빼버리면 그만이죠!
 
이것을 정확히 말하면, 컴포넌트 패턴이라고 부르며 스크립트를 컴포넌트 라고 말합니다.
 
더 정확히 말하면 유니티에서 MonoBehavior를 상속받는 클래스를 컴포넌트라고 부르고 사용할수 있습니다.
 
결과적으로 이렇게 사용하면 추가/수정/삭제가 용이하다는것!
 
시간이 없어서 발사는 다음에...