[StarChaser] 로그라이크 게임 프로젝트 7

[유니티/C#] Action을 이용한 로비 시스템 만들기(feat. 건파이어리본)

건파이어 리본과 비슷한 로비 시스템을 만들게 되었다. 버튼 스크립트 설명 더보기 버튼은 재사용성을 위하여 Base 클래스를 abstract로 작성했다. 마우스 커서에 대한 동작을 처리하기 위해 인터페이스를 상속받았다. 1. 올렸을 때(IPointerEnterHandler) 2. 내렸을 때(IPointerExitHandler) 3. 눌렀을 때(IPointerDownHandler) - 구현은 자식 클래스에서 하도록 abstract 함수로 만들었다. - 커서에 대한 반응을 크기를 변경하는 방식으로 하고싶어서 DoScale~() 함수를 만들었다. 이 함수는 공통으로 사용될 것이며, 사용은 상속받은 클래스에서 자유롭게 할 수 있다. - 버튼에 사용할것이기 때문에 onClickEvent 함수를 마찬가지로 abstr..

[유니티/C#] 퀘스트 시스템 만들기

이번에 만든것은 퀘스트 시스템이다. 이전에 구조를 잡아놓았던 DataClasses를 활용해 만들었다. 이전글 https://jinsso.tistory.com/10 [유니티/C#] 데이터를 관리하는 클래스 만들기 이전에 데이터를 csv에서 읽어와 저장하는 코드를 작성했었다. 하지만 기능 구현에 중점을 두고 코드를 짜다보니 보기에도, 사용하기에도 별로고 유지보수에도 별로 좋지 못했다. 이번에는 csv로 jinsso.tistory.com 이전의 스킬 시스템 구축 요청을 받았을 때의 경험이 있어서 이번에는 비교적 쉽게 만들 수 있었다. 정리를 하면 1) 1단계 퀘스트 3개를 랜덤으로 가져온다 2) 가져올 때 이전에 가져온 항목과 QuestID가 동일하면 다시 뽑는다 3) 3개가 확정이 되었다면 UI에 적용한다 ..

[유니티/C#] 데이터를 관리하는 클래스 만들기

이전에 데이터를 csv에서 읽어와 저장하는 코드를 작성했었다. 하지만 기능 구현에 중점을 두고 코드를 짜다보니 보기에도, 사용하기에도 별로고 유지보수에도 별로 좋지 못했다. 이번에는 csv로 불러온 데이터들을 관리하는 클래스를 만들었다. 이전에 만들어 둔 코드들을 해당 클래스로 옮김으로써 재사용성과 유지보수성을 높이고자 했다. 우선 데이터를 총괄하는 "DataClasses" 클래스를 만든다. public class DataClasses { // 데이터를 저장할 클래스들의 리스트 생성 public List PassiveSkillData = new List(); public List Quest_NormalData = new List(); // 데이터에 이미지 경로가 지정되어 있다면, 경로상의 이미지를 불러와..

[유니티/C#] 클래스에서 원하는 조건의 랜덤 항목 뽑아오기

팀의 기획자가 "랜덤으로 스킬을 3가지 뽑아달라" 고 요청했다. 이런 흐름으로, 원하는 조건에 맞는 스킬을 뽑아올 수 있어야 했다. 이전에 작성한 글에서 csv파일을 읽어와 Skill 클래스에 저장했으니, 저장한 Skill들을 바탕으로 정보를 비교해 가져오기만 하면 된다. . . . . 하지만 생각보다 로직을 짜기 힘들어서 고생 깨나 했다. public List GetRandomSkills(Dictionary friendshipDic, List skillList, int count) { // 랜덤으로 선택된 스킬을 임시 저장할 리스트 List chosenSkills = new List(); // count 개수만큼 스킬을 선택할 때까지 반복 while (chosenSkills.Count < count) ..

[유니티/C#] DataTable의 모든 행 읽어오기

원래는 간단한 테이블만 사용해서, 코드도 간단하게 만들어서 사용하고 있었다. 그런데 게임 기획이 바뀌고 데이터를 저장해야할 일이 많아져서, 기존에 사용하던 코드로 작업을 진행했다가는 돌이킬 수 없을것 같은 예감이 들었다. 아래에는 개편된 코드를 대략적으로 적어보려고 한다. 우선, 스킬들을 관리하기 위한 클래스를 작성했다. public class Skill { public int Skill_ID { get; set; } public int GodID { get; set; } public string SkillName { get; set; } public int SkillLevel { get; set; } public int SkillGroupID { get; set; } public int PriorSki..

[유니티/C#] NavMeshAgent 와 NavMeshObstacle

플레이어를 발견하면 추적하고, 공격 범위에 들어오면 공격을 하는 몬스터를 만들고 있다. 한가지 문제점은 플레이어가 도망가면 근접 몬스터가 줄줄이 따라오면서 대열이 만들어지고, 맨 앞의 몬스터가 공격상태에 들어가서 공격을 할 때, 뒤에있는 몬스터들은 추적 상태라 공격중인 몬스터를 밀고 들어오게 된다. 그러면서 플레이어도 함께 밀리고 도저히 공격을 할 수 없는 골치아픈 상황이 생겼다. 그래서 "NavMeshObstacle" 이라는 컴포넌트를 부착해 해결했다. NavMeshObstacle NavMeshAgent가 탐색하는 동안 피해야 하는 장애물 [ex) 물리적인 힘을 통해 움직이는 장애물 등] 을 인식한다. 장애물이 움직이는 동안 NavMeshAgent는 장애물을 피하기 위해 최선을 다한다. 장애물이 정지하..

[유니티/C#] DataTable로 엑셀 csv파일 읽어오기

DataTable을 사용해서 csv파일을 읽어와 게임 내 데이터를 관리하려고 했다. 하지만 전체 테이블과 행을 읽어오는것은 되는데 string으로 열을 불러와도 "" 이런식으로 빈 값만 반환되었다. DataManager 스크립트 // 리소스화 시킬 데이터테이블의 종류 열거형 public enum ECSVDatas { PlayerTable = 0, MonsterTable, End } public class DataManager { // 불러올 데이터테이블 딕셔너리 public Dictionary tableDic { get; private set; } = new Dictionary(); // 생성자 호출 시 자동으로 csv를 불러와 딕셔너리에 저장 public DataManager() { TableInit(..