본문 바로가기

Unity/Unity 스파르타

(38)
14주차 - 에디터 작업을 위한 사전작업 프로젝트를 실행하지 않고 맵에디터 오브젝트를 사용해 맵을 만들고 데이터를 저장 및 로드가 가능하게 만들기 맵을 생성하고, 맵을 만들거나 저장하는 모든 작업은 맵 에디터 오브젝트를 사용해 해결할 것 입니다. 맵을 편하게 로드하고, 세이브 할 수 있게 인스펙터에 버튼을 추가해 줬습니다. 인게임용 로드및 세이브는 맵이 제대로 실행되는지 프로젝트를 실행한 후에 맵을 불러오는 용도이고, 개발자 전용 로드및 세이브는 프로젝트를 실행하지 않고 맵을 제작하고, 제작한맵을 데이터화 해서 세이브하거나, 세이브한 파일을 불러와 그대로 인스펙터에 맵을 제작해주는 용도 입니다. 현재는 인스펙터에 버튼을 추가해줬지만 이것을 토대로 EditorWindow를 통해 새로운 에디터를 만들 계획입니다.........
14주차 - Grid Placement System 기존에 맵의 크기만큼의 배열을 생성해 마우스 포지션을 배열좌표로 변환해 배열에 오브젝트를 넣고 제거하는 식으로 구현했지만 앞으로 만들 에디터와 적합하지 않다 생각해 로직을 수정했습니다 타일맵의 그리드를 사용해 더 효율적으로 구현할 수 있었습니다. public Vector3 GetMousePosition() { Vector3 mousePot = Util.GetMouseWorldPosition(Input.mousePosition, _camera); Collider2D collider = Physics2D.OverlapPoint(mousePot); if(collider != null) { Vector3Int cellPot = floorTileMap.WorldToCell(mousePot); gridPositio..
14주차 - 리펙토링 데이터 테이블 생성으로 대폭 로직수정 및 불필요한 코드 삭제 정리 맵을 구성히는 요소들을 모두 Json으로 데이터화 시켜 파일로 저장. 3개의 리스트로 나눠서 저장 타일 데이터 오브젝트 데이터 상호작용 오브젝트 데이터 연결된 버튼을 모두 활성화 해야지 열리는 문 특수한 오브젝트들은 구조체를 만들어 데이터를 따로 저장해놓음 상호작용 문안에 연결된 버튼의 위치정보를 저장, 맵 데이터를 저장할때는 문 오브젝트 아이디와 링크아이디, 연결된버튼의 위치정보리스트를 구조체로 데이터화 맵을 로드해 올때는 엑셀로 만들어논 맵 오브젝트 데이터 테이블에서 아이디를 사용해 리소스 경로를 가져와 생성.
13주차 - 맵 데이터화.. 맵 에디터 데이터 생성 및 불러오기 맵크기 영역 그리드 안에 오브젝트 추가 맵 데이터 세이브, 저장된 Json 파일로 맵 불러오기. (에디터를 통한 오브젝트 추가는 아직 미구현) 모든 오브젝트에는 BuildObj 클래스를 상속 받고, 해당 클래스 안에는 TileData 라는 구조체가 있는데 안에 기본적인 현재 오브젝트의 타입과, 오브젝트의 리소스 경로, 생성위치가 들어있습니다. [System.Serializable] public class BuildObj : MonoBehaviour { private TileType tileType; private Vector2 position; public string path; public TileData tileData; public void SetTileData(..
13주차 - 맵.. 맵 사이즈가 결정되면 아웃라인 그려주고 에디터 모드라면 격자판을 생성해주기. 맨처음 초기화로, MapObjBox 오브젝트를 만들어 여기다가 맵을 구성하는 오브젝트들을 모아주자. MapObjBox안에 바닥을 구성하는 FloorTransform, 오브젝트들을 구성하는 ObjectTransform, 그려진 아웃라인을 모아놓은 OutLineTransform, 격자판 GridPlateTransform 맵 크기가 재설정 될때마다 아웃라인과 격자판 재 생성. 1. 에디터 모드와 비에디터 모드 구분 2. 에디터 모드일때 - 맵 크기 결정시 자동 아웃라인 생성과 격자판 생성. - 맵 크기 재 조정시 맵밖에있는 오브젝트 자동 제거 데이터 매니저에 맵 데이터 이관 매니저- 데이터매니저 - 맵데이터 [맵아이디] 맵 기믹. 제..
13주차 - 맵 데이터 세이브, 및 로드 1. 맵 데이터를 리소스폴더에 Json 파일로 저장하기 2. 저장한 데이터 불러오기 3. 맵 에디터에서 새로 만든 맵인지, 불러온 맵인지에 따라 저장 로직을 다르게 만들기 1. 맵 데이터를 리소스폴더에 Json 파일로 저장하기 파일 저장할 경로 구하기 Application.dataPath 를 사용해 현재 실행된 프로젝트의 Asset 폴더의 절대경로를 알 수 있습니다. folderPath = Path.Combine(Application.dataPath, "Resources/MapDat"); 맵에 데이터를 Json 파일로 변환해 저장합니다. void CreateJsonFile() { Map map = new Map(mapID, mapTileDataList, playerSpawnPosition, playerE..
12주 - 최종 프로젝트(2D) 이번 프로젝트 목표 맵 에디터 생성과 맵 정보를 데이터화 고민- 더보기 맵에는 여러가지 정보를 담고 있을텐데, 어떤식으로 접근하면 좋을까. 맵을 구성하기 위해 무엇이 필요할까 - 맵의 크기 - 맵을 구성하는 타일 - 맵에 배치 시킬 수 있는 장애물 및 오브젝트 어떤 것을 데이터화 시키면 좋을까? 맵을 구성하고있는 타일 및 오브젝트들을 타입과 아이디를 통해 저장해놓고 스크립터블 오브젝트를 사용해 타입과 아이디로 접근해 특정위치에 생성시키는건 어떨까. 구조체로 타입과, 타일 또는 오브젝트의 아이디, 생성위치를 만들어서 데이터화 해서 사용하면 어떨까
11주차 - 패시브 스킬 트리 구현 플레이어의 스테이터스를 증가시켜주는 패시브 스킬 트리를 만들어보자. 1. 현재 찍은 스킬들을 모아놓은 딕셔너리 생성 - PlayerStats - 현재 가지고 있는 스킬들을 확인 2. UpgradeStats_Base 클래스 생성 - 여러가지 스테이터스를 증가 시킬 수 있으니 증가시킬 스테이터스와 증가량, 고정값으로 올릴지 퍼센테이지로 올릴지 정하는 타입을 가진 구조체를 리스트로 만들기. public List upgradeStatusList = new List(); - 최대 몇까지 스킬을 찍을 수있는지 선택 - 해당 스킬을 찍기위한 조건을 확인하기위한 구조체 생성 - 조건을 만족해 스킬을 찍었을 때 실행할, 스킬과 스킬을 연결하는 라인 생성 public List lineList = new List(); - ..