Unity/제로부터 구현
2D 캐릭터 이동 + 카메라 앵글을 이용한 이동 반경 제한
휘게31
2023. 11. 21. 22:46
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