<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>_am10.24.log</title>
        <link>https://velog.io/</link>
        <description>공부 기록</description>
        <lastBuildDate>Mon, 27 Nov 2023 09:35:39 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>_am10.24.log</title>
            <url>https://velog.velcdn.com/images/_am1024/profile/fe0e4d7d-a92b-4776-a492-1a8c17970850/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. _am10.24.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/_am1024" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Unity ) Box Collider 2D, Rigidbody 2D, Sprite Renderer의 기능]]></title>
            <link>https://velog.io/@_am1024/Box-Collider-2D-Rigidbody-2D-Sprite-Renderer%EC%9D%98-%EA%B8%B0%EB%8A%A5</link>
            <guid>https://velog.io/@_am1024/Box-Collider-2D-Rigidbody-2D-Sprite-Renderer%EC%9D%98-%EA%B8%B0%EB%8A%A5</guid>
            <pubDate>Mon, 27 Nov 2023 09:35:39 GMT</pubDate>
            <description><![CDATA[<p>💬 오늘은 이전 게시글들에서 다뤄보았던 Unity의 기초적인 개념 Box Collider, Rigidbody 2D, Sprite Renderer의 기능에 대해서 얘기해보려 합니다.</p>
<h3 id="box-collider">Box Collider</h3>
<p><span style="background-color: rgba(242,179,188,0.5)"><em>Game Object에 2D 상자 모양의 충돌 영역을 부여하는 컴포넌트</em></span>
<img src="https://velog.velcdn.com/images/_am1024/post/c32a5c7c-a3df-4d3b-8214-1223394fe1a6/image.jpg" alt="">
Box Collider 2D는 다른 Collider 2D와의 충돌 감지에 사용되며 Object의 크기와 회전을 조절할 수 있다. 즉, Unity 내에서 충돌 처리를 위한 다양한 이벤트 및 기능을 설정할 수 있다.
<span style="color : #009900; background-color: #CCFFCC"><strong>활용 예시</strong></span> : Player과 Enemy 간의 충돌 감지, 아이템과의 상호작용 등에 사용</p>
<blockquote>
<p><strong>Material</strong> : 마찰이나 바운스같은 충돌 프로퍼티를 결정하는 물리 material이다.
<strong>Is Trigger</strong> : Is Trigger을 체크하면 Collider가 설정된 Object와 다른 Object가 충돌 시 서로 관통한다.(관통한 Object의 정보를 얻을 수 있음)
즉, 충돌 탐지 기능은 하지만 지나가는 것을 막지 않는다.
<strong>Used by Effector</strong> : Platform Effector 2D 컴포넌트와 함께 사용되며, 이를 활성화하면 해당 Box Collider 2D는 바닥이나 플랫폼과의 상호작용에 특수한 물리적인 <span style="color : blue; background-color: #d4eafc">효과</span>를 받게 된다.
<strong>Used by Composite</strong> : 이를 활성화 하면 Box Collider 2D가 Composite Collider 2D에 속한다고 간주되어, 복합 Collider를 통해 이들 간의 충돌을 효율적으로 관리할 수 있게 된다.
즉, 게임에서 다양한 객체 간의 상호작용을 보다 효과적으로 다룰 수 있도록 도와준다.
<strong>Auto Tiling</strong> : Sprite Renderer 컴포넌트의 Draw Mode가 Tiled로 설정되어 있을 때 Auto Tiling을 활성화하는 것이 중요하다. 
<strong>Offset</strong> : Collider의 중심 위치를 조절하는 데 사용된다. Collider의 위치를 세부적으로 조정할 수 있다.
<strong>Size</strong> : 로컬 공간 단위로 나타난 박스 크기를 설정한다.
<strong>Edge Radius</strong> : 꼭지점(vertex)이 원 모양이 되도록 모서리 주변의 반지름을 조정한다. 모서리 주변의 반지름이 증가함에 따라 컨벡스한 코너로 인해 Collider의 크기가 늘어날 수 있다.</p>
</blockquote>
<h3 id="span-stylecolor-ff6666-background-color-rgba24217918805box-collider-2d에-대한-구체적인-설명span"><span style="color: #FF6666; background-color: rgba(242,179,188,0.5)">Box Collider 2D에 대한 구체적인 설명</span></h3>
<p>💬  Used by Effector를 설명할 때 잠깐 언급했던 &quot;효과&quot;의 예시</p>
<ul>
<li><span style="background-color: #e2e1fe"><em>한정된 떨어짐 각도</em></span> : 만약 플랫폼이 특정 각도 이상으로 기울어져 있다면, Used by Effector를 활성화한 Box Collider 2D는 해당 플랫폼에서 떨어지는 각도를 제한하여, 캐릭터가 특정 각도 이상으로 떨어지지 않도록 한다.</li>
<li><span style="background-color: #e2e1fe"><em>점프 효과</em></span> : Platform Effector 2D가 캐릭터가 특정 플랫폼에서 점프할 때 추가적인 수직 속도를 부여하면, Used by Effector를 활성화한 Box Collider 2D는 해당 플랫폼에서 점프 시에 효과를 받아 더 높게 점프하는 동작을 할 수 있다.</li>
<li><span style="background-color: #e2e1fe"><em>플랫폼 통과</em></span> : Platform Effector 2D가 일정한 조건에서는 캐릭터가 해당 플랫폼을 통과할 수 있도록 허용하면, Used by Effector를 활성화한 Box Collider 2D는 그 플랫폼을 통과하는 동작을 할 수 있다.</li>
</ul>
<p>💬 Auto Tiling을 활성화 할 때, 비활성화 할 때는 무슨 차이가 있는걸까?</p>
<p>➞ 활성화 시, Sprite 크기가 변경되어도 Collider 2D의 모양이 자동으로 갱신되어 따로 수동으로 조절할 필요가 없다. 즉, Sprite의 크기가 변하면 해당 크기에 맞게 Collider 2D도 자동으로 조절된다.
➞ 비활성화 시, Collider의 지오메트리가 자동으로 반복되지 않는다. 이 경우, Sprite의 크기 변경에 따라 Collider 2D의 모양이 업데이트되지 않으며 사용자가 수동으로 조절해야 한다.</p>
<h3 id="rigidbody-2d">Rigidbody 2D</h3>
<p><span style="background-color: rgba(242,179,188,0.5)"><em>물리 엔진에 Object를 물리적으로 영향을 주는 데 사용되는 컴포넌트</em></span>
<img src="https://velog.velcdn.com/images/_am1024/post/a845fb16-fb9f-4cfc-b601-f94e7a724fc7/image.jpg" alt="">
2D 게임에서 물체의 움직임, 중력, 충돌 등을 다루는 데에 활용된다. Inspector에서 질량, 중력 영향 여부, 물체의 속도 및 힘 등을 설정할 수 있다.
<span style="color : #009900; background-color: #CCFFCC"><strong>활용 예시</strong></span> : 플레이어 캐릭터, 적 캐릭터, 물체 등이 중력에 따라 떨어지거나 특정 방향으로 움직이는 데 사용</p>
<blockquote>
<p><strong>Body Type</strong> : 움직임(포지션 및 회전) 동작 및 Collider 2D 상호작용을 조작할 수 있다.
<span style="color : blue; background-color: #d4eafc">Option</span> ➞ Dynamic, Kinematic, Static
<strong>Material</strong> : 특정 부모 Rigidbody 2D에 연결된 모든 Collider 2D의 공통 Material을 설정하기 위해 사용한다.
[ 우선 순위 ]</p>
</blockquote>
<ol>
<li>Collider 2D에 직접 지정된 물리 Material 2D</li>
<li>연결된 Rigidbody 2D에 지정된 물리 Material 2D</li>
<li>Physics 2D 창에 지정된 물리 Material 2D 기본 material
[ 예외 상황 ]
Collider 2D에 머티리얼이 지정되지 않으면 기본 옵션은 None</li>
</ol>
<p><strong>Simulated</strong> : Rigidbody2D가 물리 시뮬레이션에 참여하는지 여부를 나타내는 Boolean 값이다.
<strong>Use Auto Mass</strong> : 체크 박스를 선택하면 Rigidbody 2D가 Collider 2D에서 Game Object의 질량을 자동으로 감지하도록 한다.
<strong>Mass</strong> : Rigidbody 2D의 질량을 정의한다. 오토 매스 사용을 선택한 경우 회색으로 표시 된다.
<span style="background-color: #FFFF99"><em>Drag</em></span> : <em>공기저항 값이라고 생각하면 된다. Object가 움직일 때 공기저항의 크기를 입력할 수 있다. 0이면 저항이 없고, 무한대를 입력하면 Object가 즉시 정지하게 된다.</em>
<strong>Linear Drag</strong> : 포지션 움직임에 영향을 미친다.
<strong>Angular Drag</strong> : 회전 움직임에 영향을 미친다.
<strong>Gravity Scale</strong> : Game Object가 중력의 영향을 받는 정도를 뜻한다.
<strong>Collision Detection</strong> : Collider 2D 간의 충돌을 검사하는 방식이다.
<strong>Sleeping Mode</strong> : Game Object가 휴식 상태일 때 프로세서 시간을 절약하기 위해 “수면”모드에 들어가는 방법이다.
<strong>Interpolate</strong> : 물리 업데이트 사이에 Game Object 움직임이 보간되는 방법(움직임이 어색할 때 유용)
<strong>Constraints</strong>    : Rigidbody 2D의 움직임에 대한 제약사항이다.
<strong>Freeze Position</strong> : 월드의 X 및 Y 축에서 움직이는 Rogidbody 2D를 선택적으로 정지시킨다.
<span style="background-color: #FFFF99"><em>월드(World)</span> : 게임에서 모든 Game Object가 상대적으로 배치되고 상호 작용하는 3D 또는 2D 공간</em>
<strong>Freeze Rotation</strong> : Z축을 중심으로 회전하는 Rigidbody 2D를 선택적으로 정지시킨다.</p>
<h3 id="span-stylecolor-ff6666-background-color-rgba24217918805rigidbody-2d에-대한-구체적인-설명span"><span style="color: #FF6666; background-color: rgba(242,179,188,0.5)">Rigidbody 2D에 대한 구체적인 설명</span></h3>
<p>💬 Body Type - &quot;Option&quot; - Dynamic, Kinematic, Static</p>
<ul>
<li><span style="background-color: #e2e1fe"><em>Dynamic</em></span> : 플레이어의 캐릭터가 중력에 따라 떨어지는 동안 다양한 힘에 영향을 받는다.</li>
<li><span style="background-color: #e2e1fe">_ Kinematic_</span> : 이동하는 엘리베이터 플랫폼이나 문은 개발자가 직접 제어하며, 외부 힘에 의한 움직임이 없다.</li>
<li><span style="background-color: #e2e1fe">_ Static_</span> : 벽, 바닥, 지형과 같은 정적인 물체로, 외부에서의 영향으로 움직이지 않는다.</li>
</ul>
<p>💬 Simulated 체크 할 때와 하지 않을 때 무슨 차이가 있을까?</p>
<p>➞ true로 설정하면 해당 Rigidbody2D는 물리 시뮬레이션에 참여하게 되어 중력, 힘, 충돌 등의 영향을 받게 된다.
➞ false로 설정하면 Rigidbody2D는 물리 시뮬레이션에 참여하지 않아 중력 등의 영향을 받지 않고 정적인 위치에 고정된다.</p>
<p>💬 Collision Detection - Discrete, Continuous</p>
<ul>
<li><span style="background-color: #e2e1fe"><em>Discrete</em></span>
Discrete로 설정하면, Rigidbody 2D와 Collider 2D가 포함된 Game Object가 빠르게 움직였을 때 물리 업데이트 시 서로 겹치거나 통과할 수 있다. 충돌 접점은 새로운 포지션에서만 생성되며, 이동 중에는 충돌을 정확히 감지하지 않는다.</li>
<li><span style="background-color: #e2e1fe"><em>Continuous</em></span>
업데이트할 때 Rigidbody 2D와 Collider 2D가 포함된 game object가 서로 통과하지 않는다. Unity는 Collider 2D의 첫 번째 충돌 포인트를 찾아내어 game object를 해당 위치로 이동시킨다. 이 방식은 Discrete에 비해 더 많은 CPU 시간을 소비하지만, 높은 정확도로 충돌을 감지한다.</li>
</ul>
<p>💬 Sleeping Mode - Never Sleep, Start Awake, Start Asleep</p>
<ul>
<li><span style="background-color: #e2e1fe"><em>Never Sleep</em></span> : 수면 모드가 비활성화된다.(시스템 리소스에 영향을 미칠 수 있으므로 가능하면 비활성화하지 않는 것이 좋음)</li>
<li><span style="background-color: #e2e1fe"><em>Start Awake</em></span> : 처음에 Game Object가 깨어 있다.</li>
<li><span style="background-color: #e2e1fe"><em>Start Asleep</em></span> : 처음에 게임 오브젝트가 수면 상태이지만 충돌하면 깨어난다.</li>
</ul>
<p>💬 Interpolate - None, Interpolate, Extrapolate</p>
<ul>
<li><span style="background-color: #e2e1fe"><em>None</em></span>  : 움직임에 스무딩을 적용하지 않는다.</li>
<li><span style="background-color: #e2e1fe"><em>Interpolate</em></span> : 이전 프레임에서의 게임 오브젝트 포지션에 근거해 움직임을 스무딩</li>
<li><span style="background-color: #e2e1fe"><em>Extrapolate</em></span> : 다음 프레임에서의 게임 오브젝트 포지션을 추정해 움직임을 스무딩</li>
</ul>
<h3 id="sprite-renderer">Sprite Renderer</h3>
<p><span style="background-color: rgba(242,179,188,0.5)"><em>Game Obejct에 2D 이미지를 표시하는 컴포넌트</em></span>
<img src="https://velog.velcdn.com/images/_am1024/post/f1494184-e350-47aa-86f9-d74fe214388f/image.jpg" alt="">
2D 게임에서 주로 사용되며, 이미지나 스프라이트를 시각적으로 표현할 때 활용된다. Inspector창에서 이미지를 할당하고, 투명도, 색상 등을 조절하는 등 다양한 시각적인 속성을 제어할 수 있다.
<span style="color : #009900; background-color: #CCFFCC"><strong>활용 예시</strong></span> : 게임 캐릭터, 배경, 아이템 등의 2D 그래픽을 표시할 때</p>
<blockquote>
<p><strong>Sprite</strong> : 컴포넌트가 렌더링할 스프라이트 텍스처를 정의한다. 오른쪽의 작은 점을 클릭하면 Object Picker 창이 열리며, 이용 가능한 스프라이트 에셋 리스트에서 선택할 수 있다.
<strong>Color</strong> : 스프라이트의 vertex 컬러를 정의하여 스프라이트의 이미지에 색조를 더하거나 다른 컬러를 적용한다. Color Picker에서 렌더링된 스프라이트 텍스처의 vertex 컬러를 설정할 수 있다. 
<strong>Flip</strong> : 2D 게임에서 Game Object의 이미지를 수평 또는 수직으로 뒤집을 수 있는 기능을 제공한다.
<strong>Draw Mode</strong> :  2D 스프라이트를 어떻게 그릴지를 결정한다. Unity에서 2D 스프라이트를 렌더링하는 방식을 지정하는 데 사용된다.
<strong>Mask Interaction</strong> : 해당 Sprite가 마스크와 상호 작용하는 방식을 결정한다. Sprite가 마스크와 어떻게 상호 작용하는지를 지정하는 데 사용된다.
<strong>Sprite Sort Point</strong> : 스프라이트를 정렬하는 데 사용되는 지점을 지정한다. 스프라이트의 위치를 기준으로 정렬되는 것이 아니라 스프라이트의 일부분이나 특정 지점을 기준으로 정렬할 수 있도록 도와준다.
<strong>Material</strong> : 해당 스프라이트를 렌더링할 때 사용되는 Material을 나타낸다. 이는 스프라이트의 외관을 결정하며 색상, 텍스처, 반사 등의 시각적인 특성을 지정한다.
<strong>Sorting Layer</strong> : 렌더링 중에 스프라이트의 우선 순위를 제어하는 정렬 레이어를 설정한다. 드롭다운 상자에서 기존 정렬 레이어를 선택하거나 새 정렬 레이어를 만들 수 있다.
<strong>Order In Layer</strong> : 정렬 레이어 내에서 스프라이트의 렌더 우선 순위를 설정한다. 숫자가 낮은 스프라이트가 먼저 렌더링되고 숫자가 높은 스프라이트가 그 아래에 오버랩 된다.</p>
</blockquote>
<h3 id="span-stylecolor-ff6666-background-color-rgba24217918805sprite-renderer에-대한-구체적인-설명span"><span style="color: #FF6666; background-color: rgba(242,179,188,0.5)">Sprite Renderer에 대한 구체적인 설명</span></h3>
<p>💬 Flip - X, Y</p>
<ul>
<li><span style="background-color: #e2e1fe"><em>수평 뒤집기 (Flip X)</em></span> : 활성화 하면 이미지가 수평 방향으로 뒤집힌다. 캐릭터가 좌우로 움직일 때 사용한다.</li>
<li><span style="background-color: #e2e1fe"><em>수직 뒤집기 (Flip Y)</em></span> : 활성화 하면 이미지가 수직 방향으로 뒤집힌다. 캐릭터가 떨어지거나 물체가 위 아래로 움직일 때 사용한다.</li>
</ul>
<p>💬 Draw Mode - Simple, Sliced, Tiled</p>
<ul>
<li><span style="background-color: #e2e1fe"><em>Simple</em></span> : 스프라이트를 그대로 렌더링 한다. 투명한 부분도 모두 표시되며, 스프라이트의 크기와 비율을 그대로 유지한다.</li>
<li><span style="background-color: #e2e1fe"><em>Sliced</em></span> : 스프라이트가 9개의 슬라이스인 경우 이 모드를 선택한다. 이미지를 9개의 조각으로 나누어 스케일링 하여 가운데 부분은 그대로 두고, 가장자리 부분은 스케일링 된다.</li>
<li><span style="background-color: #e2e1fe"><em>Tiled</em></span> : 이미지를 반복해서 그린다. 스프라이트의 크기에 따라 반복 패턴이 생성된다.</li>
<li>크기가 고정된 스프라이트는 Simple 모드로, 가변 크기의 UI 요소는 Sliced 모드로 사용하는 것이 좋다.</li>
</ul>
<p>💬 Mask Interaction - None, Visible Inside Mask, Visible Outside Mask</p>
<ul>
<li><span style="background-color: #e2e1fe"><em>None</em></span> : Sprite Renderer는 Scene의 Sprite Masks와 상호 작용하지 않는다. 다른 마스크가 적용된 Object에 가려지지 않고 그대로 렌더링 된다.</li>
<li><span style="background-color: #e2e1fe"><em>Visible Inside Mask</em></span> : 마스크 내부에서만 보인다. 마스크 밖으로 나가면 렌더링되지 않는다.</li>
<li><span style="background-color: #e2e1fe"><em>Visible Outside Mask</em></span> : 해당 Sprite는 마스크 외부에서만 보인다. 마스크 내부로 들어가면 렌더링되지 않는다.</li>
</ul>
<p>💬 Sprite Sort Point - Pivot, Center</p>
<ul>
<li><span style="background-color: #e2e1fe"><em>Pivot</em></span> : 스프라이트의 Pivot 지점을 기준으로 정렬된다. Pivot은 스프라이트의 중심점이나 특정한 지점을 나타낸다.</li>
<li><span style="background-color: #e2e1fe"><em>Center</em></span> : 스프라이트의 중심점을 기준으로 정렬된다. Pivot과 다르게 항상 스프라이트의 중심을 기준으로 정렬된다.</li>
</ul>
<h3 id="마치며">마치며,,</h3>
<p>항상 글을 적을 때 간결하면서도 구체적이되 노베이스이신 분들도 알아듣기 쉽게 설명하려고 노력하는데, 효과가 있는지 모르겠네요. 많은 도움이 되셨기를 바라며 글을 읽다가 지적할 부분이 있거나 궁금한 사항들이 있으면 댓글에 남겨주세요. 최대한 답변드리도록 하겠습니다 :)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Unity ) Tag와 Layer의 차이]]></title>
            <link>https://velog.io/@_am1024/Unity-Tag%EC%99%80-Layer%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@_am1024/Unity-Tag%EC%99%80-Layer%EC%9D%98-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Sat, 18 Nov 2023 07:30:06 GMT</pubDate>
            <description><![CDATA[<p>💬 처음 Unity를 시작했을 때 하면서 Tag와 Layer, Sorting Layer이라는게 어떤 부분에서 차이가 있는지, 각각이 하는 역할들은 무엇인지 궁금해 했었던 기억이 있어 이 글을 통해 Tag, Layer, Sorting Layer에 대해 설명하려 합니다!</p>
<p>Unity의 Inspector창을 보면 Tag와 Layer이라는 창을 볼 수 있다. Tag와 Layer은 언제 쓰는거고, 무슨 차이가 있는걸까?
<img src="https://velog.velcdn.com/images/_am1024/post/94fdbcf8-81a5-4d38-a4d8-91083a1e1e95/image.jpg" alt=""></p>
<h3 id="tag">Tag</h3>
<p>Game Object에 사용자가 정의한 문자열을 할당하여  <span style="color : #FF6666; background-color: rgba(255,204,204,0.5)"><strong>해당 Game Object의 종류나 역할을 구분</strong></span>하는 데에 사용된다. 해당 Game Object가 어떤 카테고리에 속하는지 Tag로 구분할 수 있다. Game Object에 사용하면 게임을 실행하는 동안 Game Object를 참조하거나 다른 Game Object와 비교하기 쉽다.
<span style="color : #3366FF; background-color: #CCFFFF">사용 예</span> - 적 캐릭터, 아이템, 플레이어, 지형 등을 식별할 때 / script에서 해당 Tag를 사용하여 특정 타입의 오브젝트를 찾거나 처리</p>
<h3 id="layer">Layer</h3>
<p>Layer은 랜더링 또는 Game Object의 충돌을 확인할 때 서로 인식하고 상호작용 할 수 있는 용도로 사용한다. 즉, <span style="color : #FF6666; background-color: rgba(255,204,204,0.5)"><strong>물리적인 처리에 영향을 미치는 데에 사용된다</strong></span>라고 생각하면 쉽다. Layer를 정한 후에는 두 게임 오브젝트가 충돌 했을 때 해야 하는 일을 script로 작성할 수 있다.
<span style="color : #3366FF; background-color: #CCFFFF">사용 예</span> - Player와 Enemy 간의 충돌을 감지하고 싶을 때, Player Object와 Enemy Object에 서로 다른 Layer를 할당하여 충돌 감지를 설정 / 특정 카메라에만 특정 레이어의 Object를 렌더링하도록 설정 가능</p>
<blockquote>
<h3 id="tag와-layer의-차이점span"><strong>Tag와 Layer의 차이점</strong></span></h3>
<p>Layer는 그룹을 관리하고, Tag는 단일 게임 오브젝트를 관리한다.
 ➔ Tag가 Layer보다 더 좁은 범위에서 오브젝트를 확인한다.
<span style="color : #009900; background-color: #CCFFCC"><em>Tag</em></span> - Inspector창에서 직접 지정하거나 script에서 동적으로 변경 가능
<span style="color : #009900; background-color: #CCFFCC"><em>Layer</em></span> - 주로 프로젝트 설정에서 Layer을 추가, Inspector창에서 할당</p>
</blockquote>
<p>Sorting Layer이라는 것도 있는데, Sorting Layer이란 뭘까?
Sorting Layer에 대해서도 알아보자.
<img src="https://velog.velcdn.com/images/_am1024/post/c687880d-c05a-44ae-abbe-8c16d6151889/image.jpg" alt=""></p>
<h3 id="sorting-layer"><strong>Sorting Layer</strong></h3>
<p>정렬 레이어라고도 한다. 주로 2D 게임에서 사용되는 기능인데, <span style="color : #FF6666; background-color: rgba(255,204,204,0.5)"><strong>렌더링 되는 객체들의 순서를 조절하는 데 사용</strong></span>된다. 화면 안에 존재하는 2D Sprite 이미지를 그릴 순서를 알려준다고 생각하면 쉽다. 이는 Game Object 내에서 렌더링 순서를 정의하고 sprite를 정렬할 때 유용하다.</p>
<p>+추가설명)
<strong>Order in Layer</strong> : Sorting Layer 내에서 개체의 정렬 순서를 결정하는 데 사용되는 값
<span style=" background-color: #FFFF99
">값이 낮을수록 뒤에 그려지고, 값이 높을수록 앞에 그려진다.</span></p>
<blockquote>
<h3 id="layer과-sorting-layer의-차이"><strong>Layer과 Sorting Layer의 차이</strong></h3>
<p><span style="color : #009900; background-color: #CCFFCC"><em>Layer</em></span>: 3D 공간에서 오브젝트들을 서로 구별하기 위해 Layer를 사용. 물리적 충돌이나 카메라 시야 등의 다양한 측면에서 Object를 분류하는 데 사용됨
<span style="color : #009900; background-color: #CCFFCC"><em>Sorting Layer</em></span>: 주로 2D 게임에서 사용되며, 시각적인 순서와 겹침을 다루는 데에 중점을 둠</p>
</blockquote>
<p>💬 Tag, Layer, Sorting Layer에 대해 최대한 쉽게 설명을 하려고 노력했는데, 잘 전달이 되었는지 모르겠네요. 글을 읽다가 궁금한 점이 있으시면 댓글에 남겨주세요. 제가 아는 선에서 답변 달아드리도록 하겠습니다 :)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Unity) 랜덤 스폰을 이용한 2D 게임 만들기]]></title>
            <link>https://velog.io/@_am1024/%EB%9E%9C%EB%8D%A4-%EC%8A%A4%ED%8F%B0%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-2D-%EA%B2%8C%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-vj8q23cs</link>
            <guid>https://velog.io/@_am1024/%EB%9E%9C%EB%8D%A4-%EC%8A%A4%ED%8F%B0%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-2D-%EA%B2%8C%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-vj8q23cs</guid>
            <pubDate>Mon, 13 Nov 2023 17:49:12 GMT</pubDate>
            <description><![CDATA[<p>💬 오늘은 탑뷰 시점으로 Unity 2D게임을 만들건데 게임 시작 할 때마다 Item 랜덤 스폰하기, Player가 Item을 먹으면 충돌처리를 일으켜서 Item을 먹은 것처럼 만들기, Enemy가 Player을 따라다니도록 한 후 이들이 충돌하면 Player가 죽도록 하는 기능을 구현해보도록 하겠습니다.</p>
<p>Unity에서 Create Project를 눌러 2D-core로 프로젝트를 하나 생성해준다.
<img src="https://velog.velcdn.com/images/_am1024/post/4a42d4a8-d7dc-4abd-b81b-d2052901be88/image.jpg" alt="">우선 맵을 먼저 만들어야 하는데, 지난시간에 했던 방식대로 Tilemap을 이용하여 맵을 만들 것이다. Hierarchy창에서 오른쪽 클릭을 하여 2D Object-Tilemap-Rectangular을 선택하면 된다.
<img src="https://velog.velcdn.com/images/_am1024/post/27038b43-a45d-439f-b256-aa373adb7577/image.jpg" alt="">Tilemap을 만들었으면 Window-2D-Tile Palette에 들어가서 Asset을 추가하고, 맵을 하나씩 찍어준다.
(Tilemap을 이용해서 맵을 찍는 방법은 이전 포스트에 작성했으니 모르겠으면 참고하세요!)
<a href="https://velog.io/@_am1024/Unity-2D-%EA%B2%8C%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%9D%B4%EB%8F%99-%EC%B6%A9%EB%8F%8C%EC%B2%98%EB%A6%AC-%EB%94%B0%EB%9D%BC%EA%B0%80%EA%B8%B0">참고자료</a>
<img src="https://velog.velcdn.com/images/_am1024/post/c34f8104-6244-4565-9d96-2461465d462d/image.jpg" alt="">
맵을 찍었다면 Player, Enemy, Item이라는 game object들을 추가해준다. Hierarchy창에서 우클릭을 한 뒤, Create Empty를 누른 다음<img src="https://velog.velcdn.com/images/_am1024/post/d5693d0e-8be6-4c58-a80c-36214eaa512d/image.jpg" alt="">
각각 이름을 아래 이미지처럼 바꿔주면 된다.
<img src="https://velog.velcdn.com/images/_am1024/post/1f1da845-96ac-4f3e-beb4-593dc6c95e69/image.jpg" alt="">이후 Player, Enemy, Item1, Item2, Item3의 Inspector 창에 Sprite Renderer을 넣어준다.(본인이 원하는 이미지를 가져다가 Sprite에 넣으면 된다)
<img src="https://velog.velcdn.com/images/_am1024/post/1fd92b2d-ca55-45f8-aed1-ae237f869b13/image.jpg" alt=""> 그리고, game object들의 크기는 Inspector창에서 본인이 원하는대로 사이즈 설정을 하면 된다.
<span style="background-color: rgba(242,179,188,0.5)"><strong>그리고 중요한 점!</strong></span> Player와 Enemy game object에 Tag를 지정해준다. 만약에 태그가 없다면 Add Tag를 눌러 추가해주면 된다.
<img src="https://velog.velcdn.com/images/_am1024/post/950e837c-d5b3-4afb-b2c9-025f089873b5/image.jpg" alt=""><img src="https://velog.velcdn.com/images/_am1024/post/7280f781-3dc5-43ac-b2df-af25518150da/image.jpg" alt="">여기서 <span style="background-color: rgba(255,255,0,0.5)"><strong>game obejct가 보이지 않는다면</strong> Sprite Renderer의 Additional Settings 부분의 Sorting Layer부분을 Layer1으로 지정</span>해준다. 그러면 game object가 정상적으로 보일 것이다.
<img src="https://velog.velcdn.com/images/_am1024/post/fd4c00c2-e1b6-481e-ae48-6718a6124ee3/image.jpg" alt="">이제 Player, Enemy, Item1, Item2, Item3에 C# script를 넣어주자.
&lt;Player.cs&gt;</p>
<pre><code class="language-cs">using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    public float moveSpeed;

    //클릭좌표
    private UnityEngine.Vector3 targetPosition;

    void Start()
    {
        targetPosition = transform.position;
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        Debug.Log(&quot;Collision with: &quot; + collision.gameObject.tag);

        if (collision.CompareTag(&quot;Enemy&quot;))
        {
            Dead();
        }
    }

    public void Dead()
    {
        Destroy(gameObject);
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            targetPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            targetPosition.z = transform.position.z;
        }

        // 목표 위치로 이동
        transform.position = Vector3.MoveTowards(transform.position, targetPosition, moveSpeed * Time.deltaTime);
    }
}</code></pre>
<p>&lt;Enemy.cs&gt;</p>
<pre><code class="language-cs">using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    public float moveSpeed;

    private Transform playerTransform;

    void Start()
    {
        // 플레이어의 Transform을 가져오기
        playerTransform = GameObject.FindGameObjectWithTag(&quot;Player&quot;).transform;
    }

    void Update()
    {
        if (playerTransform != null)
        {
            // 플레이어 쪽으로 이동
            transform.position = Vector3.MoveTowards(transform.position, playerTransform.position, moveSpeed * Time.deltaTime);
        }
    }
}</code></pre>
<p>&lt;Items.cs&gt;</p>
<pre><code class="language-cs">using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Items : MonoBehaviour
{
    public GameObject itemPrefab; // Item의 프리팹
    public int numberOfItems = 3; // 생성할 Item의 개수
    private void Start()
    {
        transform.position = new Vector3(Random.Range(-5, 4) + 0.5f, Random.Range(-5, 4) + 0.5f, 0);
    }
    void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag(&quot;Player&quot;))
        {
            // Player와 충돌했을 때의 처리
            CollectItem();
        }
    }

    void CollectItem()
    {
        // Item을 수집할 때의 동작
        Destroy(gameObject); // 현재 GameObject를 파괴하여 사라지게 함

        // 다른 수행할 작업 추가 가능
    }
}</code></pre>
<p>이제 C# script들을 Player, Enemy, Item1, Item2, Item3의 Inspector창에 드래그 하여 각각 알맞게 넣어준다. 그러고 나서 Player와 Enemy의 C# script창에서 Move Speed는 적절하게 설정해준다.(저는 Player은 5, Enemy는 3으로 설정해줬어요) 
<img src="https://velog.velcdn.com/images/_am1024/post/6b0b4008-60fb-46db-b2d6-d74a9b474ebc/image.jpg" alt="">그리고, Player와 Enemy의 Inspector창에서 create components를 눌러 Rigidbody 2D를 추가해준다.
<img src="https://velog.velcdn.com/images/_am1024/post/071ac42f-2fd1-4094-bf7c-2bd508c544db/image.jpg" alt="">
여기서 <span style="background-color: rgba(255,255,0,0.5)">Freeze Rotation Z 부분에 체크</span>를 해준다. 이를 체크해주는 이유는 <span style="color: #FFCC00"><strong>Item과 충돌을 했을 때 캐릭터가 회전을 하지 않도록 하기 위함</strong></span>이다.
그리고  <span style="background-color: rgba(255,255,0,0.5)">Player와 Enemy의 Gravity Scale은 0으로 설정</span>해준다. 그 이유는 이 게임은 <span style="color: #FFCC00"><strong>탑뷰 시점으로 만드는 것이기 때문에 캐릭터가 떨어지는 것을 방지하기 위함</strong></span>이다.
<img src="https://velog.velcdn.com/images/_am1024/post/2e1af83c-f3d0-4c1c-b8d3-fa1e9b5aa1e6/image.jpg" alt=""></p>
<p>마지막으로 Player, Enemy, Item1, Item2, Item3의 Inspector창에 Box Collider 2D라는 component를 추가해준다. Box Collider 2D를 추가해주는 이유는 game object들이 서로 충돌을 할 수 있게 하기 위함이다.
<span style="background-color: rgba(255,255,0,0.5)">Player의 Box Collider 2D창에서 Is Trigger을 체크</span>해주자. Is Trigger을 하는 이유는 <span style="color: #FFCC00"><strong>Collider가 다른 Collider와 충돌했을 때 이벤트를 감지하게 하도록 하기 위함</strong></span>이다. <span style="color: #FF99CC"><strong>Is Trigger 자체는 Collider 중 하나에만 설정을 하면 된다.</strong></span>
<img src="https://velog.velcdn.com/images/_am1024/post/92783c50-e743-4da3-a5f5-85f47becfec9/image.jpg" alt="">게임을 실행해보면</p>
<ol>
<li>우클릭을 하면 Player가 이동</li>
<li>Enemy가 Player을 따라다님</li>
<li>게임 시작 할 때마다 Item 랜덤 스폰</li>
<li>Player가 Item과 충돌하면(Item을 먹으면)Item이 사라지도록 구현</li>
<li>Player와 Enemy가 만나면 충돌처리(게임 종료)
크게 5가지 기능들이 구현됨을 볼 수 있을 것이다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Unity 2D 게임 만들기(충돌처리 및 캐릭터 따라가기)]]></title>
            <link>https://velog.io/@_am1024/Unity-2D-%EA%B2%8C%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%9D%B4%EB%8F%99-%EC%B6%A9%EB%8F%8C%EC%B2%98%EB%A6%AC-%EB%94%B0%EB%9D%BC%EA%B0%80%EA%B8%B0</link>
            <guid>https://velog.io/@_am1024/Unity-2D-%EA%B2%8C%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%9D%B4%EB%8F%99-%EC%B6%A9%EB%8F%8C%EC%B2%98%EB%A6%AC-%EB%94%B0%EB%9D%BC%EA%B0%80%EA%B8%B0</guid>
            <pubDate>Mon, 13 Nov 2023 08:32:44 GMT</pubDate>
            <description><![CDATA[<p>💬 오늘은 Unity 2D 게임을 만들 예정입니다. Tilemap으로 맵을 구성하고, 방향키와 스페이스키를 이용한 캐릭터 이동 + 충돌처리 + 캐릭터 따라가기 기능을 구현해보도록 하겠습니다.</p>
<p>Unity에서 New project를 선택한 후, 2D-Core를 선택한다. (프로젝트명은 아무거나 하시면 됩니다)
<img src="https://velog.velcdn.com/images/_am1024/post/fd1b233a-e544-4727-94a6-4da19d79d941/image.jpg" alt="">
그럼 화면이 이렇게 뜰텐데, 우선 게임의 가장 기초가 되는 맵을 구성해야 한다. Tilemap을 이용하여 맵을 구성하면 된다. 우선, Tilemap을 만들기 전에 Assets부터 추가해주도록 하겠다. 에셋이 없다면 Unity의 Asset store, 게임마당, itch.io 등 유니티 에셋들이 제공되는 사이트들에서 원하는 에셋을 다운받는다.(저는 무료 에셋으로 다운받았어요)
에셋을 다운 받았으면, Unity 프로젝트에 에셋을 추가해준다. 그냥 다운받은 에셋을 화면에 보이는 것처럼 Project-Assets란에 끌어서 놔주면 에셋을 추가할 수 있다.
<img src="https://velog.velcdn.com/images/_am1024/post/d206ef03-817d-4d4c-b215-06c0ab30a1d2/image.jpg" alt="">
이제 Tilemap을 만들어보도록 하겠다. 아래 사진처럼 Hierarchy창에서 2D Object-Tilemap-Rectangular를 선택한다. 
<img src="https://velog.velcdn.com/images/_am1024/post/aa5770ad-95e3-42e7-ad3e-0c87740d8076/image.jpg" alt=""></p>
<p>Tilemap을 추가해주었다면 Window-2D-Tile Palette를 클릭해준다.
<img src="https://velog.velcdn.com/images/_am1024/post/b0014eac-51ae-40b6-b51a-0d4a7a1ab8e8/image.jpg" alt=""></p>
<p>그러면 이런 화면이 뜰텐데, Create New Palette를 눌러주고 Name은 아무거나 설정한 후(저는 Platform Palette로 했어요)Create를 눌러준다.
<img src="https://velog.velcdn.com/images/_am1024/post/4b24f7d9-0394-4182-8e5e-5ec41e6c7ad8/image.jpg" alt="">
그러고나서 다운 받은 에셋을 추가해준다.
<img src="https://velog.velcdn.com/images/_am1024/post/b1d2b52d-21b8-4f1c-be3c-0f2a35076ce0/image.jpg" alt="">
<span style="color:hotpink"><strong>여기서 중요한 점!</strong></span> Player와 Enemy라는 game object들이 계단을 오르내리도록 설정할건데, 계단 부분(즉, 점프가 필요한 구간)은 tilemap을 &quot;Stairs&quot;라고 설정해줄 것이다.
<img src="https://velog.velcdn.com/images/_am1024/post/042c98d6-7717-4cf0-a00e-f823ec159e59/image.jpg" alt="">
똑같이 2D Object-Tilemap-Rectangular을 눌러 Tilemap을 생성하고 이름을 Stairs라고 바꿔주면 된다. 아래 사진에서 빨간색으로 표시된 부분이 Tilemap-Stairs이다.
<img src="https://velog.velcdn.com/images/_am1024/post/236ae3cc-9896-49a3-b93d-5b0cd1f0f845/image.jpg" alt="">
Stairs라는 Tilemap을 따로 설정해주는 이유는, <span style="background-color: rgba(242,179,188,0.5)"><strong>Enemy라는 game object가 계단을 만났을 때 점프하도록 만들기 위함</strong></span>이다. 근데 저렇게 만들면 외관상 예쁘지가 않기 때문에,, 다시 Tilemap으로 덮어줄 것이다.
<img src="https://velog.velcdn.com/images/_am1024/post/e82c916e-124a-41fc-a95e-1c75504974c3/image.jpg" alt="">
이때, Tilemap과 Stairs에 Layer과 Tag를 설정해주어야 한다.(처음에 깜빡하고 Tilemap이랑 Stairs에 Tag 및 Layer 설정을 안해줘서 급하게 넣었어요..)
<img src="https://velog.velcdn.com/images/_am1024/post/f47f97d8-711e-43cc-a064-027f9823ea35/image.jpg" alt=""><img src="https://velog.velcdn.com/images/_am1024/post/ceedabc7-6e75-4529-b266-821a5792ff79/image.jpg" alt=""><img src="https://velog.velcdn.com/images/_am1024/post/04891cde-a3db-40f2-bd46-e830964e3a56/image.jpg" alt=""></p>
<p>여기서, Tilemap과 Stairs에 Tilemap Collider2D라는 컴포넌트를 추가한다.(Inspector 창에서 Add Component를 누른 후, Tilemap Collider 2D 검색) 
<img src="https://velog.velcdn.com/images/_am1024/post/977cb428-1330-4903-bbed-817f6f256ecc/image.jpg" alt="">
여기서 Tilemap Collier 2D를 추가해주는 이유는 <span style="background-color: rgba(242,179,188,0.5)"><strong>game object와의 충돌을 할 수 있도록 하기 위함</strong></span>이다. 만약에 이를 추가해주지 않는다면, game object가 tilemap을 하나의 그림으로만 인식하여 충돌이 되지 않는다.</p>
<p>그다음 Player와 Enemy라는 game object를 하나 만들어보자.
Inspector 창에서 Add Component를 누르고 Player와 Enemy에 각각 Box Collider 2D, Sprite Renderer, Rigidbody 2D라는 컴포넌트들을 추가해준다.
그 전에, 여기서도 Tag와 Layer을 추가해주어야 한다.
<img src="https://velog.velcdn.com/images/_am1024/post/55b18ae5-1cf5-44af-a023-2eaca3d6678e/image.jpg" alt="">
Layer를 누르고 Add Layer를 누르면 뒤, Player이라는 Layer를 추가해준다.
<img src="https://velog.velcdn.com/images/_am1024/post/51acff35-4e4e-4bc2-8cef-eafae9ff5a58/image.jpg" alt="">
이때, Tag도 똑같이 Player라고 지정해준다.
<img src="https://velog.velcdn.com/images/_am1024/post/71dd0cf8-6db6-44a5-8b82-d52e698557e9/image.jpg" alt="">
Enemy도 똑같이 Layer와 Tag를 Enemy로 맞춰준다.
이때, Enemy라는 Tag가 따로 없기 때문에 Add Tag를 누르고
<img src="https://velog.velcdn.com/images/_am1024/post/7eead2eb-d552-429d-b83a-4c16d6da3253/image.jpg" alt="">
Enemy라는 새로운 Tag를 추가해주었다.
<img src="https://velog.velcdn.com/images/_am1024/post/eec5a57c-79ff-403c-8cff-92b2265c0363/image.jpg" alt="">
Enemy도 Tag, Layer 설정이 끝났다.
<img src="https://velog.velcdn.com/images/_am1024/post/a9904a0b-d4e6-4bc4-98a2-0f2687bb7b5b/image.jpg" alt="">
이 다음에 우리가 해야할 것은, 캐릭터에 사진을 추가해주는 것이다.(그래야 알아보기 쉬우니까..) Sprite Renderer창에서 Sprite에 본인이 원하는 사진을 집어넣는다.(저는 Player을 흰색, Enemy를 검정색으로 했어요)
<img src="https://velog.velcdn.com/images/_am1024/post/ad3d7b5b-0371-4ac1-aac7-e6e847e822f3/image.jpg" alt="">
이제, Player와 Enemy에게 코드를 집어넣어줄 것이다.
Project 창에서 오른쪽 클릭을 한 후, Create-C# Script를 선택하면 된다.
<img src="https://velog.velcdn.com/images/_am1024/post/71c6b992-c9e3-4178-bdb6-21e7d675084d/image.jpg" alt="">
Player와 Enemy라는 C# script를 하나 생성하도록 하겠다. C# script를 생상했다면, Player.cs와 Enemy.cs에 아래 코드를 추가해준다.
&lt;Player.cs&gt;</p>
<pre><code class="language-cs">using UnityEngine;
using UnityEngine.SceneManagement;

public class Player : MonoBehaviour
{
    public float moveSpeed;
    public float jumpForce;
    private Rigidbody2D rb;

    void Start()
    {
        rb = GetComponent&lt;Rigidbody2D&gt;();
    }

    void Update()
    {
        // 좌우 이동
        float moveHorizontal = Input.GetAxis(&quot;Horizontal&quot;);
        Vector2 movement = new Vector2(moveHorizontal, 0);
        rb.velocity = new Vector2(movement.x * moveSpeed, rb.velocity.y);
        // 점프
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        }
    }

    // 충돌이 발생했을 때 호출되는 함수
    void OnCollisionEnter2D(Collision2D collision)
    {
        // 충돌한 객체의 태그가 &quot;Enemy&quot;인 경우
        if (collision.gameObject.CompareTag(&quot;Enemy&quot;))
        {
            // 게임 종료
            EndGame();
        }
    }

    void Jump()
    {
        rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
    }

    void EndGame()
    {
        Debug.Log(&quot;Game Over&quot;);
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}</code></pre>
<p>&lt;Enemy.cs&gt;</p>
<pre><code class="language-cs">using UnityEngine;

public class Enemy : MonoBehaviour
{
    public Transform playerTransform; // 플레이어의 Transform을 저장하기 위한 변수
    public float moveSpeed; // 적의 이동 속도
    public float jumpForce;
    private Rigidbody2D rb;

    void Start()
    {
        rb = GetComponent&lt;Rigidbody2D&gt;();
    }

    private void Update()
    {
        if (playerTransform != null)
        {
            // 플레이어 방향으로 이동
            transform.position = Vector2.MoveTowards(transform.position, playerTransform.position, moveSpeed * Time.deltaTime);
        }
    }
    private void Jump()
    {
        // 점프 힘을 가해줌
        rb.velocity = new Vector2(rb.velocity.x, 0f);
        rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
    }
    // 충돌이 발생했을 때 호출되는 함수
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag(&quot;Stairs&quot;))
        {
            // 게임 종료
            Jump();
        }
    }
}</code></pre>
<p>그다음 이 C# script들을 Player와 Enemy에 적용해줄 것이다. C# script를 드래그해서 Inspector 창에 넣어주면 된다.
<img src="https://velog.velcdn.com/images/_am1024/post/636ac16b-43a8-4bbf-9233-61c21278bce4/image.jpg" alt=""><img src="https://velog.velcdn.com/images/_am1024/post/97706ff0-87c6-4810-be6e-269fd81fb63a/image.jpg" alt=""></p>
<p>코드를 작성했다면 게임을 실행하기 전에 Player와 Enemy의 Rigidbody2D, Sprite Renderer, C# script, Box Collider 2D의 설정들을 확인해주자.
우선 <span style="background-color: rgba(255,255,0,0.5)">Rigidbody 2D의 Freeze Rotation Z를 체크</span>해주면 player, enemy라는 game object들이 계단에서 굴러떨어지지 않고 정상적으로 계단을 오르내릴 수 있음을 확인할 수 있을 것이다.
<img src="https://velog.velcdn.com/images/_am1024/post/b2c08144-dabf-4d40-8a62-458a7d3f7ceb/image.jpg" alt="">
<span style="background-color: rgba(242,179,188,0.5)"><strong>Player와 Enemy 둘 다 설정해준다.</strong></span>
Sprite Renderer과 Box Collider 2D는 따로 설정해줄건 없다.
이제 C# script 쪽을 확인해보자. Player script, Enemy script에서 <span style="background-color: rgba(255,255,0,0.5)">Move Speed와 Jump Force</span>를 설정해줘야 한다. 여기서 Move Speed는 game object의 이동 속도, Jump Force는 game object의 점프하는 힘을 뜻한다. 본인이 하고싶은 Move Speed, Jump Force를 적절한 값으로 설정해준다.(저는 사진처럼 설정했어요. Enemy의 Move Speed를 높이니까 바로 잡히길래;;그리고 Jump Force를 높였더니 벼룩마냥 너무 높이 뛰어서;;)
<img src="https://velog.velcdn.com/images/_am1024/post/6d3e6f8d-3230-429a-aef2-b84f350adaa3/image.jpg" alt=""><img src="https://velog.velcdn.com/images/_am1024/post/37bef732-000d-4ccc-9ba8-5539c5f98a82/image.jpg" alt="">
아무튼 이렇게 하면 웬만한 설정들은 끝났다.</p>
<p>게임을 실행해보면</p>
<ol>
<li>방향키를 이동하여 캐릭터 이동, space바를 누르면 캐릭터가 점프함</li>
<li>Enemy가 Player을 따라다님</li>
<li>Player와 Enemy가 만나면 충돌처리(게임 종료)
크게 3가지 기능들이 구현됨을 볼 수 있을 것이다.</li>
</ol>
]]></description>
        </item>
    </channel>
</rss>