[TransitionAttack]
작업 일자:2025_05_31_1400 ~ 2025_05_31_2100 2025_05_30_2000 ~ 2025_05_30_0000
주요 작업:TransitionAttack
진행도:70%
1. 작업 요약
- 보스의 페이지 전환 공격을 만들었다
2. 상세 작업 내역
항목내용
추가 메서드/클래스 | PrinterTransitionAttck, PrinterCameraController, PrinterPlatformManager,GiantPaper |
수정 사항 | |
삭제/리팩토링 | PrinterPattern |
2-1. 주요 코드 요약
(1) PrinterCameraController
- 보스가 이동한다면 그 보스를 따라 카메라가 이동한다
- 플레이어는 카메라 밖으로 나간다면 자동으로 카메라 안쪽으로 이동시킨다
- 업데이트문을 이용해 카메라의 위치를 변환과 Player가 카메라 범위 밖에있는지 확인하는 클래스인 IsPlayerOutOfBounds를 통해 구현한다
if (currenState == PrinterState.Transition)
{ //targetPos 변수 선언 및 Vector3 에 보스의 X 좌표 + 앞을보게할 값 을 넣고 Y Z 를 고정한다
Vector3 targetPos = new Vector3(bossTransform.position.x + bossFollowOffsetX, transform.position.y, transform.position.z);
//카메라의 위치 Vector3.Lerp로 처리 (시작위치, 도착위치, 보정 계수) 보정계수의 상태에 따라 a 또는 b 를 입력해 부드럽고 자연스러운 움직임을 구현
transform.position = Vector3.Lerp(transform.position, targetPos, cameraLerpSpeed * Time.deltaTime);
if (IsPlayerOutOfBounds(playerTransform))
{ //밀어내는 거리 = Vector3 우측으로 밀쳐네는 속도만큼 deltatime 보정으로
Vector3 pushDirection = Vector3.right * playerPushSpeed * Time.deltaTime;
//LastUpdate를 통한 자연스러운 밀어내기
playerTransform.position += pushDirection;
}
}
(2) PrinterPlatformManager
- 타일맵 등록후 해당 타일맵의 호출지점 기준으로 받은 매개값만큼 Tile을 삭제해주는 클레스
- 특수 변환 패턴시 타일을 파괴할때 사용한다
[SerializeField]
public Tilemap platformTilemap;
// 타일 즉시 제거 함수
public void DestroyPlatformsInArea(Vector3 center, Vector2 size)
{ //Tile 범위 확인 중심을 기준으로 좌우 한칸씩 삭제
BoundsInt bounds = new BoundsInt(
Mathf.FloorToInt(center.x - size.x / 2),
Mathf.FloorToInt(center.y - size.y / 2),
0,
Mathf.CeilToInt(size.x),
Mathf.CeilToInt(size.y),
1
);
foreach (Vector3Int pos in bounds.allPositionsWithin)
{ //타일 존재 확인
if (platformTilemap.HasTile(pos))
{ //있으면 제거
platformTilemap.SetTile(pos, null);
}
}
}
2-3. 주요 코드 요약
(1) GiantPaper
- 플랫폼을 부수며 지나가는 거대한 종이를 소환한다 또한 Grounds 판정을 받아 밟을수있다
- 또한 충돌중인 TileMap을 전부 파괴한다
private void OnTriggerStay2D(Collider2D collision)
{
// 충돌한 오브젝트가 타일 레이어에 속하는지 확인
bool matchesTarget = collision == targetTileCollider;
if (((1 << collision.gameObject.layer) & tileLayer) != 0 || matchesTarget)
{
// 충돌한 지점 중 종이 위치에서 가장 가까운 지점을 반환
Vector3 hitPoint = collision.ClosestPoint(transform.position);
// 충돌 지점을 중심으로 가로 3, 세로 1 범위의 플랫폼을 파괴
FindObjectOfType<PrinterPlatformManager>().DestroyPlatformsInArea(hitPoint, new Vector2(3f, 1f));
}
}
3. 작업 중 변경사항
- 페이즈 전환 패턴시 랜덤하게 나오는 발판패턴 -> 고정된 발판패턴으로 변경
사유: 중요한 패턴이기에 게임에 익숙하지 않은 플레이어가 반복적으로 외워서라도 클리할수있도록 하였다
4. 소요 시간
항목시간
예상 소요 시간 | 8시간 |
실제 소요 시간 | 12시간 - 집중력이 조금 낮았다 더 집중했다면 훨씬 잘 마무리했을것 같다 |
5. 작업 중 애로사항
- 랜덤발판 사용시 클리어가 불가능하도록 GiantPaper가 생성되는경우가있었다
현재 발판 위치와 이전 발판 위치등을 사용해 최대 5이상 차이가 안나도록하여서 해결하려 했으나
고정값으로 변경해서 해결되었다
6. 예상되는 문제점
- 실제 애니메이션 적용시
지금은 기본 하얀 Img에 Collider또한 간단하여 잘 작동하지만 만일 실제 애니메이션적용시 Collider 차이로 발판에 낀다거나 플랫폼이 제대로 파괴되지않는 경우 가 생길수 있을 것 같다 그럴때는 실제 애니메이션과 다르게 BoxCollider를 사용한다던가 하는 방법을 생각해 봐야 할 것 같다 - 보스의 State변환
현재 잘 작동하도록 만들어두긴 하였으나 워낙 스크립트가 이곳 저곳 옮겨다니며 State변환 메세지를 StateMachine으로 전달하다보니 완성과정에서 꼬인다면 감당 못할수도 있을것 같다 - 애니메이션
애니메이션 관련 아직 완벽히 잡히지가 않아 보류한상태로 제작을하고있는데 후에 애니메이션 처리과정이 복잡해질수 있을듯하여 기본적인 체계는 잡아두려고한다 - 횡 공격
횡공격에 대한 의견이 분분해 아직 하나로 정해서 만들지 못하고있다 여려 자료를 참고하고있으나 아직 부족한 부분이많다
7. 다음 작업 계획
- PrinterAnimation && 횡공격 패턴
'개인개발기록 > 게임개발프로젝트' 카테고리의 다른 글
2025_05_29_플랫포머_게임개발_연습_프로젝트 (0) | 2025.05.29 |
---|---|
2025_05_28_플랫포머_게임개발_연습_프로젝트 (0) | 2025.05.29 |
2025_05_27_플랫포머_게임개발_연습_프로젝트 (0) | 2025.05.27 |
2025_05_24_플랫포머_게임개발_연습_프로젝트 (0) | 2025.05.24 |
2025_05_21_플랫포머_게임개발_연습_프로젝트 (0) | 2025.05.22 |