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

More Related Content

PPTX
Unity cookbook 4
PPTX
Unity cookbook 2
PPTX
Unity cookbook 1
PPTX
Unity cookbook 11
PPTX
[0122 구경원]게임에서의 충돌처리
PDF
Developing 3D Heatmaps in Unity
PPTX
Unity cookbook 20
PPTX
Unity cookbook 18
Unity cookbook 4
Unity cookbook 2
Unity cookbook 1
Unity cookbook 11
[0122 구경원]게임에서의 충돌처리
Developing 3D Heatmaps in Unity
Unity cookbook 20
Unity cookbook 18

More from Jihun Soh (14)

PPTX
Unity cookbook 21
PPTX
Unity cookbook 19
PPTX
Unity cookbook 17
PPTX
Unity cookbook 16
PPTX
Unity cookbook 15
PPTX
Unity cookbook 14
PPTX
Unity cookbook 13
PPTX
Unity cookbook 12
PPTX
Unity cookbook 10
PPTX
Unity cookbook 9
PPTX
Unity cookbook 8
PPTX
Unity cookbook 7
PPTX
Unity cookbook 6
PPTX
Unity cookbook 3
Unity cookbook 21
Unity cookbook 19
Unity cookbook 17
Unity cookbook 16
Unity cookbook 15
Unity cookbook 14
Unity cookbook 13
Unity cookbook 12
Unity cookbook 10
Unity cookbook 9
Unity cookbook 8
Unity cookbook 7
Unity cookbook 6
Unity cookbook 3
Ad

Unity cookbook 5

  • 1. UNITY COOKBOOK SHOT BY. INS PART 5 생성과 삭제 & 탱크 업그레이드
  • 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: 탄성력, 마찰력 등
  • 13. End