Effector 2D의 물리효과들
Cinemachine Confiner 2D로 카메라 영역 제한
Animator.Play(hash) 함수로 트랜지션없이 애니메이션 전환

메이플스토리처럼 아래층에서 위로 점프할 때 위층을 통과하고,
착지하면 위층 플랫폼 위에 서있게 되는 이펙터다.즉, 아래에서는 통과되고, 위에서는 막히는 단방향 플랫폼을 구현할 수 있다.

무빙워크처럼 플랫폼에 서있는 오브젝트를 이동시키는 이펙터다.

중심점을 기준으로 오브젝트를 끌어당기거나 밀어내는 이펙터다.
IsTrigger를 체크해야함
Collider영역 안에 들어온 오브젝트를 물 위에 둥둥 떠 있는 것처럼 해주는 이펙터다.
IsTrigger를 체크해야함
Collider영역 안에 들어온 오브젝트를 바람처럼 일정한 방향으로 밀어내는 이펙터다.
IsTrigger를 체크해야함3D에서 Cinemachine 을 사용한 것처럼 2D 에서도 사용할 수 있다.

Add Extension 에서 Cinemachine Confiner 2D 를 선택하면 자동으로 컴포넌트가 추가된다.
Bounding Shape 2D 는 카메라가 나가지 못하게 하는 영역으로
Polygon 이나 Composite 콜라이더를 넣어야한다.

Bound (GameObject)
- Transform
- Rigidbody 2D
- Composite Collider 2D
ㄴ Box (GameObject)
- Transform
- Box Collider 2D
Rigidbody 와 Composite 컴포넌트가 추가된 게임 오브젝트 자식으로
Box Collider 2D 를 추가한 오브젝트를 생성하고 Used By Composite 를 체크하고
Bound 오브젝트를 Cinemachine Confiner 2D 에 추가하면 된다.
그럼 사진과 같이 카메라가 저 영역 밖으로 나가지 못하게 할 수 있다.

또한 Virtual Camera 컴포넌트의 Body 를 Framing Transposer 를 선택하면
카메라의 offset도 조정할 수 있다.
[SerializeField] CinemachineVirtualCamera virtualCamera;
CinemachineFramingTransposer cinemachine;
void Start()
{
cinemachine = virtualCamera.GetCinemachineComponent<CinemachineFramingTransposer>();
}
void PlayerInput()
{
inputX = Input.GetAxis("Horizontal");
if (inputX > 0)
{
sprite.flipX = false;
cinemachine.m_TrackedObjectOffset = new Vector3(2, 0, 0);
}
else if (inputX < 0)
{
sprite.flipX = true;
cinemachine.m_TrackedObjectOffset = new Vector3(-2, 0, 0);
}
}
코드를 통해서도 offset을 조정할 수 있다.

Animator anim;
anim = GetComponent<Animator>();
readonly int IDLE_HASH = Animator.StringToHash("Idle");
readonly int WALK_HASH = Animator.StringToHash("Walk");
readonly int JUMP_HASH = Animator.StringToHash("Jump");
readonly int MOVEJUMP_HASH = Animator.StringToHash("MoveJump");
anim.Play(IDLE_HASH);
anim.Play(WALK_HASH);
지금까지 애니메이션 전환을 파라미터로 변경했었는데
HashCode를 사용하면 트랜지션없이 애니메이션을 즉시 변경할 수 있다.
Idle, Walk, Jump 에 사용하기에는 즉시 변경되서 어색한데
캐릭터가 죽거나 즉시 변경해야할 상황에 사용하면 좋을 것 같다.