이번 페이즈에서 우리는 이 포탄
프리팹을 만들 것입니다. 이것은 보시는 것 처럼 생겼고
여러개의 서로 다른 컴포넌트를 가지고 있죠
콜라이더를 가지고 있고, 리기드 바디도, 라이트 컴포넌트도 가지고 있네요.
그리고 이걸 가지고 하고자 하는건,
탱크에서 이것을 발사한 다음에, 포탄으로서의 일을 하기 위해서
주위를 덮어씌우는 구를 가지는데요
데미지를 주는 일종의 구를 만들어서
착탄 지점 근처에 있는 탱크들에게 데미지를 줄수 있게 합니다.
그러니 이번 비디오에서는, 지금 제가 이걸 움직여서 천천이
탱크에 좀더 가까이 두고 보면
포탄이 가까울 수록 체력이
더 줄어드는 걸 볼수 있죠.
바로 지금 확인해볼수 있겠죠.
이걸 좀더 가까이 해보면
가까이 갈수록 더 많은 데미지가 들어가네요.
당연하게도, 탱크 바로 위를 때려버리면
엄청난 데미지를 줄겁니다
이것이 바로 다음 페이즈 동안 우리가 만들 포탄입니다
실제 슈팅에 대한 부분을 처리한 다음에요
하지만 먼저, 우리는 데미지를 처리해줘야 합니다
아니면 전에 우리가 작성한 TankHealth 스크립트에다
데미지를 전달해줄 녀석을 만들어주어야죠.
좋아요 여러분들이 해줄일은 먼저
Models 폴더로 가서, 이 폴더에서
Shell 이라는 모델을 찾아주세요
선택해보면 인스펙터에 이렇게 보일거에요
참고로, 뭔가 인스펙터로 관찰중일 때는
이렇게 그냥 드래그 해넣어 프리뷰 창에서 둘러볼 수 있습니다.
인스펙터의 바닥에 있죠.
그래서 이제 이것을 하이라키로 드래그합니다
모델을 프로젝트에서
가져와 하이라키로 드래그 앤 드롭 했다면
마우스 커서를 씬 뷰 위에다가 놓고
F 를 눌러 선택된 프레임으로 가보세요
그러면 대략적으로 원점에 위치하고 있단걸 알겁니다
그러니까 0 근처라는 건데
저는 이걸 드래그해서
위로 어딘가에 좀 올릴게요. 그래야
이걸 눈으로 보면서 작업하죠. 이게 더 낫네요.
기억할 것은, 우리가 프리팹을 만드는데
탱크가 발사할 녀석이라서 게임이 시작될 때
씬에 남아 있으면 안되요.
그러니 탱크와 마찬가지로 (나중에 지울테니까)
당장 어디에다 위치해 놨는지는 상관 하지 않아도 되요.
그러니 이제 우리는 다른 오브젝트와
상호작용할 무언가를 만들건데
이것은 콜라이더가 필요합니다.
우리는 primitive(기본형태) 콜라이더들을 사용합니다. 왜냐면
이들은 간단하고 성능이 좋거든요. 그리고 여기 형태는
우리는 캡슐 콜라이더를 사용할겁니다.
그러니 포탄이 아직 선택된 상태에서
인스펙터에서 Add Component 버튼을 누르고
Caps 만 검색해보면
Capsule 에 대해서 뜨는데
Confirm 까지 계속 클릭하거나 리턴(엔터키)를 누르세요.
캡슐 콜라이더를 가지고,
어떤걸 발사하려고 할때는요
우리가 지금 쓰는 발사체(투사체;Projectile) 같은 걸 말이죠,
이러한 물건들이 다른 곳으로 튕겨나가길 원치도 않고
이 탱크 포탄이 어떤곳에 부딫쳐선
그걸 밀어내버리는 것도 원치 않습니다.
우리는 이것이 어떤것에 부딫치면
스크립트에서 콜백을 만들고 그 다음
폭발 힘 을 만들길 윈해요.
그러니, 우리는 어떠한 물리적인 반응작용도 원하지 않아요.
그래서 우리가 그런걸 원하지 않을 때는, 트리거 라는 것을 쓰면 됩니다.
누군가 트리거 라는 것에 말할때는
아니면 트리거 존 이라던가
아니면 트리거 영역 이라는 말은, 그 사람이 말하는 것은
콜라이더인데 트리거 체크가
된 것을 말해요.
그러니 IsTrigger 체크박스를 체크 한다면
이것이 기본적으로 의미하는 바는,
여기에 단단한 표면이라는 것이 존재하지 않아서
그냥 통과가 가능한데, 대신에
스크립트로 이런 식으로 콜백을 보냅니다.
'나는 지금 다른 트리거에 진입했어' 라거나
'나는 다른 콜라이더에 들어왔어' 라는 식으로요.
그러니 대게 트리거는 게임의
문 같은 곳에서, 커다란
육면체 콜라이더를
입구로 놓아두면, 캐릭터가 그쪽으로 들어오려 할때
자동으로 문이 열리게 할수 있죠.
대게 이런 방법이 콜라이더를 쓰는 고전적인 방법입니다.
일단 이 컴포넌트를 추가했다면, 다음으로는
이걸 세팅을 해줘야 해요
그래서 우리는 중심을 바꿔주어야 하는데
Center 값을 (0,0,0.2) 로 해주세요.
반지름 Radius 는 (0.15) 로요.
높이 Height 는 (0.55) 로 해주세요.
중요한 점은, 틀린 방향으로 되어있단게
보일텐데, 그러니 direction 을
Z 축으로 변경해줘야 합니다. 그러면
이제 나름 이쁘게 우리의 포탄과 완벽히 맞추어 지네요.
아니면 최소한 문제 없을 정도로는 비슷하게 맞추어졌죠.
이렇게 보여야 합니다.
그 다음에는 마지막으로 이것은 물리적인 오브젝트 이기에
우리는 이것을 물리 엔진이
제어하게 해야 합니다. 그러면 우리가 뭘 더해야 하죠?
리기드 바디죠. 여기 멋지게.
여기 우리 리기드바디 컴포넌트를 추가했습니다.
이제 준비가 됬군요.
그래서 이 포탄들이 우리가 발사하게 될
발사체 들인데, 이들이 그냥 직선으로 바로 날아가선 안됩니다.
시간에 따라 중력에 의해 떨어져야죠.
그래서 일단 두 부분을 잠시 다시보기 하죠.
우리는 Models 폴더에서 Shell 이라는 이름의 모델을 찾습니다.
하이라키 위에 이것을 드래그하구요.
우리는 캡슐 콜라이더 컴포넌트를 포탄에 추가했습니다.
그리고 이것이 트리거가 되도록 해주어서
트리거로서 부딫쳐 튕겨돌아다니지 않게 해주었죠
물체들을 통과하여 그대로 주욱 날아가선
바로 그러자마자 스크립트를 통해 파괴되야 합니다
우리가 작성할 것이죠
우리는 이러한 경우 IsTrigger 를 체크합니다
그리고 방향을 Z 축으로 설정하죠
그리고 Centre 를 바꿨는데, Centre 란
기본적으로 원점을 어디에 두냐라서
아트 모양에 맞추기 위해 콜라이더에 오프셋을 주죠
그리고 radius 은 0.15 로 주었죠. 캡슐의 반지름 말이에요.
그리고 높이는 0.55 를 주엇습니다.
그리고 리기드 바디를 붙였습니다. 그래서
물리 엔진의 지배하에 놓으려구요.
그리고 여기 포탄을 얻었네요
지금은 포탄이 추락하는 건 되는데
정말 아무것도 일어나지 않습니다.
그저 바닥을 그대로 통과해버리죠
왜냐면 아무것도 이것을 막지 않기 때문이죠.
아까 말했듯이 물리적으로 실존하지 않아요.
이런 식은 원하지 않아요. 우리는 실제로
폭발하고 어떤 일을 해주고 싶습니다. 그러니 우리는
포탄 폭발 Shell Explosion 을 당신을 위해 만들어 두었습니다.
그러니 Prefabs 폴더로 가보면,
ShellExplosion 이라는 프리팹을 발견할겁니다.
그래서 이걸 가지고 우리가 할게 뭐냐면
이걸 포탄의 자식으로 만들어주세요
그러니 프리팹 폴더에서 드래그 해서
포탄 위로 드래그하면 됩니다
그러면 이렇게 보일거에요
이걸 시뮬레이트 해보면
이렇게 보일겁니다.
시간에 따라 먼지 구름이 생겨나죠.
좋아요. 이제 우리가 해야할 남은
유일한 일은
오디오 소스를 더해줘야 합니다
그러니 탱크 폭발 때와 비슷하게
이것은 비주얼 이펙트와 오디오 이펙트를 가져야 합니다.
그러니 우리는 Add Component 버튼을 그냥 눌러주면 됩니다
그리고 Audio Source 를 선택할거에요.
그리고 나서, 이전에 우리가 한것 처럼
우리는 오디오 클립이 필요하고, 그래서 저는
audio clip 옆의 동그라미 버튼을 눌러
ShellExplosion 을 선택하여 할당해줄겁니다.
이제 우리는 포탄이 초기화 되자 마자 혹은
폭발이 보이자마자 바로 재생되는걸 원치 않기에
우리는 Play On Awake 를 체크 해제 해줍니다.
그래서 잠시 빠른 다시보기, 우리는 ShellExplosion 프리팹을 가지고
포탄 게임 오브젝트의 자식으로 넣어주었습니다.
그러면 이 녀석은 포탄과 함께 움직일 것이고, 무언가에
부딫쳤을때 자기 할일을 해줄겁니다.
우리는 여기다가 오디오 소스를 붙여주었습니다.
그래서 사운드를 재생할수 있게요. 우리는 동그라미 선택
버튼으로 ShellExplosion 으로 오디오 클립을 지정해주었습니다.
우리는 이것이 게임 월드에 생겨나자 마자
바로 플레이 되는 것을 원치 않습니다. 우리는 그저
충돌을 할때만 재생하고 싶으니 Play On Awake 체크를 해제합니다.
좋아요. 마지막으로 포탄에 해줘야 할일은
부모 오브젝트인 포탄을 다시 눌러주고
라이트를 더해줍니다.
그래서 게임판 위를 날아다닐 때
우리는 이것이
주변 환경을 밝게 비추게 하려는 겁니다.
그리고 포탄을 구별하기도 편하죠. 왜냐면 명백히도
황금색 포탄을 가지고 있고, 주황색 모래가 깔려 있으니
구별하기 힘듭니다. 거기에 라이트가 더해지면서 구별하기 좋아지죠.
그래서 Point 라이트 게임 오브젝트를 만드는 것 대신에
그냥 같은 라이트를 간단하게 더해줄수 있습니다.
그래서 만약 당신이 유니티에 처음이라면,
Game Object - Create 로 가보면
이미 만들어진 프리팹화된, 몇몇 컴포넌트들을 가진
오브젝트들이 미리 다 있다는게 보일겁니다.
그래서 예를 들어, 만약 당신이 선택하는데,
큐브가 있다 치면, 당신은
수많은 다른 컴포넌트들이 여기 달려 올겁니다.
하지만 당신은 그저 라이트 컴포넌트를 여기다 붙여서
라이트를 생성할 수도 있죠.
우리는 그럴 필요는 없습니다. 우리는 그저 포탄위에
바로 컴포넌트를 붙일거에요,
그래서 Add Component - Light 해줍니다.
좋아요, 이제 실제로 어떻게 동작할지
어떻게 이것이 충돌할지, 탱크와 충돌할땐 무엇을 할지
아니면 환경에 충돌했을 때, 그리고
게임에서 다른 탱크들에 어떻게 힘을 줄지
이들을 제어해줘야 합니다.
그러니 이제 우리가 할일은,
Scripts 폴더로 들어가서 그리고
Shel l폴더를 찾습니다.
거기서 우리는 ShellExplosion 이라는 스크립트를 찾습니다.
그러니 우리는 ShellExplosion 을 드래그 앤 드롭해서
하이라키의 포탄 게임 오브젝트에 붙입니다.
그리고 나면 우리가 방금 까지 더해온
다른 모든 것들 처럼, 리기드바디
캡슐 콜라이더와 라이트에 이어
Shell Explosion (스크립트) 를 가지게 되었습니다.
그리고 나서 이것을 더블클릭하여 편집하기 위해 엽니다.
좋아요. 이제 여기서 우리는 어떠한 private 변수도
없는데, 하지만 우리는 여러개의 public 들을 가지네요.
그래서 첫번째는 레이어 마스크 입니다.
트레이닝 데이의 초반에 모든 탱크에
Players 레이어를 붙인게 기억 날수도 있습니다.
이게 의미하는 바는, 우리가 폭발
을 포탄에서 일으킬때 우리는
Players 레이어인 모든 것들만 체크한다는 겁니다. 그리고
어떤 탱크에다 부딫쳤는지 보는거죠. 모든 것에다가 영향을 주는게 아니라.
그래서 이것은 인스펙터에서 설정 가능합니다.
여기서 우리는 영향을 미치고 싶은 레이어를 선택하죠.
그 다음은 폭발 파티클입니다.
우리가 그것을 자식 게임 오브젝트로 드래그 해 넣은것을 기억하세요.
우리는 그것의 레퍼런스를 가져와서, 그래서
포탄이 폭발할때 파티클을 재생할수 있도록 할겁니다.
이전의 것들과 같이, 오디오 소스의 레퍼런스가 있고,
그래서 이걸로 오디오 소스의 레퍼런스를 가져와서
사운드를 재생할수 있죠.
그리고 나면 여기 많은 float 들이 있는데요
첫번째 녀석은