본문 바로가기
유니티5 독학 & 게임 제작

유니티5 독학하기 그 95번째 걸음-총알 발사의 구현part2

by 인터넷떠돌이 2018. 10. 25.
반응형

안녕하세요?


지난번 포스팅 마지막에서 Body 게임 오브젝트에 자식 오브젝트로 빈 게임 오브젝트를 생성하는 것 까지 보여 주었습니다. 그래서 이제는 총알 발사를 위해서 스크립트를 작성해야 하는 단계가 왔다는 생각이 들어서, 여기서는 먼저 스크립트를 코딩하는 것 부터 보여 드리겠습니다.



먼저 Scripts라는 폴더에 BulletCreate.cs라는 스크립트를 생성하도록 합니다.



그리고 광역변수를 4개 선언해 주는데, 게임 오브젝트 형식의 변수 bulletShot은 미사일 프리펩을 가르키며, bulletFireLine이라는 것은 총알이 발사될 총구의 위치라고 볼 수 있습니다. 그리고 이어서 bulletSpeed는 총알이 발사되는 딜레이고, bool형식의 변수인 bulletAllow는 총알을 발사할 수 있는 상태인지 알려주는 변수입니다.



그리고 나서 시작 시점에서 총알을 발사할 수 있는지 여부를 살펴서, gunSafePin이라는 bool변수를 true로 바꾸어서 소위 안전핀을 해제해 주도록 합니다.



그리고 Update()함수에서는 총알을 발사하는 함수만을 따로 계속해서 호출 하도록 설계를 합니다.



그리고 나서 먼저 안전핀인 gunSafePin이 true인 상황에서 KeyCode로 A가 들어오면 코루틴이 호출되도록 만들어 줍니다.




그리고 나서 잊으면 안되는 것이 바로 유니코드의 줄끝을 윈도우즈에 맞도록 만들어 주도록 합니다.



이제 유니티5로 돌아와서 계층뷰에서 Player 게임 오브젝트를 선택 하도록 합니다.



그리고 총알을 발사하기 위해서 총알을 생성하는 논리가 담겨있는 BulletCreate.cs를 컴포넌트로 추가해 줍니다.


그리고 위 스크린샷처럼 총알의 프리펩을 두군에 모두에 드레그 앤 드롭으로 놔 주도록 합니다.



그리고 KeyCode가 무엇인가 했더니, 그냥 키보드에 있는 버튼 그대로가 대입이 되는 코드라고 합니다.




이미 A키는 부스터로 사용하고 있기 때문에, 위 스크린샷처럼 일단 S키를 누르면 총알이 발사될 수 있도록 합니다.



그런데 유니티5에서 플레이 버튼을 누르자 위 스크린샷처럼 계속 에러가 뜹니다. 이게 왜 뜨는가 했더니, Player오브젝트에 rigidbody2D가 없어서 생기는 것 이었습니다.



그래서 이전에 Player 였던 Body 게임 오브젝트로 가서 RigidBody2D를 복사해서......



Player 게임 오브젝트에 붙여넣기를 하도록 합니다.



하는 김에 아예 CircleCollider 2D도 추가해 주도록 합니다. 이게 없으니, 플레이어 캐릭터가 바닥에 서 있기는 커녕, 바닥을 통과하는 상황이 벌어집니다.




그리고 Player 게임 오브젝트의 Tag를 Player라고 만들어 주도록 합니다.



그리고 아예 혹시나 몰라서 AudioSource나 Animator도 Body에서 복사해서 Player에 붙어넣기를 하도록 해 봅니다.



일단 유니티5에서 플레이를 누르면 주인공 캐릭터가 앞으로 걷는 모션인데도 뒤로 밀리는 것을 볼수 있었습니다. 아무래도 rigidbody 2d와 같은 것이 충돌한다는 생각이 들어서, Body에 있는 다른 컴포넌트를 다 삭제해 주도록 합니다.



이제서야 플레이어 캐릭터가 제대로 앞으로 걸어가는 것을 볼 수 있었습니다. 이렇게 하는 것으로 새로운 것을 시도하면서 생성이 된 오류는 해결이 되기는 되었습니다. 그러나 여전히 총알 발사와는 거리가 있는데, 이에 대해서 계속해서 작업을 진행하였으며, 이번 포스팅에서 이어서 하기에는 너무 길어서 여기서 끊고, 다음 포스팅에서 나머지 작업에 대해서 올리도록 하겠습니다.

반응형