> For the complete documentation index, see [llms.txt](https://space-guide.playentry.org/untitled/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://space-guide.playentry.org/untitled/create/tip/undefined-1.md).

# 화살을 발사하는 오브젝트🏹

전반적인탐험하기에서 장애물 게임을 만들 때 유용한 화살을 발사하는 오브젝트를 만들어 보아요!\
화살의 <mark style="background-color:yellow;">**방향**</mark>과 <mark style="background-color:yellow;">**날아가는 거리**</mark>를 정해서 화살을 발사하는 코드를 만들 수 있어요.

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2F8CndAo03VxlRMpahMk87%2F36b8c31fm0juaeu9001a62ededfm9wbw-ezgif.com-crop.gif?alt=media&amp;token=ffce54ae-6f87-4b31-a569-319e0971505d" alt=""><figcaption></figcaption></figure>

***

## 1. 복제본을 사용하여 만들기

화살을 발사하는 오브젝트를 만들기의 핵심은 복제본의 활용입니다.

복제본을 잘 활용한다면 긴 코드를 단 하나의 오브젝트에서만 조립해도, 오브젝트가 원래 여러 개인 것처럼 빠르고 쉽게 코딩할 수 있습니다.

이러한 복제본과 함께 자주 등장하는 변수의 종류가 있습니다.\
바로 이 맵에서만 사용의 **"이 오브젝트에서 사용"** 을 가진 변수입니다.

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2FK5fUn1HBuWMHYectOjgH%2Fimage.png?alt=media&amp;token=bab0e2a9-ea14-46c1-9d74-2f7a7cd6ebcc" alt="" width="563"><figcaption></figcaption></figure>

'이 오브젝트에서 사용' 변수를 활용하면 여러 개의 복제본이 각각 서로 다른 정보를 가지도록 할 수 있습니다.\
이 때 변수의 초기값은 복제본을 생성하기 직전에 정의해 줄 수 있습니다.

## 2. 함수를 만들어 활용하기

함수는 코드를 더욱 짧고 보기 쉽도록 만들어 줄 수 있습니다.

특히 서로 다른 값을 가지는 복제본을 여러 개 만드는 경우, \
반복되는 긴 블록들을 새로운 복제본을 만들 때마다 전부 복사 & 붙여넣기로 이어붙여야 하기 때문에\
코드가 길어지고 수정하기도 번거롭습니다.

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2Fk3ubtuiVVx2rrknJgKMZ%2Fimage.png?alt=media&amp;token=b9eb9f4a-89c6-449c-ba55-cc5449d947ab" alt=""><figcaption><p>길고 수정하기 번거로운 코드</p></figcaption></figure>

이 경우 값 리본 블럭​을 활용하여 함수 하나로\
반복되는 블록들을 직관적이고 보기 편한 하나의 블록으로 만들어\
여러개의 복제본을 보다 간편하게 생성할 수 있습니다.

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2FzeuzL4TXzipkCQVyyJhW%2Fimage.png?alt=media&amp;token=b2a96e5a-66c7-4968-a14d-203352df49cc" alt=""><figcaption><p>서로 다른 속성을 가진 여러개의 복제본을 간단하게 생성할 수 있어요!</p></figcaption></figure>

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2FwtdGtIM7KK360W9y0nDA%2Fimage.png?alt=media&amp;token=d84fd3d2-1e0b-4942-bdf6-a43af5d66445" alt=""><figcaption><p>함수로 묶어 반복되는 코드를 간결하게 처리하였습니다.</p></figcaption></figure>

## 3. 코드의 진행 과정

코드는 화살이 복제본을 생성하고, 생성된 화살의 복제본이 플레이어(아바타)의 위치를 감지하여 발사되는 과정을 반복하는 식으로 진행됩니다.

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2FgRZBz43Ab3bvtlaIEhB5%2Fimage.png?alt=media&amp;token=fa4dfc81-7073-4ea3-918e-405f6fb02bcb" alt=""><figcaption><p> 전체적인 코드의 흐름을 나타내는 순서도</p></figcaption></figure>

## 4. 화살 발사하기🎯

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2F3WtylQFys1QUdANzWZ5M%2Fimage.png?alt=media&amp;token=4a707daf-40ca-4da8-8f44-7da062225ef9" alt=""><figcaption></figcaption></figure>

코드를 작성하기 전 다음과 같이 화살을 발사할 오브젝트들과 화살 오브젝트를 월드에 설치합니다.\
둘 중 **화살 오브젝트만 코딩 오브젝트 목록**에 가져와줍니다.

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2FuaEh1gONzq366mRyVGqw%2Fimage.png?alt=media&amp;token=992fffdf-0798-4d2c-b142-591b65d720ea" alt=""><figcaption></figcaption></figure>

이제 생성할 화살 복제본들이 각각 가지게 될 변수들을 준비해 줍니다.\ <mark style="color:orange;">※이때 이 변수는 화살 오브젝트를 클릭한 뒤 생성한</mark> <mark style="color:orange;"></mark><mark style="color:orange;">**\[이 오브젝트에서 사용]**</mark> <mark style="color:orange;"></mark><mark style="color:orange;">변수여야 합니다.</mark>&#x20;

서로 다른 변수값들을 복제본에 각각 쉽게 저장할 수 있도록, 리본 블록으로 값을 받아서 변수에 저장한 후 복제본을 생성하는 함수를 만들어줍니다.

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2FkrT2ai3qOJcDdkYtxRBa%2Fimage.png?alt=media&amp;token=bc4f96ae-3335-42c8-b408-f49dc17fba79" alt=""><figcaption></figcaption></figure>

그 다음 화살이 날아가기 시작하는 위치, 방향, 거리 값을 입력합니다.

<mark style="color:orange;">※ 이때 날아가기 시작하는 위치는 발사할 오브젝트의 타일 위치를 입력해 줍니다.</mark>\ <mark style="color:orange;">※ 발사할 오브젝트가 많아질 경우 노트나 빈 종이에 타일 위치와 방향, 거리를 각각 적어두면 더욱 수월하게 작업하실 수 있습니다.</mark>

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2Fw5irZThMkq9ZggiGYen7%2Fimage.png?alt=media&amp;token=3bdf45e4-0a4e-4d20-9f6b-c00a625ebff3" alt=""><figcaption></figcaption></figure>

위 함수 코드의 의미는 아래와 같습니다.

* 가로 2번째 타일, 세로 7번째 타일에서 왼쪽으로 2칸 발사될 화살 복제본을 생성합니다.
* 가로 5번째 타일, 세로 7번째 타일에서 아래쪽으로 2칸 발사될 화살 복제본을 생성합니다.
* 가로 8번째 타일, 세로 7번째 타일에서 위쪽으로 2칸 발사될 화살 복제본을 생성합니다.
* 가로 1번째 타일, 세로 7번째 타일에서 오른쪽으로 2칸 발사될 화살 복제본을 생성합니다.

다음은   생성된 각각의 복제본들이 동작을 반복해서 수행하는 코드를 조립해 줍니다.

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2FiI3QWtwq1enBk5wIyRNU%2Fimage.png?alt=media&amp;token=726fcc3f-b5f9-4dc2-b43c-8167e065eddc" alt=""><figcaption></figcaption></figure>

<mark style="background-color:blue;">**주변 4개의 타일 내에 아바타가 존재하면**</mark>\
입력 받은 각각의 복제본의 변수값들을 통해 <mark style="background-color:purple;">**오브젝트의 생성 위치와 방향을 결정**</mark>한 후\ <mark style="background-color:purple;">**화살의 ​발사거리만큼 이동**</mark>합니다.

​이동이 모두 끝나면 <mark style="background-color:red;">**이동이 끝난 지점에서 폭발 효과를 1크기로 실행한 뒤 모양을 숨겨**</mark>​줍니다.

<mark style="background-color:blue;">**2초를 기다린 후**</mark> 다시 주변 4개의 타일 내에 아바타가 있는지 감지하는 코드로 돌아갑니다.

***

## 200% 활용 예시💘💘

이렇게 자동으로 발사되는 화살을 코드로 만들어 보았어요!

위 코드를 활용하여 복제본이 플레이어의 위치와 상관없이 계속 회전하며 움직이도록 할 수 있습니다.

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2Ffs0Jhaw6c91LCGfDJhZa%2Fa6085484m0jv3j1p001s4ca6e48epb47.gif?alt=media&amp;token=fce32a9e-3280-47be-9ad7-7fd5905b250a" alt=""><figcaption></figcaption></figure>

같은 방식으로 다양한 움직임을 가진 복제본을 배치하여 나만의 게임 패턴도 만들 수 있습니다.

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2FLNXHMDPj75xwOyUEMkkp%2F7b65c4f5m0l7mfch1kl4bc32846mne4s.gif?alt=media&amp;token=7b1b82c7-98b5-496b-b415-a94a2c3b0bb3" alt=""><figcaption></figcaption></figure>

움직임과 모양이 유사한 오브젝트들을 관리할 때는\
복제본을 사용한다면 훨씬 많은 코드가 절약되고 관리하는데도 더욱 수월해질 거에요.​

위 코드와 오브젝트를 활용한 장애물 맵을 '맵 템플릿' 기능을 활용하여 쉽게 만들어 볼 수 있어요!🏹\
**엔트리 탐험하기 > 월드 만들기 > 맵 목록 > 새로운 맵 만들기**에서 아티의 <mark style="color:green;">'미로 게임' 맵 템플릿</mark>을 찾아보세요!

맵 템플릿을 불러와서 미로 게임을 쉽게 만들고, 코드도 확인하고, 나만의 미로 게임으로 업그레이드 해보세요!✨

<figure><img src="https://3454971225-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYt7vUSKYrUxBHMtu5f91%2Fuploads%2FiIDUxMT3bd2oUmkEbzNh%2Fimage.png?alt=media&amp;token=d886f626-0073-4a1e-8198-de72b95430bc" alt=""><figcaption></figcaption></figure>

&#x20;***📝 Written by 아티 ( 엔트리 탐험하기 서포터즈 2기 )​***
