2023년 12월 13일 수요일

unity tutorial - Tilemap Rpg 2

 


메인 화면, 캐릭터 스탯창, 인벤토리 이렇게 세개가 필수 구현 요소이다.

하지만 큰 화면에 그렇게 따로 두는 방법이 맘에 들지 않아

일반 RPG 게임처럼 설계 해보기로 하였다. 





맵에 드롭 아이템을 떨군 후 충돌 체크로 해당 오브젝트의 정보를
가져오는 방식으로 인벤토리에 저장하는 방식을 구현하였다.




먹은 아이템은 인벤토리에 선언한 List에 저장되며
최대 스택개수와 동일한 아이템이 있는지 체크하여
잘 작동되게 하였다.


이렇게 동일한 아이템에 개수가 추가된다.



인벤토리 각 슬롯마다 Box Collider와 번호를 추가하여
클릭하였을 때 Ray충돌을 활용하여 어떤 슬롯이 눌렸는지
확인 할 수 있다. (버튼 쓰기 싫어서 이렇게 하였음)
+Box Collider 2D는 Ray충돌이 안돼는 문제가 있었음



우클릭 했을 경우 무기는 무기 슬롯에 장착하고 현재 인벤토리 리스트에서 

아이템을 하나 뺀다. 그리고 장착한 장비 아이템을 구별하기 위한 리스트를 

새로 만들어 그쪽에 하나 추가한다.




개수가 0이 된 아이템은 인벤 리스트에 아이템을 넣고 빼는 함수를 호출할 때 마다

전체 리스트를 탐색하여 스택개수가 0인 요소를 찾아서 리스트에서 빼버린다.




아이템 이미지는 임시로 쓴거라 일단 무기랑 방어구이다.

장비한 아이템의 능력치를 반영하여 스탯창도 최신화 시킬 수 있게 하였다.





아이템 코드와 분류 등 아이템에 대한 모든 정보는 ScriptableObject로 저장하여

아이템을 빠르게 불러오거나 전달할 수 있게 하였다.

(가끔 디버깅하다 보면 저장된 정보들이 날라가는 오류가 있음)




인벤토리, 캐릭터 스탯 등 각 플레이어에 대한 정보는 프리펩 한 아바타 안에 넣어서

싱글톤 했던 스크립트에서 갖고 있게 하였다. (다른 스크립트에서 접근할 수 있게)


댓글 없음:

댓글 쓰기

c++ thread.h

 c++에서 쓰레드 돌릴려면 thread.h 헤더를 쓰면 되는데 이 친구는 쓰레드가 아직 실행 중인지, 아니면 강제 종료하거나 하는 함수가 없어서 조금 아쉬운 애다. std::thread 는 로컬 변수로 선언하든 new 동적 할당을 하든 start 함...