Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

zyeon's 작심삼일 코딩 공부

대화·퀘스트 시스템 - (1) NPC 설정, 플레이어 레이캐스트 본문

unity

대화·퀘스트 시스템 - (1) NPC 설정, 플레이어 레이캐스트

젼뀨 2024. 9. 12. 05:10

전체적인 코드는 유튜브 골드메탈을 참고했다.

 

플레이어 레이캐스트

 

잘 안보이겠지만 마젠타 색상의 얇은 선이 레이캐스트이다.

레이 캐스트로 'NPC' 태그 된 오브젝트 스캔 시 대화 버튼을 활성화 해주자.


public class NPCData : MonoBehaviour
{
    public int id;
    public string ObjName;
}

우선 NPC에 id와 이름을 설정하기 위해서 스크립트를 만들어준다.

 

그 다음 NPC로 설정할 오브젝트의 태그를 'NPC'로 설정해주고, 정보도 넣어준다.


이제 플레이어에서 레이캐스트로 NPC 오브젝트를 스캔할 수 있게 해준다.

/* PlayerMove.cs */

[SerializeField] GameObject m_dialogueStartBtn;     // 대화 시작 버튼
GameObject m_scanObject = null;                     // 플레이어가 스캔하고 있는 오브젝트

private void FixedUpdate()
{
    ScanObjecct();
}

//레이캐스트로 NPC 오브젝트 스캔
void ScanObjecct()
{
    Debug.DrawRay(m_rigidbody.position, m_dirVec * 1.5f, new Color(1, 0, 1));
    RaycastHit rayHit;

    if (Physics.Raycast(transform.position, m_dirVec, out rayHit, 1.5f))
    {
        if (rayHit.collider.tag == "NPC")
        {
            m_scanObject = rayHit.collider.gameObject;
            m_dialogueStartBtn.SetActive(true);
        }
    }
    else
    {
        m_scanObject = null;
        m_dialogueStartBtn.SetActive(false);
    }
}

//대화 버튼 동작
public void DialogueButton()
{
    if (m_scanObject != null)
    {
        UIManager.Instance.DialogueAction(m_scanObject);
    }
}

 

싱글톤 매니저로 작성 된 UIManager DialogueAction()스캔한 오브젝트를 전달 해

저장 되어있는 정보들로 대화 가능하게 해줄 것 이다.