일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 크래프톤정글
- 유니티
- C
- kraftonjungle
- 다익스트라
- pintos
- anonymous page
- 크래프톤정글4기
- 알고리즘
- Unity
- 크래프톤 정글
- 핀토스
- 연결리스트
- 백준
- project3
- 4기
- 전쟁-전투
- 알고리즘수업-너비우선탐색2
- TiL
- c#
- KRAFTON JUNGLE
- 크래프톤 정글 4기
- 네트워크
- BFS
- 파이썬
- 추상클래스와인터페이스
- 오블완
- User Stack
- 티스토리챌린지
- 이벤트 함수 실행 순서
- Today
- Total
목록전체 글 (174)
말감로그

그래도 농장인데 플레이어와 나무만 있으면 심심할 것 같아 소를 하나 만들어서 울타리 안에서 자유자재로 이동시키는 작업을 하였다. 우선 소의 idle, walk 애니메이션을 만든 후, 스크립트를 생성하여 소의 랜덤 이동 방식을 구현하였다.using System.Collections;using System.Collections.Generic;using Unity.VisualScripting;using UnityEditor.Callbacks;using UnityEngine;using UnityEngine.UIElements;public class Cow : MonoBehaviour{ public float walkSpeed = 1.2f; public float walkTime = 3f; pub..

Animated Tile은 특정한 애니메이션을 반복적으로 재생하는 타일이다.정적인 요소보다, 동적인 animation이 들어간 타일이 더 시각적으로 효과적이기 때문에, water animatedTile을 만들어봤다. 우선 Animated Tile을 사용하기 위해서는 Package Manager > Unity Registry > 2D Tilemap Extras를 import 해야한다. project 창 > Create > 2D > Tiles > Animated Tile 로 새로운 animated Tile을 생성해준다.그리고 이처럼 sprite를 추가해준다. 추가한 tile을 tile palette에 추가하여 사용해주면 된다.

저장하고 이어하기 버튼을 누르면 저렇게 타일이 이상하게 설정되고, 해당 에러가 발생했다. 이 에러는 배열의 인덱스를 벗어난 값에 접근하려고 할 때 발생하는 오류이다.이 오류가 발생한 코드 부분은 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 과일 생성 이후 나무를 치면 나무도 쓰러지면서 나무조각 생성 레이캐스트..