본문 바로가기

Unity/Unity 스파르타

(38)
16주차 - 오브젝트 프리뷰 텍스쳐로 저장해버리기 1. 인게임 커스텀 에디터에 사용되는 설치 가능한 오브젝트를 UI에 보여줄때 리소스 파일에있는 오브젝트의 AssetPreview를 사용해 텍스쳐로 가져와 스프라이트로 전환해 UI에 넣어줬는데, 빌드 후에는 AssetPreview를 사용할 수 없어서 UI에 제대로 이미지가 적용되지 않는 문제가 있었습니다. 오브젝트들의 Sprite 가 파츠처럼 나눠져있어 오브젝트들을 아이콘으로 사용하기위해 따로 아이콘을 만들어야 하나? 너무 번거로움에 다른 방법이 없을까 하고 고민하다가, AssetPreview로 Texture2D 로 가져온걸 그냥 리소스 폴더에 저장하면 안되나? 하는 생각에 여러 시도를 해본결과 AssetPreview로 가져온 텍스쳐를 .EncodeToPNG() 함수를 사용해 텍스쳐를 png 파일로 변환해..
16주차 - 인게임용 커스텀 에디터(타일),버튼 색 스크립트로 통제(ColorBlock) 1. 커맨드 패턴으로 만든 그리기 도구 2.버튼 색 스크립트로 통제하기 1. 커맨드 패턴으로 만든 그리기 도구 이전에 만든 클래스 다이어그램을 바탕으로 기존에 만들어 놓은 맵 에디터에 적절하게 녹여보기. 커스텀 맵에 사용될 오브젝트들과 타일들의 배치를 맡고있는 placementSystem 에서 클라이언트를 관리하고, 이 클라이언트에게 명령을 내리면 실질적으로 명령을 수행하는 invoker가 명령을 스택에 쌓고 커맨드를 호출합니다. 커맨드 인터페이스에는 실행과 되돌리기를 정의해 놨기 때문에 Invoker에서 스택에 쌓아놓은 ICommand를 하나씩 꺼내 Undo() 함수를 실행 하게되면 손쉽게 이전에 한 작업물로 돌아갈 수 있습니다 public interface ICommand { void Execute(..
15주차 - 커맨드 패턴 활용(클래스 다이어그램) 1. 인게임용 맵 커스텀 에디터에 사용할 커맨드 패턴 클래스 다이어그램을 작성해보자.. 클래스 다이어그램을 위한 커맨드 패턴 정리 특정 액션을 요구할 Client가 있고, Command 를 상속받은 ConcreateCommand는 이미 정의된 액션이 들어가있는 Reciver를 가지고 인터페이스를 재정의, Invoker에는 커맨더를 재정의한 콘크리트 담고 커맨더를 호출해주기 현재 만들어진 맵 에디터에 커맨드 패턴을 어떻게 녹여낼지... 가장 큰 고민인거 같다.. 타일부분에서 요구하는 부분과 오브젝트에서 요구하는 부분이 달라 클라이언트를 두개로 나눠서 진행해보자.. 일단 타일부분부터 해결하기 1. 타일에 관련된 요청을 할 TileModeClinet가 있고, TileModeClient 가 요청한 액션은 타일 ..
15주차 - 커맨드 패턴, 커맨드 패턴에 대해 알아보기. 커맨드 패턴은 요청을 객체로 캡슐화하여 요청과 수신자 사이의 결합을 느슨하게 만드는 디자인 패턴 사전 용어 정리 하기 Command 패턴을 보기 전에 몇가지 용어를 정리하고 가보자. Client — 커맨드 객체를 생성, 인보커 객체를 통해 리시버 객체 에게 할 행동을 전달함 Invoker — 커맨드를 저장함 리시버 객체 에게 행동을 전달하는 객체 (ex 버튼 이나 단축키의 역할) Command — 리시버 객체의 정보 + 행동이 들어 있는 객체 Receiver — 행동을 하는 객체 setCommand() — 인보커 객체에 정의 되어 있는 메서드, 클라이언트가 실행한다. 이 메서드가 호출되면, 커맨드 객체가 같이 호출 된다. execute() — 해당 호출로 커멘드 객체에 있..
15주차 - 화염 방사기 기믹 만들기 1. 화염 방사기 파티클 만들기 2. 후일 방패로 화염을 막을 수 있게 만들 것이기 때문에 기물 앞까지만 파티클을 생성되게 만들어야 하고 , 기물 뒤에있는 오브젝트에는 타격이 가지않게 레이 조절 하기 1. 화염 방사기 파티클 만들기 불을 내뿜는 것 처럼 보여주기 위해 Shape은 Edge로 일자로 파티클을 생성되게 만들어주기 파티클의 생명주기와, 속도들을 조절해주기. Color over Lifetime 으로 시간에 따라 색을 변경해줌으로 좀더 불을 내뿜는 것처럼 보여주기. Size over Lifetime으로 파티클을 작아졌다가 점점 커지게 가장 중요한 Noise로 불이 뿜어져 나오는 것처럼 만들어주기 나중에 쉐이더 작업으로 더 다듬어 주기. 2. 파티클 생명 조절과 레이 조절 화염이 뿜는 방향에 플레이..
15주차 - Selection.activeGameObject, EditorApplication.ExecuteMenuItem() 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()) 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..