이번에는 사운드를 제작해서 넣어보도록 합시다.
기본에있는 사운드를 게임에 넣기위해서는 xna툴을 간단하게 사용해야합니다.
사용자 삽입 이미지

오디오 툴에 들어가 주시구요~

사용자 삽입 이미지


























새 프로젝트 클릭하시고 TutorialAudio 란 이름의 프로젝트를 생성합니다.

사용자 삽입 이미지

Wave Bank 오른쪽 클릭해서 새로운 웨이브 뱅크를 만듭니다
사운드 뱅크도 위와 같은방법으로 만듭니다.
사용자 삽입 이미지
예 윈도우즈에 가셔서 Tile Horizontally 클릭하시면 정열이되서 표현됩니다. 보기좋게~ㅎ

사용자 삽입 이미지
사용할 웨이브 파일을 Insert 해주시구요~ 오디오 - 웨이브 - 두개의 파일 있습니다.
사용자 삽입 이미지
아래 두파일을 사운드 뱅크로 드래그 해서 올려놓습니다.

이제 파일을 저장하시구요 다시 xna스튜디오로 돌아갑시다.
사용자 삽입 이미지
솔루션 탐색기에 오디오 폴더안에 아까 만든 프로젝트 파일을 추가합니다.
사용자 삽입 이미지

프로젝트 파일을 저장할 곳~웨이브뱅크는 그파일 참조자 이고 이 파일을 참조하여 저장할 사운드뱅크
를 선언합니다.

사용자 삽입 이미지
로드 컨텐츠로 가셔서 음원 파일들을 로드 시킵니다. 위와 같은 형식입니다.

사용자 삽입 이미지
매시간 실행되는 곳에 이 것을 추가시킵니다.

이제 어디어디에서 실행되라만 설정하면 됩니다. 미사일을 발사했을때, 격추했을때 두가지입니다.
사용자 삽입 이미지
미사일 발사시 사운드뱅크를 플레이한다 미사일 런처라는 파일을
wav를 xna에서 지원하는 사운드로 변환되어서 출력된다. 그래서 웨이브뱅크에서 사운드뱅크로 드래그해서
올려놓은것이다.

이제 충돌시
사용자 삽입 이미지
이부분만 추가하면 되겠습니다.

디버깅해봅시다.



3D슈팅게임의 제작을 이것으로 마치겠습니다.
위에 화면같이 잘나오는군요 ^^;
728x90
이제 적기와 미사일의 충돌 체크하겠습니다.
먼저 미사일이 이동하는 중에 충돌체크를 합니다.
사용자 삽입 이미지
















Testcolletion(misaile) 이 줄을 추가합니다.

사용자 삽입 이미지

함수를 선언합니다. Intersects 를 사용하기전 영역을 설정하는데
바운딩스피어로 3D의 구영역을 설정해서 두개의 충돌을 체크합니다.

다음 시간은 사운드에 관해서 마무리 작업하겠습니다.^^

각도조절하는 수치가 0.05로 해놨는데 0.01로하는게 확실히 게임하기 좋군요^^;
수정하실분 수정해주시구요^^디버깅해봅시다.

맞추기힘들어 ㅜ
사용자 삽입 이미지
728x90

이번시간은 적기의 출현에 대해서 하겠습니다.
선언부분에 작성합니다.

사용자 삽입 이미지










랜덤 r로 최대 최소 사이의 값을 랜덤하게 출력할 생각입니다.
로드컨텐츠로 가서 적기를 로드시켜줍시다.

사용자 삽입 이미지









적기를 로드 시킵니다. 로테이션은 모델이 그냥 출력하게되면 뒤집어서 나오더라고요
모델링할때 적절하게 생각해서 돌려놓으면 수정할필요가 없는데-_-위아래가 바뀐체
로드되어버려서 방향을 180도 뒤집습니다. ㅋ 매스핼퍼 파이는 아시죠 ㅎ

매시간 실행되는 함수를 하나 만듭시다.
UpdateEnemyShips(); 함수 선언해주시구요
함수를 만듭니다.
사용자 삽입 이미지































상당히 긴데요 별거 없습니다. 적기가 살아있다면 위치를 이동시킨다.
lerp 를 써서 랜덤하게 x,y,z좌표와 속도를 지정합니다.
MathHelper.Lerp 에 대해서는 2D게임에서 언급하였습니다.

사용자 삽입 이미지









화면에 출력시킵니다.

사용자 삽입 이미지




























다음은 적기와 미사일이 충돌시 사라지는 것을 하겠습니다.

728x90

최근 시험기간과 과제물의 압박으로 포스팅이 많이 늦었군요...다시 시작해봅시다.. ㅎㄷㄷ
시작하기전에 잠시;;;말씀드리면 이 포스팅들은 tutorial 의 느낌보다는 제가 공부하는 느낌으로 작성
하는 것이므로-_-틀린내용이나... 모르는내용이 있을수 있습니다. ㅎ 다같이 공부하는 느낌으로 갑시다.^^
틀리면-_-;;;댓글도 달아주셔도 되구요 테클 환영이에요 플밍에대해서 잘 모르지만 게임제작이 하고싶어서
하게 된 학생이라서요^^;  

자 이번에는 헤드놈의 방향에 맞춰서 미사일을 발사시켜보겠습니다 2D게임의 미사일 발사와 비슷합니다.

가장먼저 해야 할것은 게임오브젝트 클래스에 있는 내용을 고쳐줘야 하겠습니다.

사용자 삽입 이미지









게임1 클래스로 돌아가서 선언합니다.

사용자 삽입 이미지




다음 로드컨텐츠에서 미사일수만큼 모델을 로드시킵니다.

사용자 삽입 이미지







  KeyboardState previousState;//연속방지용 키보드현재상태 맨위 선언쪽에 이거추가해주시구요

이제 스페이스 키를 눌렀을때 미사일발사 함수를 호출합시다 2D게임과 같은 형식입니다.

사용자 삽입 이미지





키보드 상태를 조절해서 이프문으로 한번에 한번만 함수를 호출하는 형식입니다.

사용자 삽입 이미지

함수를 작성합니다. 3D형태라서 위치와 좌표를 따로 함수로 지정해서 값을 리턴하겠습니다.

사용자 삽입 이미지
X,Y 좌표를 런쳐헤드에서 가져와서 좌표를 설정하고 이제 Z축으로만 움직이면 이동경로가 되겠습니다.
리턴합니다 노말라이즈(이동한다(앞방향으로,이동좌표에서))*속도만큼 곱


사용자 삽입 이미지
이동하는만큼 미사일위치를 계속 바꿔줘야 할것입니다.


이제 발사되었다면 미사일을 앞에서 적은 함수만큼 이동시켜야 할것입니다.
사용자 삽입 이미지

매시간 실행되는 함수입니다. 미사일이 발사되었다면 미사일을 이동좌표만큼 움직입니다.

이제 발사된 상태라면 화면상에 그립니다.
사용자 삽입 이미지







예이제 디버깅해보도록 합시다.
사용자 삽입 이미지
잘 날아가는군요 `ㅡ` 화면이 좀 검게 변했는데
2.0에서 3.0 으로 옮겼더니 전체적으로 색이 검게 변했네요;;
FBX 성능관련한 문제인데 이부분에 대해서는 나중에 따로 포스팅하겠습니다.
728x90
이제 미사일의 헤드부분을 불러와서 로테이션 시켜보겠습니다 키보드 입력에 따라서 ^^

사용자 삽입 이미지








게임오브젝트에 미사일헤드를 선언합니다.

로드컨텐츠에 가셔서 미사일헤드 3D파일을 추가시킵시다.

사용자 삽입 이미지






이제 움직임을 제어해봅시다.

그전에 소스를 조금 수정해야 되겠습니다;;;; ㅈㅅ
사용자 삽입 이미지








월드 부분에 XYZ순으로 작성해주세요 -_ -YXZ였죠?ㅎㅎ;;;
키보드 입력을 받아서 움직여봅시다.
사용자 삽입 이미지















X,Y,Z 에 움직임을 주시구요
MathHelper.Clamp 사용해서 각도를 제한하도록 합시다.
위 문법의 사용법은 2D 슈팅게임만들기에서 언급한내용입니다^^

이제 다되었습니다 디버깅해봅시다^^
사용자 삽입 이미지

좌우로 잘움직입니다.
다음시간은 미사일을 구현하도록 하겠습니다.^^
728x90
이번에는 미사일런처 를 출력시키겠습니다.-_-런처?;;;미사일거치대?;;;미사일...뭐...흠...조종대?...그런거..

출력물이 하나더 올라가는것보다는 이번 장에서 중요한것은 게임오브젝트 클래스를 만들것입니다.

2d게임만들기에서 게임에 등장하는 오브젝트들을 한번에 만들기위해 클래스를 만들었던것과 동일합니다.
그럼 클래스를 만들어봅시다.

위에 유징부분은 아래와 똑같이 붙여넣기 해주세요^^
사용자 삽입 이미지


















클래스를 하나 추가하시고 제목은 GameObject 로 지정합시다.
3D를 받을 모델과 그 모델의 위치 각도 크기를 지정할수 있습니다.

앞에서는 게임오브젝트클래스 없이 가져왔기 때문에 본래 소스들이 조금 바뀌겠죠?
사용자 삽입 이미지



위와 같이 선언해주시구요~

사용자 삽입 이미지







각 각 수정합니다.
미사일거치대 크기를 수정하였습니다. 원래사이즈에 1/5 크기죠? ㅎ

앞시간에 3D Draw를 위해 만들었던 함수도 이름을 아래와 같이 바꿔주시고
DrawGameObject(){
사용자 삽입 이미지











이펙트월드부분이 제가 이해를 잘못한듯합니다. 이부분은 조금더 공부한후 수정하도록
하겠습니다. 일단 흐름상 저렇게 이해했습니다.



이제 출력합시다.

Draw 부분에 작성했습니다. 상당히 깔끔해졌죠?^^
사용자 삽입 이미지



디버깅 하도록 합시다.
사용자 삽입 이미지
728x90

+ Recent posts