목록유니티 (8)
Adaid's Workroom
18.01.05오늘 개발끗Tile 클래스IsometricTile을 추상 클래스로 하여 여러 클래스를 만들었다. IsometricTile: SetOrder 함수만 있는 추상 클래스GroundTile: IsometricTile 상속. SetOrder: Transform을 리스트로 인수로 받아 Z값 조정.ObjectTile: IsometricTile 상속. SetOrder: Renderer를 리스트로 인수로 받아 order 조정.DynamicObjectTile: ObjectTile 상속. Update 함수에서 SetOrder 호출 abstract public class IsometricTile : MonoBehaviour { abstract public void SetOrder(); } public class..
18.01.05개계된2선택된 그리드에 타일 생성+지우기선택된 그리드를 클릭/드래그하면 지형을 생성/제거하는 함수를 구현했다. 일단 임시로 지형 prefab을 mapManager에서 public으로 받게 하여 그 prefab을 클릭한 그리드에 생성하도록 했다. 해당 그리드에 이미 타일이 있을 경우에는 교체하도록 했다. 이때 다른 크기에서 생성된 그리드는 구별짓도록 하였다. void OnSceneGUI() { ... //마우스 입력 관련 if (actionType != ActionType.NONE) { UpdateHitPosition(); UpdateGridSelected(); Event current = Event.current; if (UpdateGridSelected()) { //해당 그리드 선택 표시..
18.01.05개발은 계속된다MouseOver된 타일 표시편집모드일때 마우스가 가리키는 타일을 빨간 선으로 표시하는 것을 구현하였다. 시작점의 좌표 계산이 조금 까다로웠는데 좌표의 규칙성을 찾아 계산하였다. 일단 다음과 같은 좌표계가 있다고 하자. 좌표는 (gX,gY) 꼴이다. 타일의 시작점을 가장 위의 점이라고 하자. 예를 들어 (2,1)의 시작점은 다음과 같다. 그러면 좌표와 타일의 시작점 사이의 규칙성이 보인다. 위와 같이 gX와 gY의 차가 같은 타일들의 시작점의 x좌표는 일치하고, gX와 gY의 합이 같은 타일들의 시작점의 y좌표는 일치한다. 다시말하면, 시작점의 x좌표는 gX와 gY의 차에 비례하고, 시작점의 y좌표는 gX와 gY의 합에 비례한다. 이를 기반으로 작성된 코드이다. private..
18.01.05편집모드를 전환할 수 있게 하였다. 편집모드가 아닐때는 씬뷰를 평소처럼 이용가능하도록편집모드 전환 버튼단순히 편집모드 상태를 전환할 수 있게 하는 버튼을 만들었다. 일단 편집모드X / 땅 편집 / 오브젝트 편집의 타입을 enum 형으로 만들었다. bool형으로 할까 하다가 나중에 다른 모드도 추가할 경우도 있을듯 하여 enum으로 결정. //에디터 액션 종류 private enum ActionType { NONE, GROUND_EDIT, OBJECT_EDIT } OnInspectorGUI에 버튼을 추가하는 스크립트를 작성하였다. public override void OnInspectorGUI() { base.OnInspectorGUI(); if(actionType == ActionType...
18.01.05맵 그리드와 스냅 그리드 분리하여 Draw맵 그리드와 스냅 그리드맵 그리드가 맵을 타일 단위로 보여준다면 스냅 그리드는 그와 별개로 수치를 입력받아 보여준다.타일 크기 128, (스냅) 그리드 크기 64이면 아래과 같이 보여지는 식.점선이 스냅 그리드이다. 수정 & 추가된 함수들. void OnSceneGUI() { SceneView.RepaintAll(); //그리드 상수 업데이트 mapGridWidth = mapManager.tileSize * gridConst * 0.5f; mapGridHeight = mapManager.tileSize * gridConst * 0.25f; snapGridWidth = mapManager.gridSize * gridConst * 0.5f; snapGr..
18.01.04그리드 선 출력 구현 후 진행그리드 타일 좌표 계산그리드로 그려진 타일을 클릭시 그 좌표를 계산하는 것을 구현하였다.Snap을 위한 준비 단계이다. 이것을 위해 선형대수학 강의 자료까지 뒤져보고 Sage (선형대수 계산기)까지 이용해 행렬계산을 했다....변환을 좀더 제대로 배워놨다면 그걸 이용했을것 같은데 기억기 가물가물해서 결국 행렬 곱셈 노가다로 대강 계산후 수치가 잘 안맞아서 노가다로 조정 후 결국 식을 완성했다.언젠가 선형대수학 복습도 필요할듯 흑 거기다 마우스 인식도 잘 안되서 이거했다 저거했다 결국 처음코드로 돌아왔다(...) 먼저 OnSceneGUI는 다음과 같이 바꾸었다. void OnSceneGUI() { SceneView.RepaintAll(); //그리드 상수 업데이트..
18.01.04본격적인 에디터 코딩에디터 구상틈틈히 에디터에 대해 구상해보았다.주요 4가지 사항을 정리해보면1. 타일 그리드를 볼 수 있으며 그 크기도 조절 가능하다.2. 그리드에 Snap하는 기능이 있으며 원한다면 이 기능을 끌수 있다.3. 원하는 타일을 선택하고 그리드 내부를 클릭하면 타일이 생성된다.4. 타일은 땅/오브젝트 두가지로 분류할 수 있다.Isometric 타일 Grid먼저 다이아몬드 형태의 Isometric 그리드를 에디터에서 보이도록 하는 것부터 시작하였다.선 하나 씬 뷰에 그리는 것도 생각보다 복잡하였다.선이 밖으로 튀어나갔다가 선 기울기가 이상해졌다가 등등 시행착오를 겪고 나서야 완성하였다.먼저 MapManager 에디터 스크립트의 OnSceneGUI 함수이다.(일단 mapManag..
18.01.01새해 첫날에 코딩이나 하고 있었다제작동기 Bridge 신규 프로젝트를 하던 중 유니티 내에서 맵 에디터를 지원하는 에셋을 사용해보며 유니티 커스텀 에디터의 편리성을 깨닫게 된다. 물론 그 에디터를 만드는 과정은 무척 험난하지만... 특히 2d isometric이라 알만툴 같은 탑뷰보다 난이도 있을 것이라 예상하였다. 3D면 걍 모델만 배치해놓고 카메라 세팅만 하면 될텐데 흑흑 그래도 에디터 코딩은 해본적 없는 만큼 도전해보기로 마음먹음 Isometric 구현 일단 Isometric을 구현하기 위해 구글링으로 조사를 열심히 해봤다. Unity 2017.3 버전인가에서 타일맵을 지원한다길래 혹시 했으나 "Isometric은 다음에 지원 예정~"을 보고 1차 좌절... 생각보다 정보가 없어서 굉..