본문 바로가기

Unity/제로부터 구현

2D 캐릭터 이동 + 카메라 앵글을 이용한 이동 반경 제한

728x90

오늘의 구현.

1. 캐릭터의 단순 좌우 이동

2. 카메라 앵글을 이용한 캐릭터의 이동 반경 제한시키기.

 

1. 캐릭터 이동

        Vector2 moveVec;
        moveVec = new Vector2(Input.GetAxisRaw("Horizontal"),0).normalized * playerSpeed * Time.deltaTime;
        
        if(moveVec.x < 0)
        {
            playerDir = -1;
        }
        else if(moveVec.x > 0)
        {
            playerDir = 1;
        }

        transform.localScale = new Vector3(playerDir, 1, 1);
        transform.Translate(moveVec);

 

좌우 키를 눌렀을때 moveVec에 값을 업데이트 해주고,  그 값이 음수면 왼쪽, 양수면 오른쪽으로 이동하기 때문에 2d 스프라이트를 그에 맞게 좌우 반전 시켜줍니다. 좌우반전은 scale 값의 x를 -1 로 해주면 됩니다.

 

2. 캐릭터 이동반경 제한 시키기

    Camera mainCamera;
    float bounderyPadding = .4f;
    private Vector2 minBounds; // 최소 바운더리 좌표
    private Vector2 maxBounds; // 최대 바운더리 좌표	

	void PlayerMoveBoundery()
    {
        float cameraWidth = mainCamera.orthographicSize * mainCamera.aspect;
        minBounds.x = -cameraWidth + bounderyPadding;
        maxBounds.x = cameraWidth - bounderyPadding;

    }

    void ClampPosition()
    {
        Vector3 clampedPosition = transform.position;
        clampedPosition.x = Mathf.Clamp(clampedPosition.x, minBounds.x, maxBounds.x);
        transform.position = clampedPosition;
    }

1. 카메라의 가로 길이를 구합니다

  • orthographicSize : 카메라의  수직 크기로 예로 orthographicSize 가 5 이면, 위로 5, 아래로 5, 총 10의 크기를 가진 공간을 보게 됨을 의미합니다.
  • aspect : 카메라의 가로/세로 비율로 aspect 값이 1.778 (16:9 화면 비율)일 경우, 카메라의 가로 길이는 세로 길이의 1.778배로 설정되어 있음을 의미합니다. 이는 가로로 더 넓은 시야를 갖는 화면 비율을 가진 것을 나타냅니다.
  • 카메라의 가로 길이는 orthographicSize * 2 * aspect 이 됩니다.  현재는 가로의 전체 길이를 알 필요가 없기때문에 orthographicSize * aspect을 해줍니다.

2. 최대 이동 거리와 최소 이동 거리를 구해줍니다

  •  minBounds.x = -cameraWidth + bounderyPadding;
  •  maxBounds.x = cameraWidth - bounderyPadding;

3. 최대 이동 거리와 최소 이동거리로 클램핑 해줍니다.

  • Mathf.Clamp() 는 해당 값을 특정 범위 내에 값으로 유지 시켜줍니다.
    • 주어진 값이 최소값보다 작을 경우, 최소값으로 대체됩니다.
    • 주어진 값이 최대값보다 클 경우, 최대값으로 대체됩니다.
    • 주어진 값이 최소값과 최대값 사이에 있을 경우, 값은 변경되지 않습니다.
728x90