61.내일배움캠프 53일차 TIL <Unity 2D 팀프로젝트- MartialGod:Reborn - 2일차> 06/24

정광훈(Unity_9기)·2025년 6월 24일

TIL (Today I Learned)

목록 보기
62/110
post-thumbnail

<오늘 한 작업>

플레이가 죽으면 코드 조각이라는 아이템을 드랍하는데 다시 가면 먹을 수 있다.
그 드랍한 코드 조각에게 다가가면 상호작용하여 회수하는 코드를 구현했다.
회수하면 코드 조각은 파괴된다.


<코드 구현>

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()를 사용할 수 있게 된다.

한마디로 여러 아이템에서 같은 이름의 메서드를 사용하는데
그 아이템에 따라 다르게 작동 시킬 수 있다는 것이다.

사진을 보면 이해가 쉽다.

0개의 댓글