일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 내일배움캠프
- projectl
- 스파르타
- 오블완
- 알아볼것
- 코테
- 스파르타내일배움캠프
- 최종프로젝트
- Til
- 백준
- 텍스트게임
- string배열과 char
- 내배캠
- 스파르타부트캠프
- input system
- 스파르타내일배움캠프TIL
- 스탠다드
- 분반별학습
- 코테풀기
- 마크다운
- 피셔예이츠
- 분반별
- Action
- 유니티
- 스파르타내배캠til
- 티스토리챌린지
- 프로그래머스
- 내주말
- 코딩테스트
- Input Field
- Today
- Total
Ottoman
분반별 3주차 Q2 본문
매일 오전 9시부터 오전10시까지 1시간 동안만 진행하는 학습 프로그램.
1. 별도의 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초마다 데미지를 입혀보세요.
이건 개인프로젝트에서 구현해보자
'TIL' 카테고리의 다른 글
내일배움캠프 7주 3일차(31) TIL (0) | 2024.05.29 |
---|---|
분반별 3주차 Q3 (0) | 2024.05.29 |
내일배움캠프 7주 2일차(30) TIL - Raycast와 RaycastHit, MeshRenderer와 SkinnedMeshRenderer, 챌린저 2주특강메모 (0) | 2024.05.28 |
분반별 3주차 Q1 (InputSystem)InputValue와 CallbackContext 차이 (0) | 2024.05.28 |
내일배움캠프 7주 1일차(29) TIL 2- CallbackContext, 마우스델타값 (0) | 2024.05.27 |