오늘은 상호작용이 가능한 건축물의 베이스 클래스를 설계했다. 현재는 오브젝트 풀링이 적용되지 않은 상태라, 추후 오브젝트 풀링을 적용한 뒤 관련 코드를 수정할 예정이다.
개발 속도를 빠르게 유지하기 위해 처음부터 완벽한 구조를 설계하려고 시간을 소모하기보다는, 우선 작동 가능한 수준의 구조를 잡고 이후 리팩토링을 통해 개선하는 과정을 선택했다.
이런 접근은 빠르게 프로토타이핑하면서도 점진적으로 코드를 개선할 수 있다는 점에서 효율적이라고 느껴진다. 앞으로도 필요한 기능을 하나씩 추가하면서, 구조를 다듬어 나갈 계획이다.
using UnityEngine;
/// <summary>
/// 상호작용 가능한 아키텍처의 기본 클래스
/// 상속을 통해 구체적인 상호작용 동작(HandleInteract)을 정의해줘야 합니다!
/// </summary>
public abstract class InteractableArchitecture : Architecture, IInteractable
{
//상호작용이 반복 가능한지 여부 , 기본적으로는 반복 불가능
[SerializeField] private bool isRepeatable = false;
private bool canInteract;
/// <summary>
/// 풀에서 꺼내올 때 초기화 동작을 처리
/// 초기화 로직 추가 필요시 Init을 상속 받아 구현
/// </summary>
public override void PrepareForActivation(Vector3 spawnPos)
{
transform.position = spawnPos;
canInteract = true;
}
/// <summary>
/// 풀에서 꺼내올 때 초기화 동작을 처리
/// 초기화 로직 추가 필요시 OnRelease를 상속 받아 구현
/// </summary>
public override void OnRelease()
{
// TODO: 객체를 풀에 반환하기 전에 필요한 추가 동작을 구현할 것
}
/// <summary>
/// 풀링 시스템과 독립적으로 작동, 생성시 한번 적용!
/// </summary>
protected virtual void Awake()
{
canInteract = true;
}
/// <summary>
/// 상호작용 감지 주체에서 상호작용을 발생시키기 위해 사용
/// </summary>
public void Interact()
{
if (canInteract || isRepeatable)
HandleInteractionSuccess();
}
/// <summary>
/// HandleInteract의 반환 값을 통해 상호작용이 성공했는 지를 판단!
/// </summary>
private void HandleInteractionSuccess()
{
if (HandleInteract())
canInteract = false;
}
/// <summary>
/// 실질적인 상호작용 동작을 구현 해주기 위한 추상 메서드입니다.
/// 상호 작용이 성공하면 true 반환 , 실패하면 false 반환으로 처리
/// </summary>
protected abstract bool HandleInteract();
}
'내일배움캠프' 카테고리의 다른 글
내일배움캠프: 유니티 Conditional을 활용한 분기 (0) | 2024.12.02 |
---|---|
내일배움캠프: RenderTexture를 활용한 UI (2) | 2024.11.29 |
내일배움캠프: 추상 클래스와 인터페이스 (0) | 2024.11.27 |
내일 배움 캠프: 안 좋은 코드 습관(2) (0) | 2024.11.26 |
내일 배움 캠프: 안 좋은 코드 습관(1) (0) | 2024.11.25 |