게임 개발 로그

레스토랑 대소동: 개발 노트 #11 본문

게임 개발/레스토랑 대소동

레스토랑 대소동: 개발 노트 #11

03:00am 2024. 11. 24. 01:54

 

 

 

1. 설거지 그릇이 경로를 벗어나는 문제 해결.

private void OnAddPlate(EventParam param)
{
	if (plates.Count == 0 || selectPlate == null || selectPlate.CurHp == selectPlate.MaxHp)
		AddPlate(GetRandomCreateCount());
	else
		PutInPlate(GetRandomCreateCount());
}
  • Add Plate가 되는 방법은 두 가지가 존재.
    • (1) 위에서부터 그릇이 떨어진다. 
    • (2) 아래에서부터 그릇이 차오른다.
      → 설거짓거리가 남지 않았을 경우 (2)번으로 처리해서 그릇이 날아가는 현상이 발생했음.
          → 따라서 plates.Count == 0 조건을 추가하여 남은 설거짓거리가 없다면 (1)번의 방법으로 설거지를 추가하도록 함.
          

 

 

2. URP 문제였던 배경 애셋을 사용 가능하도록 수정.

  • Material 재설정
    • 문제의 Material의 Shader를 Standard로 설정
    • Material의 Enable GPU Instancing을 비활성화
    • Material의 Rendering Mode를 Transparent로 설정
      → 이미지가 180도 반전되어 뒤집어질 경우 투명해지는 문제 생김.
      → 투명 문제 생기는 프리팹의 이미지를 다시 Flip하고 재배치하여 투명하지 않도록 함.

 

 

 

 

3. Directional Light, Fog 등 게임 분위기 형성.

  • Windows → Rendering → Lighting 탭에서 Fog 관련 설정을 변경함.
  • 씬마다 적용해야 했음.
  • 씬마다 Lighting이 다른 문제도 발생했었는데, Auto Generate 를 끈 뒤 다시 라이팅을 베이크하여 해결함.

 

 

 

4. StartTextUI 구현

  • 파티클이 잘 안 보이는 문제→ 경우에 따라 Mobile/Particles/Multiply 등이 더욱 가시성 좋을 수 있음.
    → Particle 의 Material 을 Mobile/Particles/Addtive 로 변경함.
  • 파티클과 UI Text를 Dish Layer(최상단 레이어)로 동일하게 적용하여 Layer 순서에 오류가 없도록 함.
    → 기존 UI Canvas는 UI Camera가 적용되어서 파티클이 UI Text보다 앞쪽에 보이는 현상이 있었음.
  • 코드는 Coroutine을 이용해서 Text의 크기 변경, 알파값 변경 등을 적용함.

    TODO: 이후 Event 등을 통해 게임 시작 기능과 연결해야 한다.

  IEnumerator SizeUpText()
  {
      yield return new WaitForSeconds(0.7f);
      particle.gameObject.SetActive(true);
      particle.Play();
      while (true)
      {
          if (text.fontSize >= 140)
          {
              StartCoroutine(HideText());
              break;
          }
          text.fontSize += Time.deltaTime * speed;
          yield return null;
      }
  }

  IEnumerator HideText()
  {
      Color temp = text.color;
      yield return new WaitForSeconds(0.7f);
      while (true)
      {
          temp.a -= Time.deltaTime * alphaSpeed;
          text.rectTransform.position -= new Vector3(0, Time.deltaTime, 0);
          if (temp.a < 0)
          {
              // Event를 던져야 하나?
              Destroy(gameObject);
              break;
          }
          text.color = temp;
          yield return null;
      }
  }