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()에 스캔한 오브젝트를 전달 해
저장 되어있는 정보들로 대화 가능하게 해줄 것 이다.