전체 글
-
15주차 - 커맨드 패턴 활용(클래스 다이어그램)Unity/Unity 스파르타 2024. 3. 29. 19:55
1. 인게임용 맵 커스텀 에디터에 사용할 커맨드 패턴 클래스 다이어그램을 작성해보자.. 클래스 다이어그램을 위한 커맨드 패턴 정리 특정 액션을 요구할 Client가 있고, Command 를 상속받은 ConcreateCommand는 이미 정의된 액션이 들어가있는 Reciver를 가지고 인터페이스를 재정의, Invoker에는 커맨더를 재정의한 콘크리트 담고 커맨더를 호출해주기 현재 만들어진 맵 에디터에 커맨드 패턴을 어떻게 녹여낼지... 가장 큰 고민인거 같다.. 타일부분에서 요구하는 부분과 오브젝트에서 요구하는 부분이 달라 클라이언트를 두개로 나눠서 진행해보자.. 일단 타일부분부터 해결하기 1. 타일에 관련된 요청을 할 TileModeClinet가 있고, TileModeClient 가 요청한 액션은 타일 ..
-
15주차 - 커맨드 패턴,Unity/Unity 스파르타 2024. 3. 28. 20:54
커맨드 패턴에 대해 알아보기. 커맨드 패턴은 요청을 객체로 캡슐화하여 요청과 수신자 사이의 결합을 느슨하게 만드는 디자인 패턴 사전 용어 정리 하기 Command 패턴을 보기 전에 몇가지 용어를 정리하고 가보자. Client — 커맨드 객체를 생성, 인보커 객체를 통해 리시버 객체 에게 할 행동을 전달함 Invoker — 커맨드를 저장함 리시버 객체 에게 행동을 전달하는 객체 (ex 버튼 이나 단축키의 역할) Command — 리시버 객체의 정보 + 행동이 들어 있는 객체 Receiver — 행동을 하는 객체 setCommand() — 인보커 객체에 정의 되어 있는 메서드, 클라이언트가 실행한다. 이 메서드가 호출되면, 커맨드 객체가 같이 호출 된다. execute() — 해당 호출로 커멘드 객체에 있..
-
15주차 - 화염 방사기 기믹 만들기Unity/Unity 스파르타 2024. 3. 27. 20:47
1. 화염 방사기 파티클 만들기 2. 후일 방패로 화염을 막을 수 있게 만들 것이기 때문에 기물 앞까지만 파티클을 생성되게 만들어야 하고 , 기물 뒤에있는 오브젝트에는 타격이 가지않게 레이 조절 하기 1. 화염 방사기 파티클 만들기 불을 내뿜는 것 처럼 보여주기 위해 Shape은 Edge로 일자로 파티클을 생성되게 만들어주기 파티클의 생명주기와, 속도들을 조절해주기. Color over Lifetime 으로 시간에 따라 색을 변경해줌으로 좀더 불을 내뿜는 것처럼 보여주기. Size over Lifetime으로 파티클을 작아졌다가 점점 커지게 가장 중요한 Noise로 불이 뿜어져 나오는 것처럼 만들어주기 나중에 쉐이더 작업으로 더 다듬어 주기. 2. 파티클 생명 조절과 레이 조절 화염이 뿜는 방향에 플레이..
-
15주차 - Selection.activeGameObject, EditorApplication.ExecuteMenuItem()Unity/Unity 스파르타 2024. 3. 26. 20:37
Selection.activeGameObject -현재 선택된 게임 오브젝트를 가져오거나 설정하는 속성 Selection.activeGameObject는 GameObject 형식의 속성입니다. Selection.activeGameObject 는 null일 수 있습니다. 선택된 게임 오브젝트가 없으면 null입니다. Selection.activeGameObject를 설정하면 이전에 선택된 게임 오브젝트는 선택 해제됩니다. Hierarchy에 오브젝트를 생성하면 바로 선택되게 만들 수 있습니다. Selection.activeGameObject = Instantiate(objLists[i], curMapEditor.dontSaveObjectTransform); EditorApplication.ExecuteMe..
-
15주차 - GUI 공부(GUIUtility.GetControlID(),Event,HandleUtility.Repaint())Unity/Unity 스파르타 2024. 3. 25. 20:13
GUIUtility.GetControlID() 모든 GUI 에는 컨트롤 ID라는것이 배정됩니다. ID에 의해 각각의 GUI는 독립된 것 ID를 적절하게 배정하지 않으면 의도하지 않는 GUI의 다수 조작(경쟁)을 하게 됩니다. int id = GUIUtility.GetControlID(FocusType.Passive, rect); 이 경우는 키보드 이외의 포커스를 받아 특정 범위(rect)내의 컨트롤 ID를 생성/취득하고 있습니다. Event Event클래스는 모든 이벤트를 관리하기 위한 기능입니다. GUI에 대한 이벤트는 다양한 종류가 있고 예를 들면 버튼을 마우스로 클릭할 때 - 버튼 위에 마우스가 있을 때 - 클릭되었을때 - 버튼을 누른 채로 있을때 이벤트가 발생합니다. if (GUI.Butto..
-
14주차 - 에디터 작업, 오브젝트 컨텐츠 추가 하기Unity/Unity 스파르타 2024. 3. 22. 21:08
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주차 - 에디터 작업을 위한 사전작업Unity/Unity 스파르타 2024. 3. 21. 19:16
프로젝트를 실행하지 않고 맵에디터 오브젝트를 사용해 맵을 만들고 데이터를 저장 및 로드가 가능하게 만들기 맵을 생성하고, 맵을 만들거나 저장하는 모든 작업은 맵 에디터 오브젝트를 사용해 해결할 것 입니다. 맵을 편하게 로드하고, 세이브 할 수 있게 인스펙터에 버튼을 추가해 줬습니다. 인게임용 로드및 세이브는 맵이 제대로 실행되는지 프로젝트를 실행한 후에 맵을 불러오는 용도이고, 개발자 전용 로드및 세이브는 프로젝트를 실행하지 않고 맵을 제작하고, 제작한맵을 데이터화 해서 세이브하거나, 세이브한 파일을 불러와 그대로 인스펙터에 맵을 제작해주는 용도 입니다. 현재는 인스펙터에 버튼을 추가해줬지만 이것을 토대로 EditorWindow를 통해 새로운 에디터를 만들 계획입니다.........
-
14주차 - Grid Placement SystemUnity/Unity 스파르타 2024. 3. 19. 22:58
기존에 맵의 크기만큼의 배열을 생성해 마우스 포지션을 배열좌표로 변환해 배열에 오브젝트를 넣고 제거하는 식으로 구현했지만 앞으로 만들 에디터와 적합하지 않다 생각해 로직을 수정했습니다 타일맵의 그리드를 사용해 더 효율적으로 구현할 수 있었습니다. public Vector3 GetMousePosition() { Vector3 mousePot = Util.GetMouseWorldPosition(Input.mousePosition, _camera); Collider2D collider = Physics2D.OverlapPoint(mousePot); if(collider != null) { Vector3Int cellPot = floorTileMap.WorldToCell(mousePot); gridPositio..