-
2D 캐릭터 이동 + 카메라 앵글을 이용한 이동 반경 제한Unity/제로부터 구현 2023. 11. 21. 22:46728x90
오늘의 구현.
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'Unity > 제로부터 구현' 카테고리의 다른 글
1인칭 시점 구현하기 + 이동 (0) 2023.11.30 짝 맞추기 카드 만들기, 카드 섞기, 리소스를 사용한 스프라이트 설정 (0) 2023.11.28 3D 플레이어 이동 구현(마우스로 방향전환, 키보드로 방향전환) (1) 2023.11.24 마우스 이동에 따른 물체 옮기기, PlayerPrefs를 이용한 최고 점수 저장 밑 불러오기 (0) 2023.11.23 GameManager(싱글톤) + CanvasGroup으로 UI 컨트롤 (1) 2023.11.22