캐릭터 carrier 컴포넌트 추가

This commit is contained in:
NTG 2025-08-29 19:03:11 +09:00
parent 362444c1a5
commit f78b5d33a9
2 changed files with 80 additions and 0 deletions

View File

@ -0,0 +1,78 @@
using UnityEngine;
namespace DDD
{
public enum CarriableType
{
None = 0,
GameObjectItem, // 실제 GameObject
VirtualItem // ID만 존재하는 가상 아이템
}
public interface ICarrier
{
GameObject GetCarrierGameObject();
string GetCarrierId();
ICarriable GetCurrentCarriable();
bool CanCarryTo(ICarriable carriable);
void Carry(ICarriable carriable);
void Use(ICarriable carriable);
}
public interface ICarriable
{
string GetCarrierId();
CarriableType GetCarriableType();
void OnCarried(ICarrier carrier);
bool CanCarry();
// 실제 오브젝트인 경우에만 유효
GameObject GetGameObject();
}
public class CharacterCarrier : MonoBehaviour, ICarrier
{
private ICarriable _currentCarriable;
private ISpeechBubble _speechBubble;
public GameObject GetCarrierGameObject()
{
return gameObject;
}
public string GetCarrierId()
{
return _currentCarriable.GetCarrierId();
}
public ICarriable GetCurrentCarriable()
{
return _currentCarriable;
}
public bool CanCarryTo(ICarriable carriable)
{
if (_currentCarriable != null) return false;
if (carriable == null) return false;
if (carriable.CanCarry() == false) return false;
return true;
}
public void Carry(ICarriable carriable)
{
_currentCarriable = carriable;
_currentCarriable.OnCarried(this);
_speechBubble ??= GetComponentInChildren<ISpeechBubble>();
_speechBubble?.Show(_currentCarriable.GetCarrierId());
}
public void Use(ICarriable carriable)
{
_currentCarriable = null;
_speechBubble.Hide();
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: f92b168407b75f14aa1941f878c9a4d5