유니티 19

[유니티/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(..

[유니티/C#] 터치로 화면이동

참고한 블로그 https://blog.naver.com/dlehdgh1120/221706425033 public class CameraController : MonoBehaviour { //* 터치, 마우스 카메라 컨트롤러 *// Vector2 clickPoint; Vector3 touchStart; void Awake() { // 카메라 배율 초기화 Camera.main.orthographicSize = 10; } void Update() { if (Input.GetMouseButtonDown(0)) { // 마우스가 눌렸을 때 마우스 좌표 저장 // clickPoint = Input.mousePosition; touchStart = Camera.main.ScreenToWorldPoint(Input.m..

[유니티/C#] 터치/마우스로 카메라 이동

출처 - 참고한 블로그 https://bloodstrawberry.tistory.com/686 유니티 - 드래그로 카메라 이동(Drag and Move Camera) Unity 전체 링크 메인 카메라에 스크립트를 추가한다. 테스트하기 쉽게 왼쪽의 Alt가 입력된 경우에만 카메라가 움직이도록 하자. void Update() { if (Input.GetKeyDown(KeyCode.LeftAlt)) isAlt = true; if (In.. bloodstrawberry.tistory.com 전체 코드 public class CameraTest : MonoBehaviour { float dragSpd = 30.0f; Vector2 clickPoint; void Awake() { // 카메라 배율 초기화 Camer..

[유니티/C#] 모바일 푸시알림

https://assetstore.unity.com/packages/tools/integration/simple-android-notifications-free-68626?locale=ko-KR Simple Android Notifications Free | 기능 통합 | Unity Asset Store Use the Simple Android Notifications Free from Hippo on your next project. Find this integration tool & more on the Unity Asset Store. assetstore.unity.com 에셋 추가로 간단하고 빠르게 푸시알림 구현이 가능하다. 사용 시에는 using Assets.SimpleAndroidNotific..