2. 생성과 삭제 #1
‘SPACE BAR’ 버튼을 누르면 공이 생성되는 기능을 만들어보겠습니다.
우선 새로운 지면과, 공, 그리고 ‘Create Empty’를 통해 빈 오브젝트를 공이 생성 될 지면 위에 배치합니다.
이후 생성 된 공은 ‘Hierarchy View’에서 직접 드래그로 ‘Project View’로 옮겨 줍니다.
이 때의 과정은 ‘Prefab’으로 변환한 오브젝트는 실시간 변동하는 하이어라키 뷰에서 사용 위험성을 줄일 수 있습니다.
( 1 / 11 )
# 빈 오브젝트 생성 # 객체의 프리팹화
DRAG!
3. 생성과 삭제 #2
새로운 C# 스크립트를 만들어 위와 같은 코드를 적어봅시다.
매개변수로는 생성 될 객체를 받고, 키를 눌렀을 때 ‘Instantiate’를 통해 지정 된 객체를 실행합니다.
개념은 게임 오브젝트나 프리팹의 복사본을 만드는 함수이며 복사 대상이 될 객체를 인스턴스화 시켜버립니다.
또한 공 객체를 대입하는데 이 때 ‘Project View’에 생성 한 공을 대입합시다.
‘Hierarchy View’의 대상 객체가 대입 될 경우 플레이 도중 해당 객체가 없어지면 에러가 뜨기 때문입니다.
( 2 / 11 )
4. 생성과 삭제 #3
실제 게임을 해보면 공이 복사생성 된 것을 알 수 있습니다.
복사의 원본이 사라지면 안되기 때문에 ‘Project View‘에서 직접 관리하는 것도 좋은 방법 중 하나입니다.
이후 공을 생성하는 스크립트를 수정해 봅시다. 신기하게도 ‘Instantiate’ 함수는 리턴 값으로 ‘Object’ 자료형을 반환하는데
이를 변수로 이어받아 삭제나 여러 수정이 가능합니다.
대입 시 ‘Object’는 최상위 계층이므로 모호성 제거를 위해 ‘as GameObject’로 강제 캐스팅이 필요합니다.
( 3 / 11 )
강제 캐스팅
5.0초 뒤 대상이 사라지게
5. 생성과 삭제 #4
‘Project View’ 에서의 공 객체에 ‘Add Component’로 ‘Rigidbody’를 추가하고 게임을 플레이 해보았습니다.
물리를 가지고 있는 공은 사전에 설정한 ‘Empty Object’ 위치에서 생성되고 5초 후 차례대로 삭제되는 것을 볼 수 있습니다.
하지만 지나친 생성과 낭비는 GC(Garbage Collection)이 발생하여 프로그램에 부하가 생길 수 있는 점 주의하세요.
( 4 / 11 )
# 튀어오른 공은 잠시 후 사라진다.
6. 탱크 업그레이드 #1
지난 시간에 만들었던 탱크를 업그레이드 하여 사격 기능과, 목표를 맞추었을 때의 반응 이벤트까지 구현해보겠습니다.
탱크 오브젝트 계층에서 포구 오브젝트인 ‘poAxis’ 그룹 하위 계층으로 빈 오브젝트를 만들고
기즈모를 이용한 직교 투영으로 정확히 포구 중앙에 배치합니다.
이 부분은 미사일이 나갈 위치라고 설명할 수 있습니다.
( 5 / 11 )
Empty Object
7. 탱크 업그레이드 #2
아까랑 동일하게 탱크 포탄으로 쓰일 객체를 만들고 ‘Rigidbody’를 ‘AddComponent’하여 ‘Project View’로 넘겨줍니다.
전 귀찮아서 공 모양의 포탄으로 만들었습니다.
( 6 / 11 )
Project View에서 관리
8. 탱크 업그레이드 #3
전에 탱크를 움직였던 스크립트를 열어 새로 추가된 소스를 이용합니다.
생성 될 총구의 위치와 총알 객체를 매개변수로 받고, ‘Space Bar’를 눌렀을 때 총구 위치에서 총구의 전방(x좌표)
방향으로 객체를 생성하고 이 때 총알에 붙어있는 ‘Rigidbody’ 컴포넌트를 코드로 직접 조종합니다.
총구의 전방 방향으로 힘껏 밀고 5초 후 사라지는 겁니다.
( 7 / 11 )
총구와 투사체
3000.0 만큼의 힘으로 대상 객체를 민다.
9. 탱크 업그레이드 #4
기존 탱크에 붙어있던 스크립트 컴포넌트를 알맞게 대입한 뒤 실행합니다.
놀랍게도 정확히 총구 방향으로 힘있게 날라가는 포탄을 볼 수 있습니다.
그리고 총알은 5초 후 삭제됩니다.
( 8 / 11 )
# 날아가는 포탄
10. 탱크 업그레이드 #5
새로운 C# 스크립트를 만들어 위와 같은 코드를 만들고 ‘Project View’에 있는 총알 객체에 스크립트를 붙여줍니다.
그리고 타겟으로 정할 기둥을 몇 개 만들고 그 중 진짜 타겟 에게는 새로운 메테리얼을 만들어 ‘Albedo’를 눌러
빨갛게 만든 뒤 ‘Tag’는 ‘Enemy’로 지정합니다.
평범한 기둥과 일반 기둥을 지정해 총알이 닿는 물체의 태그가 ‘Enemy’라면 공과 함께 삭제됩니다.
( 9 / 11 )
# 날아가는 포탄
11. 탱크 업그레이드 #6
이처럼 진짜 붉은 타겟은 공이 충돌할 때 태그를 감지하여 공과 함께 사라지지만
반대로 그냥 일반 타겟은 아무런 이벤트가 없어 튕겨져 나가는 것을 볼 수 있습니다.
( 10 / 11 )
# 튕겨나간 포탄 # 명중 된 포탄
DELETE!
12. 탱크 업그레이드 #7
이후 총알 스크립트를 개선하여 더욱 멋있고 간지나는 작업을 완료 했습니다.
어셋스토어와 컴포넌트의 활용으로 멋진 탱크를 업그레이드 해보았습니다.
( 11 / 11 )
물체의 속성 설정 (수동)
Ex: 탄성력, 마찰력 등