일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 크래프톤정글
- 알고리즘
- BFS
- 핀토스
- 네트워크
- 4기
- 유니티
- 티스토리챌린지
- Unity
- project3
- 추상클래스와인터페이스
- anonymous page
- TiL
- 전쟁-전투
- User Stack
- 크래프톤정글4기
- 크래프톤 정글
- kraftonjungle
- 알고리즘수업-너비우선탐색2
- 이벤트 함수 실행 순서
- 백준
- 오블완
- KRAFTON JUNGLE
- 다익스트라
- c#
- C
- pintos
- 파이썬
- 크래프톤 정글 4기
- 연결리스트
- Today
- Total
목록전체 글 (154)
말감로그
저장하고 이어하기 버튼을 누르면 저렇게 타일이 이상하게 설정되고, 해당 에러가 발생했다. 이 에러는 배열의 인덱스를 벗어난 값에 접근하려고 할 때 발생하는 오류이다.이 오류가 발생한 코드 부분은 SetTilePlantSaveData에서 SetTile을 해주는 부분이었다.GameManager.instance.tileManager.seedMap.SetTile(position, plantData.growthStagesTiles[currentGrowthStage - 1]); currentGrowthStage 값이 plantData.growthStagesTiles 배열의 범위를 벗어나면서 오류가 발생했다. currentGrowthStage가 0이거나 growthStagesTiles 배열의 길이보다 크면 해당 인..
어제 인벤토리 저장/로드를 구현했기 때문에 비슷한 방식으로 식물 데이터도 저장/로드하면 되겠다고 생각했다. 인벤토리의 경우에는 Inventory 클래스 내부에 정의된 Slot 중첩 클래스에 데이터들이 ItemData에 담긴 데이터와 똑같기 때문에 저장된 데이터를 인벤토리에 추가해주기만 하면 됐었다. 그러나 식물의 경우, PlantData엔 식물의 이름, 프리팹, 성장 단계에 맞는 타일 배열, 성장 시간 배열 등 정말 그 식물 자체의 데이터들만 담겨있다. 그래서 씨를 뿌린 식물의 위치, 성장 단계, 성장 시간, 타일의 상태 등 개별 인스턴스 정보를 저장하기 위해서 PlantSaveData라는 클래스를 따로 만들어 식물 데이터(PlantData) 뿐만 아니라 내가 씨를 뿌린 그 식물에 현재 상태도 저장하도록..
타이틀 씬에서 새로하기, 이어하기 버튼을 클릭 했을 때 각 저장된 인벤토리 데이터에 맞게 로드하고 인 게임씬으로 전환되도록 할 것이다. 우선 새로하기 버튼은 말 그대로 저장된 인벤토리 데이터가 없거나, 있는데 새로하려고 할 때 인벤토리 데이터를 지우고, 인벤토리를 초기화한다.이어하기 버튼은 저장된 데이터가 있을 때, 그 데이터를 불러와 게임을 이어서 플레이할수 있도록 한다. HasSavedInventory() 함수를 통해 해당 경로에 각 인벤토리 텍스트 파일이 존재하는지 확인해서 저장된 인벤토리 여부를 리턴한다.//InventorySave.cspublic bool HasSavedInventory(){ string backpackPath = Application.persistentDataPath ..
드디어 몇일동안 감을 못잡고 헤매기만 했던 인벤토리 저장&로드 시스템을 구현했다.. 우선 저장과 로드를 생각했을 때 제일 먼저 든 생각이 PlayerPrefs를 사용하여 시스템을 구현하자였다.그래서 PlayerPrefs로 인벤토리를 저장하려고하니, 인벤토리와 툴바의 슬롯에는 각 슬롯의 정보(이름, 아이콘, 갯수, PlantData 등) 많은 정보가 담겨있고 각 인벤토리의 슬롯 리스트를 담는 것에는 무리가 있다고 생각했다.그리고 PlayerPrefs으로 구현이 가능하다고 한다 해도 다른 방식을 사용하고 싶다는 생각도 있었다. 두번째로 Json을 활용해서 데이터를 직렬화해서 저장한 후 역직렬화를 통해 데이터를 로드하고자하였다. 그래서 현재 인벤토리를 받아 인벤토리의 데이터를 JsonUtility.ToJson..
호기, 물뿌리개, 도끼 등 필수적인 아이템을 팔지 못하게하고, 과일, 나무, 식물, 씨앗 등을 팔 수 있도록 분리하기 위해 Item Data에 isSellable을 추가하여 각 아이템에 맞게 설정해주었다. 그리고 판매 창을 열었을 경우, 툴바에서도 해당 아이템은 팔지 못한다는 것을 표시하기 위해 아이콘의 색상을 좀 더 어둡게 표시하고, 판매 창에서도 해당 아이템의 정보가 뜨지 않도록 했다. 그러기 위해서 Slot_UI.cs의 슬롯의 아이템을 세팅해주는 함수(SetItem)에서 현재 itemBox가 열려있고, 판매 불가능한 상품일 경우의 조건문을 걸어 color 변화를 주었다.// Slot_UI.cspublic void SetItem(Inventory.Slot slot){ if (slot != nu..
기존의 Player 스크립트에서 Player에 Raycast를 달아 ItemBox를 인식했던 것을 ItemBox 에서 OnTriggerEnter와 OnTriggerExit로 인식하는 것으로 변경하였다.// ItemBox.csvoid OnTriggerEnter2D(Collider2D other){ if (other.gameObject.name == "Player" && Input.GetMouseButtonDown(0) && !isBoxOpen) { Debug.Log("아이템 박스 오픈"); isBoxOpen = true; anim.SetBool("isOpen", isBoxOpen); sellingPanel.SetActive(true); ..
과일 나무 드랍과일 나무를 도끼로 한 번 치면 과일이 떨어지도록 했다.과일이 스폰될 위치(FruitSpawn) 와 떨어질 위치(FallPos)를 만들었다. 각 0.5f의 거리를 유지하도록 총 3개의 fruit 프리팹을 생성하고, 코루틴을 사용하고 Lerp를 통해 떨어질 위치까지 부드럽게 이동시키게 했다. void DropFruit() { isFruitDrop = true; for (int i = 0; i (); if (interactable != null) interactable.canInteract = false; while (elapsedTime 과일 생성 이후 나무를 치면 나무도 쓰러지면서 나무조각 생성 레이캐스트..
플레이어가 도끼를 들고 나무를 3번 치면 나무가 쓰러지면서 나무조각이 생성되게 할 것이다.나무 인식을 땅을 파는 작업을 했던 것처럼 타일맵으로 인식할까, GameObject로 나무를 생성해서 인식할까 하다가아무래도 애니메이션 작업도 유용한 GameObject로 프리팹을 만들기로 했다. 우선 Raycast를 이용해서 Tree GameObject를 인식하게 했다. 그리고 쓰러지는 애니메이션을 주기 위해 직접 애니메이션을 만들었다.Tree의 Rotation값을 통해 쓰러지는 효과를 주었고,쓰러지면서 Tree의 BoxCollider에 의해 플레이어가 옆으로 밀려나는 현상이 있어서, BoxCollider또한 꺼주었다. 본격적으로 Player가 나무를 인식하고 도끼를 들고 마우스 클릭 시 hitCount를 증가시..
ItemData ScriptableObject를 만들어서 아이템을 확장한 것과 같이 PlantData ScriptableObject를 만들어 식물 또한 데이터 관리와 확정성을 개선해주었다. 마찬가지로 Inventory 클래스와 Item.cs에 PlantData를 추가해주고 초기화한다. public class Inventory{ [System.Serializable] public class Slot { public string itemName; public Sprite icon; public int count; public int maxAllowed; public PlantData plantData; public S..