오늘은 스파르타 코딩 클럽 unity 게임 개발 과정 64일차(최종프로젝트 15일차 내가 구현한 것을 정리해보자. 발표 자료 준비)
2024. 2. 1. 01:07ㆍ스파르타코딩클럽 게임개발
반응형
시간 조작과 물리 퍼즐 구현
1. ReplayRecorder: 시간 역행 구현
- 기능: 객체의 움직임을 기록하고 역재생시켜 시간을 되돌리는 효과 제공.
- 주요 메소드:
StartRecording()
/StopRecording()
: 녹화 시작 및 중지.StartReversePlayback()
/StopPlaybackAndClearFrames()
: 역재생 시작 및 중지.
구현 방법
- 사용 컴포넌트: Rigidbody, Renderer.
- 데이터 저장:
Stack<FrameData>
활용. - 코루틴 활용: 주기적인 프레임 기록 및 재생.
학습 포인트
- 스택 사용: 역순 재생에 적합한 LIFO 특성 활용.
- 코루틴 활용: 비동기적 프레임 처리.
- 보간 기법:
Vector3.Lerp
와Quaternion.Lerp
사용.
2. Brack 스크립트: 물체 파괴 및 복구
기능
- 파괴 및 복구: 오브젝트 파괴나 복구 시 자연스러운 전환 효과.
- 속성: 파괴될 때 생성될 프리팹, 파괴 시 적용될 힘 설정.
사용 예
- 적용:
DestroyedObject
의Start
부분에 적용. - 메소드:
Destroing()
및Restroring()
.
3. 다양한 반응형 오브젝트 구현
3-1. GravityAttractor: 중력장 구현
- 기능: 특정 위치에서 중력과 같은 힘 발생, 주변 Rigidbody 끌어당김.
- 구현 방식:
Physics.OverlapSphere
사용, 중력 힘 계산 및 적용.
3-2. AccelerationZone: 가속 구역 구현
- 가속 제공: 트리거 구역 내에서 객체에 지속적 가속 제공.
- 가속 계산: 객체의 이동 방향 및 가속도 기반 힘 적용.
3-3. PlayerViewGravity: 플레이어 중심 중력 조절
- 기능: 플레이어 시점 방향에 따라 중력 조절.
- 구현: 화살표 키 입력에 따른 중력 방향 변경 및 적용.
3-4. ReflectiveJump: 반사 점프 구현
- 반사 점프: 객체 충돌 시 반사각 계산 및 점프 힘 적용.
- 접촉 계산: 충돌 정보를 기반으로 반사 벡터 계산.
3-5. ContinuousAccelerationZone: 연속 가속 구역
- 연속 가속: 구역 내에서 객체에 지속적으로 가속 적용.
- 속도 조절:
Mathf.MoveTowards
활용하여 점진적 속도 증가.
디자인 패턴 활용
이 프로젝트에서 사용된 주요 디자인 패턴들을 정리했다.
1. Observer 패턴
- 목적: 객체 간 결합도 감소 및 유지보수성 향상.
- 적용: 객체 상태 변경 시 다른 객체에게 알림.
구현
- ReplayRecorder 클래스: 상태 변경 감지 및 알림 발송.
- DestroyedObject 클래스: 상속받은 ReplayRecorder에서 상태 변경 이벤트 처리.
- ParentObject 클래스: 자식 객체의 상태 변경 알림 수신 및 처리.
예제 코드
public delegate void StateChangeHandler(DestroyedObject sender, bool isDone, bool isClick);
public event StateChangeHandler OnStateChange;
// ...
OnStateChange?.Invoke(this, newIsDone, newIsClick);
2.상속 (Inheritance)
- 목적: 코드 재사용 및 확장성 향상.
- 적용: 공통 기능을 가진 베이스 클래스 정의 후 확장.
구현
- ReplayRecorder 클래스: 기본 기능 제공.
- DestroyedObject 클래스: ReplayRecorder 상속 및 기능 확장.
예제 코드
public class DestroyedObject : ReplayRecorder
{
// 상속받은 메소드 확장
public override void Recording(bool newIsDone, bool newIsClick)
{
// ...
}
}
3. 코루틴 (Coroutine)
- 목적: 비동기 작업 관리 및 효율적인 프레임 처리.
- 적용: 게임 오브젝트의 비동기적 동작 구현.
구현
- ReplayRecorder 클래스: 프레임 기록 및 역재생 관리.
예제 코드
private IEnumerator PlaybackCoroutine()
{
// ...
}
4.멘토 패턴 (Memento Pattern)
개요
- 목적: 객체의 상태를 저장하고 이전 상태로 복원.
- 적용: 객체의 상태 변화 추적 및 이전 상태로의 복원.
구현
- FrameData 구조체: 객체의 상태 저장.
- ReplayRecorder 클래스: 객체 상태(멘토)를 Stack에 저장 및 복원.
예제 코드
public struct FrameData
{
public Vector3 position;
public Quaternion rotation;
public Vector3 scale;
public Color color;
}
protected Stack<FrameData> recordedFrames = new Stack<FrameData>();
디자인 패턴 종합 정리
이 프로젝트에서 사용된 주요 디자인 패턴들을 재정리합니다.
1. Observer 패턴
- 적용: 객체 간 결합도 감소 및 유지보수성 향상.
- 구현: 객체 상태 변경 시 다른 객체에게 알림.
2. 상속 (Inheritance)
- 적용: 코드 재사용 및 확장성 향상.
- 구현: 베이스 클래스 정의 후 상속을 통한 기능 확장.
3. 코루틴 (Coroutine)
- 적용: 비동기 작업 관리 및 효율적인 프레임 처리.
- 구현: 게임 오브젝트의 비동기적 동작 관리.
4. 멘토 패턴 (Memento Pattern)
- 적용: 객체 상태 저장 및 복원.
- 구현: 객체의 상태(멘토)를 Stack에 저장 및 복원.
결론
이 프로젝트는 Observer 패턴, 상속, 코루틴 및 멘토 패턴을 통해 게임의 유연성, 재사용성 및 유지보수성을 향상시켰습니다. Observer 패턴은 객체 간의 결합도를 낮추고, 상속은 코드 재사용을 용이하게 하며, 코루틴은 비동기적인 작업을 효율적으로 관리할 수 있게 합니다. 멘토 패턴은 객체의 상태를 저장하고 복원하는 데 중요한 역할을 하여, 복잡한 상태 관리를 가능하게 합니다. 이러한 패턴들의 적용은 게임 개발의 복잡성을 관리하고, 더 나은 코드 품질을 달성하는 데 중요한 역할을 합니다.
반응형
'스파르타코딩클럽 게임개발' 카테고리의 다른 글
오늘은 스파르타 코딩 클럽 unity 게임 개발 과정 65일차(최종프로젝트 16일차 업데이트의 프레임 조절! 트러블슈팅!) (1) | 2024.02.01 |
---|---|
오늘은 스파르타 코딩 클럽 unity 게임 개발 과정 62일차(최종프로젝트 13일차 계가 느려지지 않는 버그) (0) | 2024.01.31 |
오늘은 스파르타 코딩 클럽 unity 게임 개발 과정 61일차(최종프로젝트 12일차 면접준비 2!) (0) | 2024.01.29 |
오늘은 스파르타 코딩 클럽 unity 게임 개발 과정 59일차(최종프로젝트 10일차 시계를 만들어보자) (0) | 2024.01.29 |
오늘은 스파르타 코딩 클럽 unity 게임 개발 과정 57일차(최종프로젝트 8일차 블랜더를 이용해서 기존에 가지고있는 모델 부숴버리기) (1) | 2024.01.22 |