2023. 7. 20. 23:35ㆍGAME/Unity
바빠도 매일 블로그를 쓰려고 노력중입니다. ㅎㅎ
자 그래서 컴포넌트 패턴에 대해서 알아보았습니다.
이제 드디어 총알을 제작할 차례입니다.
총알 스크립트를 만들어보죠!

총알도 여러 방법으로 구현할수가 있겠죠.
순간적인 힘을 가해서 물리를 적용해 발사하는 방법..등
하지만 저는 이렇게 해 보겠습니다.
발사된 순간 자신을 발사 방향으로 일정한 속력을 가지고 이동한다.
즉 이것도 방향과 속력이 있네요.. 플레이어 이동과 동일하다는 말입니다!

이런식으로 구성을 해 보았습니다.
방향은 아직 모릅니다..
기본적으로 총알은 총구에서 나오기 때문에 총구의 방향을 따라야 하죠.
하지만 지금 총알은 생성된것이 아니기 때문에 총구의 방향을 모르죠?
이제 스크립트를 작성했으니 Bullet 게임오브젝트를 하나 만듭니다.

여기에 스크립트를 드래그 해서 넣어줍니다.

Bullet 객체에 스크립트가 생겼습니다.
아까 만든 방향과 속력을 입력하는 란이 생겼네요.
y를 1로 , Speed 를 1으로 조정을 하고 실행을 해보면
총알이 정상적으로 날아가는 모습을 볼 수 있습니다.
총알의 Sprite Renderer Color을 Red로 바꿔주면 완료!

이 총알에는 다음과 같은 정보가 들어있습니다.
transform
color
bullet
.....
..
지금은 여러 문제가 있습니다.
총알이 현재 씬에만 존재하고
총알이 여러개라면 각자 독립적이라서 수정,삭제등이 원할하지 못하고
암튼 이 총알 객체의 관리가 상당히 힘듭니다.
그러면 이러한 생각을 할수가 있겠죠.
저 정보들을 파일로 저장해놓고 꺼내 쓰면 되는거 아니야?
네 맞습니다. 유니티에서는 그것을 프리팹 이라고 합니다.
게임 오브젝트 설계도(파일)를 하나 만들어두고
그것을 필요할때마다 설계도를 보고 만들면 되죠?
그래서 공장과 비슷합니다.
그러면 이제 Bullet을 설계도(프리팹)로 만들어 봅시다.
간단합니다.
프로젝트 폴더가 있죠? 현재 씬에 배치되어 있는 Bullet을 그냥 여기로 끌어오시면...

파란색 정육면체(?)로 Bullet이 만들어졌습니다.
클릭해서 본다면

총알 하나가 공간상에 있는것이 보이군요.
그럼 이제 Color를 노란색으로 바꿔봅시다.
그러면 이 설계도로 만들어진 Bullet은 모두 노란색이 되겠죠?
앞서 설명드렸던 컴포넌트 패턴의 장점과 같이 추가/수정/삭제 에 대해서 매우 좋습니다.

이제 이놈의 Transform의 postion을 0,0,0으로 돌려놓고요
진짜 사격을 진행 해 보겠습니다.
앞서 만들었던 PlayerFire 스크립트에 이렇게 작성합니다.

결국 프리팹도 게임 오브젝트를 파일로 만든것 이기 때문에 게임오브젝트 입니다. 게임 오브젝트 타입으로 받습니다.
마우스 버튼을 클릭할시 Instantiate 를 하네요.
Instantiate 는 이렇게 생각하시면 됩니다.
Bullet이라는 설계도를 받아서 Bullet 공장에서 Bullet을 찍어낸다.
그리고 생성된게 GameObject 타입의 bullet으로 가는거죠.
결국 총알은 사격자의 위치에서부터 날아가니까 생성된 총알을 내 위치로 이동시키면 되는것이죠!
자 그럼 플레이어를 본다면..

Player Fire에 Bullet Factory가 None 즉 없습니다. 그래서 연결을 시켜줘야 하죠..
아까 만들어 두었던 Bullet 프리팹을 이 칸에다 드래그 해서 연결을 시켜줍시다.

이런식으로 됩니다. 이제 실행을 해 보면..
사용자가 마우스 왼쪽 버튼을 클릭할시 총알이 생성되었네요.
자 이제 마지막으로 해야할것은 총알이 움직이게 해야겠죠?
총알을 움직이는 스크립트는 어디있었나요? 네 Bullet이죠.
그러니까 생성된 총알에게서 Bullet이라는 스크립트를 가져와야 합니다.
이 행위는 Getcomponent로 할 수 있습니다.

스크립트를 가져오고 방향을 사격자의 위 방향으로 합니다.
아니 총알은 앞방향으로 쏴야지 왜 위쪽 방향인가요?
Vector2는 상하좌우여서 결국엔 위쪽 방향이 2d에서는 앞쪽 방향이 되죠.
Vecotr2.up과 transform.up의 차이는 절대 기준인가 내 기준인가의 차이입니다.
(회전을 하면 내 기준의 앞방향은 변경되니까요.)
사격자의 기준이니까 나의 기준을 써야겠죠?
마지막으로 bullet의 속력을 주어서 총알을 발사하는 행위를 합니다.
이런식으로 마무리를 지었습니다.
아우 피곤하다... 아무도 안보겠지만 수고하셨습니다. 내일봅시다!
'GAME > Unity' 카테고리의 다른 글
의식의 흐름대로 게임 만들기 6. 적과 총알의 충돌 처리 (0) | 2023.07.22 |
---|---|
의식의 흐름대로 게임 만들기 4. 플레이어 사격 (0) | 2023.07.19 |
의식의 흐름대로 게임 만들기 3. 플레이어 이동 보완 2 (0) | 2023.07.16 |