2024. 6. 4. 21:07ㆍ나의 개발자 기록/본 캠프 개발 일지
2024년 6월 04일 화요일
팀 프로젝트 진행 상황과 오늘 내가 한 일
오늘도 늘 똑같이 분반별 문제 풀기가 끝나고 팀원분들이랑 함께 이야기를 나누며, 오늘 어떤 식으로 해나가야할지 이야기를 나누었습니다. 어제 못 다한 작업을 하신분들은 마저 작업을 해주셨고, 저는 오전에 어제 작업했었던 움직임 관련해서 오류를 고치거나, 아이템 SO를 바탕으로 필수 자원을 만드는 작업을 했습니다. 그리고 캐릭터 매니저가 자동으로 생성되게끔 싱글톤 스크립트를 수정하고, 어제 추가로 작업했던 플레이어의 Condition(상태) 로직을 UI와 임시로 연결해서 잘 작동하는지 체크를 해봤고, 이상이 없어서 팀원분들에게 이야기 한 뒤에 Develop에 업로드했습니다.
public void OnClick(InputAction.CallbackContext context)
{
if(context.phase == InputActionPhase.Started)
{
MouseClick();
}
}
public void MouseClick()
{
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit, 100f, interactableLayer))
{
if(hit.collider != null)
{
float distanceToPlayer = Vector3.Distance(transform.position, hit.collider.transform.position);
if ((hit.collider.CompareTag("Enemy") || hit.collider.CompareTag("Animal")) && distanceToPlayer <= attackRange)
{
// 공격
Debug.Log("공격");
}
else if (hit.collider.CompareTag("Resource") && distanceToPlayer <= attackRange)
{
// 리소스
Debug.Log("리소스");
}
else
{
return;
}
}
}
}
점심을 먹고 나서 다시 한번 팀 회의를 진행했고, 이번에는 상호작용에 관련된 작업을 맡게 됐습니다. 저희는 마우스 좌클릭을 통해 나무나 돌 같은 리소스, 그리고 적 동물 등에게만 공격 및 상호작용할 수 있게 만들어야 했기에 저는 일단 임시로 PlayerController 부분에다가 마우스 클릭에 대한 로직을 만들어 두었습니다. 어디까지나 임시로 만들어 둔 것이기도 하고, 장비 장착과 관련해서 많이 바뀌어야 했기 때문에 여기까지만 작업했습니다.
if (Time.time - lastCheckTime > checkRate)
{
lastCheckTime = Time.time;
// 플레이어 주변 범위 내의 콜라이더 탐색
Collider[] hitColliders = Physics.OverlapSphere(transform.position, maxCheckDistance, layerMask);
// 상호작용 가능한 객체 찾기
GameObject nearestInteractableObject = null;
float minDistance = maxCheckDistance;
foreach (var hitCollider in hitColliders)
{
float distance = Vector3.Distance(transform.position, hitCollider.transform.position);
if (distance < minDistance)
{
IInteractable interactable = hitCollider.GetComponent<IInteractable>();
if (interactable != null)
{
nearestInteractableObject = hitCollider.gameObject;
curInteractable = interactable;
minDistance = distance;
}
}
}
if (nearestInteractableObject != curInteractGameObject)
{
curInteractGameObject = nearestInteractableObject;
}
if (curInteractGameObject == null)
{
curInteractable = null;
}
}
그다음에는 아이템에 대한 상호작용을 강의 내용을 기반으로 플레이어가 아이템에 닿았을 때 자동으로 먹을 수 있도록 설계를 했습니다. 원래 기존 강의에서는 1인칭 시점에서 플레이어의 CrossHair를 기준으로 아이템 정보가 뜨면서 상호작용할 수 있게 만들었었는데, 저희 게임이 탑다운 뷰이기 때문에 플레이어 기준으로 콜라이더를 배열로 생성하고, OverlapSphere로 해당 아이템이 상호작용할 수 있으면 아이템과 닿음으로써 아이템이 먹어지는 구성으로 만들게 되었습니다.
다 만들고 나서는 아이템 상호작용이 인벤토리와 연관이 매우 크기 때문에 인벤토리를 만들어주시는 분께 바로 공유를 해드렸고, 아이템을 먹으면 인벤토리에 정상적으로 아이템이 들어오는 것 까지 확인한 상태입니다.
저녁을 먹고 나서는 다들 개인이 작업하신 것들을 서로 이야기를 하면서 Develop에 합치는 작업을 했습니다. 합치면서 약간 문제가 생기긴 했지만, 그렇게까지 큰 문제는 아니였기 때문에 다들 서로 다음 할 작업에 대해서 이야기하고, 각자 TIL 쓰면서 오늘 하루를 마무리 했습니다.
'나의 개발자 기록 > 본 캠프 개발 일지' 카테고리의 다른 글
2024년 6월 07일 금요일 개발일지 / 팀 프로젝트 진행 상황에 대해서 (1) | 2024.06.07 |
---|---|
2024년 6월 05일 수요일 개발일지 / ReadOnly 애니메이션 이벤트 추가하는 법 (1) | 2024.06.05 |
2024년 6월 03일 월요일 개발일지 / 유니티 숙련 주차 팀 프로젝트 발제에 대해서 (1) | 2024.06.03 |
2024년 5월 31일 금요일 개발일지 / 싱글톤 패턴에 대해서 (0) | 2024.05.31 |
2024년 5월 30일 목요일 개발일지 / 개인 프로젝트 최종 정리 (0) | 2024.05.30 |