캐릭터 컨트롤러 구현 그리고 첫 게임 제목 결정
안녕하세요! 첫 개발 일지 업로드 해보네요.
오늘은 기본적인 2D 플랫포머에서의 캐릭터 컨트롤러를 작성해보았습니다.
캐릭터 기본 동작 : 움직임
A, D 를 사용하여 좌,우 이동을 할 수 있습니다.
A, D 와 함께 W, S 를 조합하여 8방향으로 점프, 대쉬를 조작할 수 있습니다.
캐릭터 기본 동작 : 점프
Space 를 눌러 점프를 할 수 있습니다.
공중에 체공시 Space 를 한 번 더 눌러서 더블 점프를 할 수 있습니다.
체공시 WASD 를 조합하여 특정 방향으로 더블 점프 또한 가능합니다.
캐릭터 기본 동작 : 대시
WASD + Shift 키를 눌러 특정 방향으로 대시를 할 수 있게 만들었습니다.
추후 총을 넣어 마우스 포인터를 기반으로 회전 처리를 할 계획인데, 마우스 포인터 방향으로 대시를 넣자하니 후퇴하면서 총을 쏠 수 없을 것 같아서
이런 결정을 내리게 되었습니다.
캐릭터 기본 동작 : 경사로 이동
캐릭터가 좌우 이동을 할 때 경사면 처리 로직을 동작하게 했습니다.
지면 각도와 이동 방향을 확인해 경사를 오를지, 내릴지 결정합니다.
protected void ClimbSlope(ref Vector2 deltaMove) {
if (collisions.groundAngle < minWallAngle) {
float distance = Mathf.Abs(deltaMove.x);
float yMove = Mathf.Sin(collisions.groundAngle * Mathf.Deg2Rad) * distance;
if (deltaMove.y <= yMove) {
deltaMove.y = yMove;
deltaMove.x = Mathf.Cos(collisions.groundAngle * Mathf.Deg2Rad) * distance * Mathf.Sign(deltaMove.x);
collisions.below = true;
speed.y = 0;
externalForce.y = 0;
}
}
}
경사각이 벽 각도(minWallAngle) 보다 작으면 경사면을 오릅니다.
\(sin\) (각도)로 \(Y\)축 이동을 계산해 수직 이동을 구현합니다.
\(cos\)(각도)로 \(X\)축 이동을 조정해 수평 이동을 유지합니다.
만약 경사면이 너무 가파르지 않으면, 수평 및 수직 이동이 동시에 일어납니다.
protected void DescendSlope(ref Vector2 deltaMove) {
float distance = Mathf.Abs(deltaMove.x);
deltaMove.x = Mathf.Cos(collisions.groundAngle * Mathf.Deg2Rad) * distance * Mathf.Sign(deltaMove.x);
deltaMove.y = -Mathf.Sin(collisions.groundAngle * Mathf.Deg2Rad) * distance;
collisions.below = true;
speed.y = 0;
externalForce.y = 0;
}
경사로를 내려갈 때는 \(X\)축과 \(Y\)축 이동을 다시 삼각함수로 계산합니다.
\(Y\)축 이동이 음수( \(-sin\) )로 처리되어 캐릭터가 아래로 내려가는 동작을 합니다.
경사면이 바뀔 때 Raycast를 사용해 새로운 각도를 감지합니다.
hit.normal
을 통해 지형의 법선 벡터를 가져오고, 이를 이용해 새로운 각도를 계산합니다.
만약 새로운 경사각이 기존과 다르면 이동 벡터를 조정해 매끄러운 경사 이동을 보장합니다.
캐릭터 기본 동작 : 벽타기
우선 캐릭터가 벽에 충돌했는지 확인하게 했습니다.
벽타기가 가능한 상태이고, 캐릭터가 아래로 이동 중일 때 벽타기가 시작됩니다.
캐릭터가 벽에 붙은 상태에서는 외부 힘과 수직 속도를 0으로 설정합니다.
이후 캐릭터는 설정된 속도로 천천히 미끄러집니다.
벽의 법선 벡터에 따라 캐릭터의 스케일을 조정하여 좌우 방향 전환이 이루어집니다.
벽에서 떨어졌다면, 벽타기 모드를 종료합니다.
또한 벽타기 모드에서 점프와 더블 점프를 사용하여 벽을 오를 수 있게 구현했습니다.
첫 게임 타이틀을 결정했습니다..!!
그것은 바로..
Project Arca
입니다.
직역하면 방주(그리스어로 아르카) 계획 입니다.
다들 기대해주시면 감사하겠습니다!