게임 개발 로그
개발 노트 #4 본문
업무 내용 및 상황 | 1. 설거지 시스템 UI 추가 (ActionBarUI) 2. 기획에 따른 접시 추가/삭제 기능 수정 3. 기타 오류 수정 |
문제점 | 1. 접시 풀링 사용으로 각도가 틀어진 채로 Create 되는 문제 발생 ( 해결 ) 2. 빠르게 접시 생성 시 오브젝트 겹치는 문제 발생 ( 해결 ) 3. 그릇을 닦는 도중 새로운 설거지가 추가 시 밑에서 차오르도록 요청 ( 해결 ) |
해결 방식 | 1. 오브젝트 DeActive 시에 각도 초기화하도록 수정. 2. Corountine 실행 중이라면 접시 생성 안 되도록 수정. 접시 생성 주기를 0.1초에서 0.2초로 수정. 3. 기존 스택 구조에서 List 로 관리 구조 변경. |
이후 진행 사항 | TODO. 1. 설거지 기능 관련 → 인디케이터 속도 조정 → 그릇의 체력 추가해야 함 → 실패 시 진동 효과 → 성공 시 이펙트 등 → 점수 추가되도록 해야 함 |
0. 클래스 재설계
0-1. 변경사항
- 설거지 오브젝트 관리를 Stack → List 로 변경.
- 이유: Stack 으로는 밑에서 쌓아올리는 것과 위치상 최상단 오브젝트를 Pop하기 힘듬.
- selectPlate라는 변수를 추가하여 최상단 오브젝트가 무엇인지 파악하도록 함. 접시 하나가 삭제될 때마다 SelectPlate() 함수를 실행하여 최상단 오브젝트를 찾음.
- Plate를 RestaurantObject 상속 받다가 안 받는 형태로 변경.
- 풀링매니저와 태그 관련하여 지속적으로 수정해야 할 듯!
1. 씬 관련
- SeminScene 과 BeakScene 을 합침.
- SeminScene 변경사항
- 배경으로 배치될 Objects들의 뷰를 2D 뷰로 변경함.
- 폴더 정리 등
- SeminScene 변경사항
2. UI 관련
private void Update()
{
MoveIndicator();
if (Input.GetKeyDown(KeyCode.Return))
{
if (IsWashingSuccess())
OnSuccessWash?.Invoke(this, EventArgs.Empty);
}
}
private bool IsWashingSuccess()
{
RectTransform perfectzoneRect = perfectZone.GetComponent<RectTransform>();
float indicatorPos = indicatorRect.anchoredPosition.x;
float min = perfectzoneRect.anchoredPosition.x - perfectzoneRect.sizeDelta.x / 2;
float max = perfectzoneRect.anchoredPosition.x + perfectzoneRect.sizeDelta.x / 2;
if (indicatorPos > min && indicatorPos < max)
return true;
return false;
}
- IsWashingSuccess(): 인디케이터와 퍼펙트 존 위치를 비교하여 성공인지 실패인지 반환.
- 엔터를 누르면 IsWashingSuccess()의 결과에 따라 OnSuccessWash 이벤트를 호출.
- OnSuccessWash 이벤트를 구독하는 것: WashingArea.cs
- 설명
// WashingArea.cs
private void OnSuccessWashing(object sender, EventArgs events)
{
if (RemovePlate())
SelectPlate();
else
Debug.Log("failed remove: plate is empty");
}
public bool RemovePlate()
{
if (plates.Count == 0)
return false;
selectPlate.DeActivate();
platesQueue.Enqueue(selectPlate);
plates.Remove(selectPlate);
return true;
}
- 설거지를 성공하면 WashingArea에서 설거지 목록에 보이던 그릇이 사라지도록 이벤트를 구독하고 있음.