SlideShare a Scribd company logo
1 of 13
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

More from Jihun Soh

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

More from Jihun Soh (14)

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

Recently uploaded

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Recently uploaded (6)

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

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