차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
unity:instantiatingprefabs [2015/08/22 20:02] – V_L | unity:instantiatingprefabs [2022/10/09 20:07] (현재) – V_L | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | {{tag> | ||
======실시간으로 프리팹을 인스턴스화 하기 (Instantiating Prefabs at runtime)====== | ======실시간으로 프리팹을 인스턴스화 하기 (Instantiating Prefabs at runtime)====== | ||
- | 이 시점에서 사용자는 '' | + | 이 시점에서 사용자는 '' |
- | 프리팹은 복잡한 게임오브젝트를 실행 도중에 인스턴스화(instantiate) 시키길 원하는 경우 매우 유용하다. | + | 프리팹은 복잡한 게임오브젝트를 실행 도중에 인스턴스화(instantiate) 시키길 원하는 경우 매우 유용하다. |
* 사용자는 한 줄의 코드로 완전한 기능을 가진 프리팹의 인스턴스화를 할 수 있다. 똑같은 게임오브젝트를 코드로 처음부터 만드는 것은 평균 5줄 혹은 더 이상이 필요하게 된다. | * 사용자는 한 줄의 코드로 완전한 기능을 가진 프리팹의 인스턴스화를 할 수 있다. 똑같은 게임오브젝트를 코드로 처음부터 만드는 것은 평균 5줄 혹은 더 이상이 필요하게 된다. | ||
- | * 사용자는 씬 Scene과 인스펙터 Inspector 에서 프리팹을 더 빠르고 쉽게 설정하고 테스트하고 수정할 수 있다. | + | * 사용자는 씬 (Scene)과 인스펙터 |
* 사용자는 인스턴스 되어진 프리팹을 그것을 인스턴스화하는 코드를 변경하지 않고도 해당 프리팹을 변경할 수 있다. 가령 코드 변경없이도 일반 로켓탄을 슈퍼 충전된 로켓으로 변경할 수 있다. | * 사용자는 인스턴스 되어진 프리팹을 그것을 인스턴스화하는 코드를 변경하지 않고도 해당 프리팹을 변경할 수 있다. 가령 코드 변경없이도 일반 로켓탄을 슈퍼 충전된 로켓으로 변경할 수 있다. | ||
줄 16: | 줄 17: | ||
- 벽돌 프리팹을 각각 다른 위치로 여러 차례 생성하여 벽을 만들수 있다. | - 벽돌 프리팹을 각각 다른 위치로 여러 차례 생성하여 벽을 만들수 있다. | ||
- 로켓발사기는 로켓을 쏘았을 때 날으는 로켓탄 프리팹을 인스턴스화 한다. 그 프리팹은 메쉬, '' | - 로켓발사기는 로켓을 쏘았을 때 날으는 로켓탄 프리팹을 인스턴스화 한다. 그 프리팹은 메쉬, '' | ||
- | - 많은 조각들로 폭발하는 로봇. 완전하게 작동하던 로봇은 부서진후 파괴된_로봇_프리팹 으로 교체된다. 이 프리팹들은 각각의 강체 Rigidbodies 들과 파티클 시스템들이 설정된 여러 개의 파트들로 나눠진 로봇으로 구성될 것이다. 이 테크닉은 로봇을 많은 조각으로 폭발시키며 한 개의 객체를 한 개의 프리팹으로 교체하는 것을 단 한 줄의 코드로 할 수 있게 해준다. | + | - 많은 조각들로 폭발하는 로봇. 완전하게 작동하던 로봇은 부서진 후 파괴된_로봇_프리팹 으로 교체된다. 이 프리팹들은 각각의 강체 Rigidbodies 들과 파티클 시스템들이 설정된 여러 개의 파트들로 나눠진 로봇으로 구성될 것이다. 이 테크닉은 로봇을 많은 조각으로 폭발시키며 한 개의 객체를 한 개의 프리팹으로 교체하는 것을 단 한 줄의 코드로 할 수 있게 해준다. |
- | ====벽 짓기 Building a wall==== | + | ====벽 짓기 |
아래의 설명은 프리팹을 사용하는 것과 코드로 객체를 생성하는 것의 비교를 통하여 프리팹 사용의 장점을 보여줄 것이다. | 아래의 설명은 프리팹을 사용하는 것과 코드로 객체를 생성하는 것의 비교를 통하여 프리팹 사용의 장점을 보여줄 것이다. | ||
- | 우선, 코드로부터 벽돌을 만들어 | + | 우선, 코드로부터 벽돌을 만들어 |
<file csharp> | <file csharp> | ||
줄 39: | 줄 40: | ||
만약 위의 코드를 실행하면, | 만약 위의 코드를 실행하면, | ||
- | 만약 사용자가 프리팹을 생성하여, | + | 만약 사용자가 |
개개의 벽돌을 위해 프리팹을 사용할 것이라면, | 개개의 벽돌을 위해 프리팹을 사용할 것이라면, | ||
줄 52: | 줄 53: | ||
} </ | } </ | ||
- | 위의 코드는 아주 깔끔할 뿐만 아니라 재사용이 가능한다. 여기에는 큐브를 인스턴스화한다 instantiating 라던지 큐브가 강체 rigidbody 를 포함 해야 한다 라는 말이 필요 없다. 이 모든 것은 프리팹에서 정의되고 에디터에서 빠르게 생성될 수 있다. | + | 위의 코드는 아주 깔끔할 뿐만 아니라 재사용이 가능하다. 여기에는 큐브를 인스턴스화한다 |
이제 사용자는 에디터 안에서 프리팹을 만들기만 하면 된다. 다음과 같은 방법으로 프리팹을 생성한다: | 이제 사용자는 에디터 안에서 프리팹을 만들기만 하면 된다. 다음과 같은 방법으로 프리팹을 생성한다: | ||
줄 60: | 줄 61: | ||
- **Assets-> | - **Assets-> | ||
- '' | - '' | ||
- | - '' | + | - '' |
- | #생성된 프리팹으로 사용자는 계층에서 안전하게 큐브를 삭제할 수 있다 (윈도우에서는 **Delete**, 맥에서는 **Command-Backspace**) | + | |
+ | 생성된 프리팹으로 사용자는 계층에서 안전하게 큐브를 삭제할 수 있다 (윈도우에서는 **Delete**, 맥에서는 **Command-Backspace**) | ||
이제 벽돌 프리팹이 생성되었다. 이제 사용자는 이것을 스크립트의 // | 이제 벽돌 프리팹이 생성되었다. 이제 사용자는 이것을 스크립트의 // | ||
- | {{: | + | {{: |
//이 변수는 어떤 게임오브젝트나 프리팹도 받아들일 수 있다 // | //이 변수는 어떤 게임오브젝트나 프리팹도 받아들일 수 있다 // | ||
이제 " | 이제 " | ||
- | 이것은 유니티에서 굉장히 많이 사용되는 작업방식 패턴이다. 사용자는 처음에 코드로부터 큐브를 생성하는 스크립트가 단 2줄이 더 긴데 왜 이 방식이 훨씬 더 낫다는 건지 의아해 할 수도 있다. | + | **이것은 유니티에서 굉장히 많이 사용되는 작업방식 패턴이다.** 사용자는 처음에 코드로부터 큐브를 생성하는 스크립트가 단 2줄이 더 긴데 왜 이 방식이 훨씬 더 낫다는 건지 의아해 할 수도 있다. |
그러나 지금은 프리팹 사용으로 인해 단 몇 초 내에 프리팹을 수정할 수 있다. 모든 인스턴스의 질량 수정이 필요합니까? | 그러나 지금은 프리팹 사용으로 인해 단 몇 초 내에 프리팹을 수정할 수 있다. 모든 인스턴스의 질량 수정이 필요합니까? | ||
- | ====로켓과 폭발의 인스턴스화 Instantiating rockets & explosions==== | + | ====로켓과 폭발의 인스턴스화 |
다음은 프리팹이 어떻게 이 시나리오에 들어맞는지에 대한 설명이다: | 다음은 프리팹이 어떻게 이 시나리오에 들어맞는지에 대한 설명이다: | ||
줄 106: | 줄 109: | ||
} </ | } </ | ||
- | ====캐릭터를 랙돌 ragdoll 이나 망가진 것으로 교체하기 Replacing a character with a ragdoll or wreck==== | + | ====캐릭터를 랙돌 |
만약 사용자가 완전히 리깅된 적 캐릭터를 가지고 있는데 그가 죽었다고 가정해 보라. 이 경우 사용자는 단순히 캐릭터에 죽음 애니메이션이 작동하게 하고 그 적 캐릭터의 로직을 다루는 모든 스크립트를 사용불가 disable 상태로 만들수도 있다. 이때 사용자는 몇몇 스크립트들을 제거하고, | 만약 사용자가 완전히 리깅된 적 캐릭터를 가지고 있는데 그가 죽었다고 가정해 보라. 이 경우 사용자는 단순히 캐릭터에 죽음 애니메이션이 작동하게 하고 그 적 캐릭터의 로직을 다루는 모든 스크립트를 사용불가 disable 상태로 만들수도 있다. 이때 사용자는 몇몇 스크립트들을 제거하고, | ||
줄 154: | 줄 157: | ||
사용자가 다양한 오브젝트들을 그리드나 원형의 패턴에 놓고 싶어한다고 합시다. 예전에는 이것들을 다음과 같은 방법들로 실현했다: | 사용자가 다양한 오브젝트들을 그리드나 원형의 패턴에 놓고 싶어한다고 합시다. 예전에는 이것들을 다음과 같은 방법들로 실현했다: | ||
- | - 완전히 코드만으로 객체를 만듭니다. 이는 굉장히 지루한다. 한 스크립트에 값들을 넣는 것은 작업속도가 | + | - 완전히 코드만으로 객체를 만듭니다. 이는 굉장히 지루하다. 한 스크립트에 값들을 넣는 것은 작업속도가 |
- 완전히 리깅된 오브젝트를 만들고, 그것을 복제해서 씬 Scene 의 여러 곳에 배치하는 방법이다. 이 또한 지루한 작업이며, | - 완전히 리깅된 오브젝트를 만들고, 그것을 복제해서 씬 Scene 의 여러 곳에 배치하는 방법이다. 이 또한 지루한 작업이며, | ||
- | 그러므로, | + | 그러므로, |
<file csharp>// | <file csharp>// | ||
줄 189: | 줄 192: | ||
} </ | } </ | ||
- | {{tag> | ||
* 출처: [[http:// | * 출처: [[http:// | ||
+ | |||
+ | |||
+ | https:// | ||
+ | |||