본문 바로가기

전체 글

(79)
15주차 - GUI 공부(GUIUtility.GetControlID(),Event,HandleUtility.Repaint()) GUIUtility.GetControlID() 모든 GUI 에는 컨트롤 ID라는것이 배정됩니다. ID에 의해 각각의 GUI는 독립된 것 ID를 적절하게 배정하지 않으면 의도하지 않는 GUI의 다수 조작(경쟁)을 하게 됩니다. int id = GUIUtility.GetControlID(FocusType.Passive, rect); 이 경우는 키보드 이외의 포커스를 받아 특정 범위(rect)내의 컨트롤 ID를 생성/취득하고 있습니다. Event Event클래스는 모든 이벤트를 관리하기 위한 기능입니다. GUI에 대한 이벤트는 다양한 종류가 있고 예를 들면 버튼을 마우스로 클릭할 때 ​ - 버튼 위에 마우스가 있을 때 - 클릭되었을때 - 버튼을 누른 채로 있을때​ 이벤트가 발생합니다. if (GUI.Butto..
14주차 - 에디터 작업, 오브젝트 컨텐츠 추가 하기 1. 에디터 사이즈 설정 2. 구역 설정 3. 오브젝트 컨텐츠 생성하기 4. 마무리 OnGUI() 로 레이아웃 그려주기 1. 에디터 사이즈 설정 [MenuItem("Window/Create Map Tool")] - 프로젝트 Widow 메뉴에 에디터 메뉴를 추가할 수 있습니다 툴의 최소 사이즈와 최대 사이즈를 설정해주고 마지막에 Show()를 통해 창을 Unity 편집기 인터페이스에 표시해 줍니다. using System.Collections.Generic; using UnityEngine; using UnityEditor; public class CreateMap_Tool : EditorWindow { [MenuItem("Window/Create Map Tool")] public static void S..
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..