
<오늘 한 작업>
플레이가 죽으면 코드 조각이라는 아이템을 드랍하는데 다시 가면 먹을 수 있다.
그 드랍한 코드 조각에게 다가가면 상호작용하여 회수하는 코드를 구현했다.
회수하면 코드 조각은 파괴된다.
public interface IInteraction
{
void Interaction();
}
using UnityEngine;
public class CodePiece : MonoBehaviour, IInteraction
{
public GameObject interactionTextCanvas; // 줍기 텍스트 캔버스 출력
void Update() // 임시 코드
{
if (Input.GetKeyDown(KeyCode.F))
{
Destroy(gameObject);
}
}
public void Interaction()
{
Destroy(gameObject);
}
private void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.layer == LayerHelper.OriginLayerValue(LayerHelper.PlayerLayer))
{
interactionTextCanvas.SetActive(true);
}
}
private void OnTriggerExit2D(Collider2D other)
{
if (other.gameObject.layer == LayerHelper.OriginLayerValue(LayerHelper.PlayerLayer))
{
interactionTextCanvas.SetActive(false);
}
}
}
팀원분의 도움을 받아
인터페이스를 사용하는 방식으로 구현했다.
이 코드 기준으로 설명하자면
아이템 클래스가 인터페이스(IInteraction)에서 Interaction() 메서드를 상속받아 구현해 놓으면,
플레이어(혹은 상호작용 주체)는 아이템의 종류와 상관없이 해당 Interaction() 메서드를 호출해서 상호작용할 수 있다.
는 로직이다.
그래서 코드 조각 클래스에서 IInteraction을 상속하기 때문에
Interaction()메서드를 무조건 사용해야한다.
이렇게 상호작용하는 아이템 클래스가 늘어날수록 Interaction() 이 메서드에
내용만 추가하면 플레이어에서 상호작용할 오브젝트(해당 아이템 클래스)를 OnTrigger로 감지해서 그 감지된 오브젝트의 스크립트
데이터를 가져와 해당 아이템의 Interaction()를 사용할 수 있게 된다.
한마디로 여러 아이템에서 같은 이름의 메서드를 사용하는데
그 아이템에 따라 다르게 작동 시킬 수 있다는 것이다.
사진을 보면 이해가 쉽다.
