코드 및 공부/데이터 관리 7

마우스 커서 스프라이트가 깨져서 나올때 해결법

유니티 버전 - 2022.3.17f1     커서 스프라이트가 깨져서 나올때커서로 사용하기위해 스프라이트의 텍스쳐를 가져와서 설정해주었을때, 게임 뷰에서 아래처럼 커서 이미지가 깨져서 나오는 현상이 발생 (현재 스프라이트는 .PNG)   1. Texture Type을 Cursor로 변경   2. Read/Write 체크 및 Format을 RGBA 32 bit으로 변경   3. Cursor.SetCursor를 이용하여 커서 변경Cursor.SetCursor(Texture2D texture, Vector2 hotspot, CursorMode cursorMod)Cursor.SetCursor(A, B, C)A : 커서에 사용될 텍스쳐B : 커서의 기준점(클릭 지점)C : 커서 모드, 기본 Auto 선택     ..

인벤토리 슬롯 저장/로드시 간헐적으로 아이템이 사라지는 현상

유니티 버전 - 2022.3.17f1     목차문제상황InstanceID해결법마치며     문제상황데이터 저장 / 로드시 인벤토리의 아이템 일부가 삭제되어있거나 다른 아이템이 들어있는 상황   현재 저장시에 Slot[]의 형태로 저장되어지고있음   Slot의 구조입니다, ItemSo와 itemCount는 필수로 존재해야합니다   또 ItemSO에는 ItemCode가 필수로 존재해야합니다      InstanceIDJson파일을 열어보았을때 저장된 Slot[i] 번째에 instanceID가 저장되어있습니다{ "itemSo": { "instanceID": 123456 }, "itemCount": 5}// 위와 비슷하게 나옴   여기서 문제가 발생합니다, instanceID는 유니티의 특정 상태(런타임 ..

유니티 조합 시스템 - 슬롯 이용

유니티 버전 - 2022.3.17f1     목차전재 조건과 목표코드 및 설명     전재 조건해당 기능을 이용하여 슬롯에 퍼져있는 아이템들을 정렬하고, 필요한 개수만큼 슬롯 아이템의 개수를 감소시킨뒤 결과물을 반환하도록 할 수 있습니다   1. CraftRecipeSO / NeedItems / ItemSo의 구조는 다음과 같습니다     2. 슬롯의 구성은 다음과 같습니다   3. 인벤토리의 구성은 다음과 같습니다public Slot[] inventorySlots = new Slot[30];     코드 및 설명먼저 코드의 구조를 살펴보겠습니다   외부에서 아이템을 조합해달라고 요청이 들어오면 현재 인벤토리의 모든 아이템을 정리하여 충분한 아이템이 있는지 확인하고 있다면 결과 아이템을 지급하는 형태입니..

OnDrop이 실행되었을때 OnEndDrag가 실행되지 못하도록 하기

유니티 버전 - 2022.3.17f1     목차코드 의도문제 상황시도해본 방법들해결 과정결과마치며     코드 의도드래그가 종료되었을때 성공적으로 수행된다면 OnDrop을 이용하여 성공 사운드 출력 및 아이템 교환을 하고, 실패한다면 OnEndDrag를 이용하여 실패 사운드 출력 및 DragSlot을 초기화시켜 주고 싶은 상황입니다 /// /// 드래그가 UISlot이 아닌 곳에서 끝났을때 아무 작업도 수행하지 않기위해 DragSlot을 초기화시켜줌 /// public void OnEndDrag(PointerEventData eventData) { if (DragSlot.Instance.draggedSlot != null) { ..

OnValidate()을 이용한 SO 데이터 관리

유니티 버전 - 2022.3.17f1     목차OnValidate()ValidateCheckItemCode결과     OnValidate()유니티에서 제공하는 이벤트 함수이고, 인스펙터 창에서 스크립트 컴포넌트의 속성을 변경할 때 호출됩니다관리하는 ScriptableObjectAssets이 많아질수록(이하 SO), 값을 빼먹거나 관리되지 못하는 SO 내의 데이터가 발생할 수 도 있습니다, 에디터 환경에서 OnValidate()를 이용하여 관리해보도록 하겠습니다   데이터의 일부만 가져왔습니다, 대표격으로 itemCode가 제대로 입력되어있는지 확인하기 위하여 아래와 같이 코드를 작성합니다public int itemCode;#if UNITY_EDITOR private void OnValidate()..

Application.dataPath와 Application.persistentDataPath

유니티 버전 - 2022.3.48f1     목차Application.dataPath 와 Application.persistentDataPathPath.Combine()와 문자열 연산+      들어가며파일 경로나 디렉터리를 다룰 때, Application.dataPath와 +를 이용하여 경로를 연결하는 방법은 흔하게 사용됩니다Application.persistentDataPath와 Path.Combine과 비교하여 장단점과 메모리 사용량, 성능 차이를 다뤄보겠습니다     Application.dataPath 와 Application.persistentDataPath위의 둘은 다른 방식이지만 게임 데이터 파일에 접근하기 위한 경로를 반환합니다, 하지만 둘의 목적이 다르고 Application.dataP..

데이터 관리 - JSON을 이용한 데이터 관리

유니티 버전 - 2022.3.44f1     목차JSON이란?JsonUtility와 System.IODataManager의 코드 및 설명전체 코드설명JsonUtility의 장점과 단점, 코드 개선점장점단점개선점코드 개선하기개선점완성된 코드 및 설명완성코드설명실행결과마치며간단 정리     JSON이란?JsonUtility는 유니티의 데이터 구조를 Json 형식으로 변환하거나 Json 형식의 데이터를 유니티 데이터 구조로 변환하는 데 사용됩니다 System.IO는 파일 읽기/쓰기, 디렉토리 관리, 파일 경로 조작 등의 작업을 수행 할 수 있게 해줍니다     DataManager의 코드 및 설명초기 형태의 DataManager 코드입니다, 하나씩 나누어서 설명 하겠습니다   1. using 지시문using ..