Ottoman

분반별 3주차 Q2 본문

TIL

분반별 3주차 Q2

오토만 2024. 5. 29. 09:31

매일 오전 9시부터 오전10시까지 1시간 동안만 진행하는 학습 프로그램.

 

1. 별도의 UI 스크립트를 만드는 이유에 대해 객체지향적 관점에서 생각해보세요.

더보기
더보기

단일 책임 원칙을 따라서 UI기능이라는 단일 책임을 질 클래스를 만든다. 계속 말하면 끝이 없다.

 

2. 인터페이스의 특징에 대해 정리해보고 구현된 로직을 분석해보세요.

 

3. 핵심 로직을 분석해보세요. (UI 스크립트 구조, CampFire, DamageIndicator)

UI스크립트

더보기
더보기

Conditions

Condition.cs : UI로써의 컨디션바의 출력해야할 현재정보를 받고 출력을 구현할 클래스. 컨디션에 해당하는 UI바 게이지 그래픽을 움직이게할 메서드가 구현되어있다. 그리고 이 값에 접근할 수있는 메서드를 제공한다.

UICondition.cs : Condition.cs의 아무개값value을 가리켜 Health와 Stamina등으로 추상적인 개념을 주입함. 

 

PlayerCondition.cs : UICondition.cs로 접근해 분류된 Health value와 Stamina value를 가져와 플레이어가 쓸 정보로 삼는다. 플레이어의 Health와 Stamina 값을 바꾸는 메서드와 그 변화로 인해 생기는 메서드(체력0 => 죽음)를 제공한다.

 

CampFire

더보기
더보기
public interface IDamageable
{
    void TakePhysicalDamage(int damage);
}

 

List<IDamageable> things = new List<IDamageable>(); // 1. 여기에 저장된 오브젝트들에게 캠프파이어데미지를 줄 것.

private void Start()
{
    InvokeRepeating("DealDamage", 0, damageRate);
}

void DealDamage()
{
    for(int i = 0; i < things.Count; i++) 
    {
        things[i].TakePhysicalDamage(damage);
    }
}

 private void OnTriggerEnter(Collider other)
 {
     if(other.TryGetComponent(out IDamageable damageable))   // other가 IDamageable이 있다면 그걸 damageable로 가져온다.
     {
         things.Add(damageable); // 2. 리스트에 저장
     }
 }

 private void OnTriggerExit(Collider other)
 {
     if (other.TryGetComponent(out IDamageable damageable))  
     {
         things.Remove(damageable);
     }
 }

의존 역전 원칙을 이용. 

 

이 객체의 상호작용(collider충돌)으로 인해, 결과(피해)를 돌려받을 피해받는게 가능한 객체(<IDamageable>)들을 List로 저장한다.

=> 저장된 객체들에게서  IDamageable에 선언된 메서드를 호출한다.

=> Start(). 이 객체가 생성된 후 InvokeRepeating으로 데미지를 입히는 메서드를 반복 호출하고있지만 List에 저장된 객체가 없으면 피해를 입는 객체도 없다.

DamageIndicator

더보기
더보기

// 유저의 게임시야에 ui로 필터를 입히듯이 플레이어가 피해를 입을 때 시야를 붉게해서 시각효과를 주는 클래스

- 코루틴 안에 while문을 이용해서 호출 후 시간이 지남에 따라 붉게한 필터의 알파값을 0을 향해 내려가도록 빼기 연산을 한다.

- 매 프레임 빼기 연산을 한 값을 출력하도록 해서 색이 옅어지면서 붉은색이 사라지는 것을 표현했다.

 

 

0. 새로운 스탯을 만들고, 이를 UI를 통해 관리해보세요.

  • 예) 마나 스탯, 스킬 사용 시 감소, 마나 회복 아이템 소비 시 회복
  • 새로운 장애물을 만들어서 캐릭터에게 n초마다 데미지를 입혀보세요.

이건 개인프로젝트에서 구현해보자