[Unity,Editor] SOManagementWindow 제작 일기 Part.4
·
Editor
만든 거 이게 계속 보다보니까 짜치는 점을 발견했다.이게 생성하는 Window인데 너무 단출하고 생성 위치도 직접 못 정해준다. 그래서짜잔, 파일을 선택에서 원하는 위치에 생성할 수 있게 만들었다. 그리고 파일을 선택한다면 그 파일의 이름, 크기, 가지고 있는 파일이 오른쪽에 화면에 뜨게 된다. 구현부Uxml먼저 Uxml과 USS를 만들어야 한다.이건 Uxml이다. 이런 식으로 꾸며주고 SplitView의 Dragline을 없애기 위해서 두개의 USSClass Extract를 해준뒤 Display 탭에 Display를 꺼준다. DragLine이 보이지 않게 된다. 그리고 원래 이렇게 밋밋하게 생긴 Foldout을이렇게 바꿔주었다. 이렇게 바꾸기 위해서.unity-foldout__checkmark, Fol..
[Unity, Editor] SOManagementWindow 제작 일기 Part.3
·
Editor
저번에 만들었던 기능에서 SO에 직접 넣어서 Type을 찾는 것이 불편해서 Assembly를 활용하여 Load하는 방식을 채택하였다.Assembly는 내부적으로 Dictionary로 구현되어 있어 Load가 굉장히 빠른 편이다. 때문에 Assembly를 선택하였다.그리고 이렇게 하면 ScriptableObject를 상속받는 Script가 생길 때마다. 자동으로 업로드를 해준다. 변경된 코드는 거의 없고 추가된 Script가 있다. AssemblyLoadSystem전체 코드using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Reflection;using UnityEditor;u..
[Unity, Editor] SOManagementWindow 제작 일기 Part.2
·
Editor
지난번에 발생했던 문제들을 해결하는 방법입니다.저는 이 문제를 해결하기 위해서 VisualElement로 Tab을 구현하고 ScrollView 안쪽에 넣어서 관리 했습니다. 때문에 다음과 같은 함수들이 새로 추가 되었습니다. TabVisualMake/// /// Tab의 Visual를 만드어주는 함수/// /// /// private VisualElement TabVisualMake(string name){ VisualElement tabVisual = new VisualElement(); tabVisual.AddToClassList(_tabClassName); tabVisual.name = name; tabVisual.tooltip = GUID.Generate().ToString..
[Unity, Editor] SOManagementWindow 제작 일기 Part.1
·
Editor
SO를 가져와서 정리해주는 EditorWindow를 만들어 봤습니다. 기능 소개그림을 보기 전에 글로 간단하게 소개하자면 TypeTable에 중복 되는 SO가 아닌 것을 하나씩 넣어주고 Path를 지정해준 뒤 Window를 열면 하나씩 넣어준 SO들이 전부 가져와서 정리되어 있는 것을 볼 수 있다. 그리고 그 가져온 SO들을 지워주거나 이름을 바꾸거나 값들을 수정할 수 있고 지정해준 Path로 생성을 할 수 도 있다.구현부구현 같은 경우에는 중요한 함수들을 하나씩 설명해드리겠습니다. SOTypeTable먼저 Scriptable Object 들의 Type들을 담아 주는 Table SO를 구현하였습니다.왜냐하면 Type들을 컨테이너로 담아 관리 하는 것이 편하다고 판단했기 때문입니다.using System;..
[Unity, Editor]두개의 EditorWindw 창을 Split, Dock하기
·
Unity
오늘 신기한 시도를 해봤다, 이 InspectorWindow를이런 식으로 side by side 형태으로 만들고 싶었다. 일단 타입을 가지고 오는 것은 성공했고 생각보다 쉽다. public static System.Type inspectorType = System.Type.GetType("UnityEditor.InspectorWindow,UnityEditor.dll");리플렉션을 사용해서 dll 파일에서 Type을 뜯어올 수 있다. 결론을 말하겠다 실패했다.Docking은 가능하지만 위 창 처럼 분리를 하는 것은 불가능하다(임의로 Position을 옮겨서 따라하는 것은 가능함) 내부적으로 Split하는 부분이 어딨는지 모르겠고 그에 관한 문서도 존재하지 않는다.Docking두개의 Window를 Docki..
[졸업작품, Unity] 아이작 방 생성 알고리즘 구현
·
Unity
https://www.boristhebrave.com/2020/09/12/dungeon-generation-in-binding-of-isaac/ Dungeon Generation in Binding of IsaacThe Binding of Isaac, and its remake, Binding Of Isaac: Rebirth are one of my favourite games of all time. It’s a roguelite twin stick shooter, much like Enter the Gungeon. The dungeons it ge…www.boristhebrave.com먼저 이 문서을 참고하여 제작하였음을 알립니다.  알고리즘 소개아이작의 방 생성 알고리즘을 간단하게 설명하자면 다음과 ..
[Unity]UniTask란?
·
Unity
https://github.com/Cysharp/UniTask GitHub - Cysharp/UniTask: Provides an efficient allocation free async/await integration for Unity.Provides an efficient allocation free async/await integration for Unity. - Cysharp/UniTaskgithub.comUniTask는 Async, Await를 활용한 라이브러리 중 하나이다. 비동기 작업 메서드, Task가 존재함에도 불구하고 유니테스크를 사용하는 이유는 유니테스크가 싱글 스레드를 사용하는 유니티 환경에서의 Task가 가지는 단점을 보완하여 강력한 비동기 작업을 구현할 수 있도록 제작한 라이브러..
[졸업 작품, Unity]Item EditorWindow로 관리하기
·
Editor
오늘은 전에 만들었던 Item들을 관리하고 생성해주는 EditorWindow를 만들어봤다. EditorWindow는 UIToolkit과 같이 사용할 수 있어서 같이 사용하였다. 어케함?먼저 cs와 uss uxml이다.using System;using System.Collections.Generic;using System.Linq;using LJS.Item;using UnityEditor;using UnityEditor.UIElements;using UnityEngine;using UnityEngine.Rendering.UI;using UnityEngine.UIElements;public class ItemCreater : EditorWindow{ [SerializeField] private V..
[Unity] 2D 환경에서 점프 구현 (y축 이동이 구현되어 있을 때)
·
Unity
오늘은 점프를 구현해봤다. 평범한 2D 사이드 뷰 환경에서 점프를 하는 것은 문제가 없지만 Y축이 구현 되어 있을 때에는 문제가 된다. 왜냐하면 점프도 Y축 이동인데 이동을 Y축으로 할 수 있으니 RigidBody를 사용하는 것의 중력을 활용하는 것은 불가능 하다(방법이 있긴함) 따라서 구현 방식을 좀 다르게 접근 할 필요가 있다. 로직 이런 식으로 실제 이동하는 플레이어는 그대로 바닥에 있는 대신 Visual 부분만(body Collider도 같이) 띄워서 점프 한 것 처럼 구현 하면 된다. 만약 카메라가 문제라면 카메라의 Follow위치를 Visual이나 Visual의 자식으로 해주면 된다. 구현 방법생각보다 간단하다. 원래는 코루틴을 써서 하려고 했는데 중간에 Easing 함수를 넣어야 할 것 같아..
[졸업작품, Unity] ItemSystem 구조 수정
·
Unity
지난번에 만들었던 ItemSystem의 UseItem 부분이 마음에 안들어서 구조를 수정해보았다. 로직 변경 사항 현의 로직은 이러하다.이게 전 로직전은 너무 더럽고 가독성이 없었는데 지금 좀 Interface로 분리해서 깔끔하게 만들었다.Interface를 분리 용도도 있지만 Assemly definition 때문에 교차 참조가 일어나기 때문에 사용한 것도 있다. 그래서 Utils 라는 admf를 만들어서 서로 참조하지 않도록 하였다. 코드 부분 변경 사항using LJS.Item.Effect;using Sirenix.OdinInspector;using System;using System.Collections.Generic;using LJS.Utils;using UnityEngine;namespace ..