collider
PolygonCillider 2d- 콜라이더의 모양들을 변경할 수 있다
(mesh collider와 비슷)

Composite collider 2d -
여러콜라이더를 한번에 묶어서 관리(used by composite눌러야됨) 타일맵에 자주사용 -> 병합돼서 구성


두개의 콜라이더를 겹치게 만들어 하나의 콜라이더처럼 사용할 수 있다.
2D에서 colldier에 effector를 제공한다.
먼저 콜라이더의 에펙터를 사용하기 위해선 Used By Effector를 체크해줘야한다.

Area Effector 2D
원하는 각도에서는 바닥 역할을 하고 원하는 각도가 아닐경우 통과할 수 있는 기능을 한다.



Buoyancy Effector 2D
물처럼 붕 뜨는 효과를 적용할 수 있다.
Surface Level 을 통해 높이를 설정할 수 있고 Density를 통해 밀도를 정할 수 있다.


Point Effector 2D
중력과 반중력 기능을한다.

surface Effector 2D

공항 평지 에스컬레이터 같은 느낌으로 자동으로 움직일 수 있게 해준다. 이 에펙터를 사용할 때 내 움직임에 주의해서 사용해야한다.
Area Effector
바람이 부는 느낌으로 어느 방향에 힘을 가하기에 적합한 에펙터이다(마찰력 구현에 좋을거같다)

2D Cinemachine
2D에서도 동일하게 virtual camera를 생성해주고, Add Extentions 에서 Cinemachine confiner 2D를 선택해준다.
이 때 Bounding Shape 2D에 들어갈 수 있는 오브젝트는 Polygon Collider 2D, Composite Collider 2D 두개이다.



CamRange안에 box를 넣어주고 박스는 카메라가 움직일 수 있는 최대 거리를 조절해준다.

V 는 virtual camera의 크기, B는 BoxColldier의 크기이다
virtual camera가 오른쪽 끝의 길에 도달한다면 V는 그대로 고정되고 플레이어만 움직이게 될 것이다.

오른쪽 끝에 카메라를 벗어난 플레이어를 볼 수 있을 것이다.
2D 애니메이션은 3D와 다르게 간단하게 만들 수 있는데

이렇게 하나하나의 그림으로 되어있는 이미지를 sprite형태로 가져온다. 그리고 Sprite Mode에서 여러개의 이미지로 만들거니까 Multiple로 설정하고, Pixels Per Unit을 픽셀의 크기에 맞춰 설정하고, Apply해준다
그리고 sprite editor를 선택하고,


Pivot을 Bottom으로 설정해서 모든 이미지의 기준점을 bottom Center로 맞춰준다.

슬라이스 해준다면 다음과같이 영역이 나누어 질것이고, Apply해준다

펼쳐보면 다음과같은 이미지가 생성이 되고,

새로운 클립을 만들어서 이미지를 드래그해서 애니메이션에 옮겨준다. 실행해보면 이미지가 변하면서 움직이는 효과를 볼 수 있다.
이번에는 다른 방법으로 애니메이션을 실행하는 효과를 구현할건데 ReadOnly를 사용해보자(중간중간 이벤트를 통해 애니메이션을 구현하는것도 있는데 무시해도 된다)

만든 애니메이션을 다음과 같이 배치하고, 실습을 진행하자

readonly를 사용해서 읽기 전용 애니메이션을 Hash를 사용해서 애니메이션을 구성한다.

여기서 SpriteRenderer를 가져오는 이유는 SpriteRenderer를 사용해서 캐릭터의 앞과 옆을 구현할것이다.



이쪽에서 플레이어의 rigid,velocity에서 조심해야 하는게(왜 이런지 30분 고민했다) new Vector2(inpuX*moveSpeed,0); 으로해도 앞,뒤는 잘 구현된다. 이는 y축 값이 항상 0으로 출력해서 플레이어가 점프구현을 하게된다면 동작하지 못하게 될 수 있다.


잘 움직이는것을 볼 수 있다.
Monster

다음은 몬스터를 구현했는데 앞뒤로 움직이다가 양 옆의 collider를 만나게 된다면 잠시 멈췄다가 앞으로 다시 이동하도록 구현했다.

바닥과 하위 오브젝트로 두개의 빈오브젝트에 boxCollider2D를 넣고 isTrigger를 활성화 해줬다.

Monster

아직 사용하지 않는 변수도 있지만 이벤트를 통해 쉽게 제어하기 위해 Monster라는 클래스를 상속 받아 사용할 것이다.

Hash를 사용해서 애니메이션을 등록하고, 특이한 점은 surfaceEffector를 사용했다.
2D Effector를 사용해서 몬스터의 움직임을 왔다 갔다 해줄 것이다.


Move : spriteRenderer를 통해 왼쪽 오른쪽 바라보는 방향을 설정했고, surfaceEffector.speed를 통해 어느 방향으로 움직이는지 +,-를 통해 moveSpeed로 설정해주었다. IsWalk는 둘다 true로 반환해서 이벤트에서 애니메이션을 움직이는 애니메이션으로 설정해주었다.

trigger와 멈출경우 CanMoving을 통해 모든 동작을 멈추고 IsWalk 가 false가 돼서 애니메이션을 변경해준다. spriteRenderer.flipX를 이전의 상태와 반대되도록 설정해주고 잠시 정지를 위해 surfaceEffector,speed를 0으로, 그리고 딜레이를 위해 count = countDelay의 값으로 설정 해주었다.

마지막으로 이벤트 함수로 value값이 true일 때와 false일 때의 애니메이션을 따로 조건문을 걸어주었다

