본문 바로가기
반응형

개발/Unity308

Unity)Unity Clean-Up Transition Scene (메모리 정리를 위한 명시적인 씬) Unity Clean-Up Transition Scene (메모리 정리를 위한 명시적인 씬) Unity C#에서는 GC가 자동으로 호출된다. Clean Up 하는 형태의 Scene을 하나 두어서 중간에 로드가 많이 되는 Scene 들의 리소스를 효율적으로 관리하기 위한 방법으로 Scene을 이동하는 과정에서 리소스를 모두 다 날리고 새로운 동작을 하기 위한 Tip 이다. 흔히 Loading Scene 과의 비슷한 개념으로 중간에 Load 과정을 노출하지 않고 로딩중 화면을 보여주는 것도 비슷한 개념이다. 기본적으로 GC(Gargage Collector)를 통해서 메모리를 관리하기 때문에 스파이크가 튀는 현상이 종종 발생하는데 해당 시점에서 명시적으로 처리가 되기 때문이다. Unity의 가비지 수집 (정의.. 2024. 3. 21.
Unity)License Revoked~ (라이선스 에러) License Revoked~ (라이선스 에러) 갑자기 Unity Hub를 실행하고 프로젝트를 선택했을때 해당 에러 팝업이 나왔다. 간단하게 라이선스 서버가 잘못됬는지 기존에 갱신해둔 라이선스가 삭제되어서 나오는 메시지로 간단하게 라이선스를 갱신해주면 해결이 된다. Unity Hub 에서 환경설정을 들어간다. 라이선스 메뉴에서 새로고침 및 추가를 눌러서 라이선스를 갱신한다. Unity 온라인 라이선스 활성화 : [링크] 온라인 라이선스 활성화 - Unity 매뉴얼 Unity를 사용하려면 활성화된 라이선스가 필요합니다. Unity Plus 또는 Pro 라이선스의 경우 일련 번호가 있어야 하며 Unity Personal 라이선스의 경우에는 일련번호가 없어도 됩니.. 2024. 3. 20.
Unity) Animation Curve Preset 만들기 Animation Curve Preset 만들기 간단하게 Easing (애니메이션 및 움직임을 부드럽게 만들기 위한 기술)을 Preset 을 한눈에 볼수 있고 선택할수 있도록 하는 코드를 Animation Curve를 기반으로 코드를 작성했다. 선택하면 자동으로 Animation Curver가 기본 1을 기준으로 셋팅이 된다. 이후에 해당 Curve를 조금 조절하거나 Property를 변경해서 사용하려고 만들었다. 한눈에 Preset을 확인할수 있어서 편리한것 같다. [Unity -Top Paid Package] [Unity -Top Free Package] [Unity -New Asset Package] ★☆☆☆☆ 2024. 3. 6.
Unity코드) RectTransform 을 World 좌표로 계산 코드 RectTransform 을 World 좌표로 계산 코드 특정 RectTransform 의 위치에 대한 Position 값이 필요한 상황에서 유용하게 사용할수 있는 코드이다. private Vector3 GetWorldPosition(RectTransform rectTransform) { Vector3[] corners = new Vector3[4]; rectTransform.GetWorldCorners(corners);// RectTransform의 꼭지점 좌표를 World 좌표로 가져옴 Vector3 center = Vector3.zero; foreach (Vector3 corner in corners) center += corner; center /= 4f; // 네 꼭지점의 평균을 구해 RectT.. 2024. 2. 15.
Unity) TextMeshPro 특정단어 Click 이벤트 ( HyperText / Text Click) TextMeshPro 특정단어 Click 이벤트 ( HyperText / Text Click) Text의 특정 단어를 클릭하면 처리하는 하이퍼텍스트(클릭시 링크) 하는 기능이 필요해서 사용방법을 간단하게 포스팅한다. Text에 다음과 같은 형태로 작업하면 된다. Click Action 여기서 "ID" 라고하는건 고유하게 식별이 가능하기 위한 텍스트로 가독성있는 단어로 하면 된다. 해당 스크립트를 추가하고 이벤트에 대한 설정을 하면 된다. using System; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.EventSystems; /// /// Te.. 2024. 2. 5.
문제해결)Unity)GUI Error: Invalid GUILayout state in view. Verify that all layout Begin/End calls matchUnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) GUI Error: Invalid GUILayout state in view. Verify that all layout Begin/End calls matchUnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) GUI 작업을 하다가 다음과 같은 에러가 발생해서 간략하게 포스팅한다. 에러 코드가 직관적이여서 확인해보면 Begin 과 End 는 쌍으로 작업이 되어야한다고 한다. 확인해보니 코드가 누락되어서 그렇다. EditorGUILayout.BeginHorizontal(); ... EditorGUILayout.EndHorizontal(); 좀더 직관적으로 처리하기 위해서 구분을 하는것도 가독성이 좀더 좋아진다. float columnWidth = .. 2024. 2. 2.
Unity) 옵션 설정-자동 품질(퀄리티 : Auto Qulity Setting) 옵션 설정-자동 품질(퀄리티 : Auto Qulity Setting) 자동 품질을 설정하기 위해서 방법을 강구하다가 발견한 코드이다. 해당 코드를 최신화 해서 간략하게 정리한다. 퀄리티에 대한 설정은 좀더 다양하게 가능하다. 해당 코드는 참고용 코드로 생각하면 된다. FPS, 메모리 사이즈/ 프로세스 카운트를 통해서 간략하게 퀄리티에 대한 설정을 하는 코드이다. 3D 게임에서는 퀄리티 옵션에 대해서 추가로 더욱 다양하게 설정이 가능하다. LOD, 오클루전 컬링, 카메라 설정변경 등등이 가능하다. eQualityLevel AutoChooseQualityLevel() { Assert.IsTrue(QualitySettings.names.Length == Enum.GetNames(typeof(eQu.. 2024. 1. 22.
Unity) ScriptableObject Insecptor 조건부 노출 (Custom Editor) ScriptableObject Insecptor 조건부 노출 (Custom Editor) Scriptable Object를 사용하다보면 조건에 따라서 너무 많은 불필요한 조건이 노출되는 경우가 있다. 단순하게 룰이라고 기억하고 사용하기에는 휴먼이슈도 생기고 생각보다 직관적이지 않다. 불필요한 데이터를 넣을수도있고 정보가 많다보니 헷갈릴수도 있다. 조건부로 노출하는 방법으로 수정해보자. using UnityEditor; [CustomEditor(typeof(CardScriptableObject))] public class CardScriptableObjectInspector : Editor { private Serialized.. 2024. 1. 17.
Unity) Layout Group(Auto Layout) 을 사용할때 비활성화로 값 변경이 안될때 변경하는 방법들 Layout Group(Auto Layout) 을 사용할때 비활성화로 값 변경이 안될때 변경하는 방법들 다음과 같이 Layout Group 을 사용하는 과정에서 비활성화되어서 값을 변경하지 못하는 경우가 있다. 해당 케이스는 대체적으로 상위 객체의 영향을 받는 경우이다. 이런 경우에는 상위 Component를 비활성화 하고 수정하고 다시 활성화하는 방법으로 해결이 가능하다. Layout Element Component를 추가해서 해당 값을 변경하고 재정의한다. Unity 자동 레이아웃 (Auto Layout) : [링크] 자동 레이아웃 - Unity 매뉴얼 자동 레이아웃(Auto Layout) 시스템은 수평 그룹, 수직 그.. 2024. 1. 12.
Unity)애니메이션 커브 반전(Animation Curve Mirror) 애니메이션 커브 반전(Animation Curve Mirror) Animation Curve를 로 생성하는 코드이다. 해당 AnimationCurve를 실행하는걸 시간의 역순으로도 처리가 가능하지만 시각적으로 Curve도 확인이 되는 형태가 되면 좋을것 같았다. AnimationCurve를 통해서 특정 수치값에 대한 처리를 하는데 활용하다가 이번에 미러링(반대)로 Animation Curver 기능이 필요해서 구현하게 되었다. using UnityEngine; public static class AnimationCurveExtensions { public static AnimationCurve Mirror(this AnimationCurve curve) { Keyframe[] keys = c.. 2023. 12. 28.
Unity) 동일한 프로젝트를 참조하는 여러 Unity 인스턴스 실행 (심볼릭 링크로 동일한 프로젝트 다중 실행) 동일한 프로젝트를 참조하는 여러 Unity 인스턴스 실행 (심볼릭 링크로 동일한 프로젝트 다중 실행) 유니티의 프로젝트 구조와 심볼릭 링크를 활용해서 동일한 프로젝트를 참조하는 여러 Unity 인스턴스를 실행이 가능하다. 심볼릭 링크를 만들면 다음과 같이 '바로가기' 형태로 복사가되는데 ※ 다중 편집을 하면 문제가되기 때문에 문제가 발생할 수 있다는 점을 유의해서 사용하자. 새로운 이름의 폴더를 하나 만들고 심볼릭 링크로 Unity 프로젝트에 필요한 파일들을 복사한다. 필요한 폴더는 다음과 같다. 이름 설명 Assets 프로젝트의 Reousrce Packages Unity Project 에 포함된 Package ProjectSetting Unity Project 를 구성하는 설정 cd mklink /D .. 2023. 12. 26.
Unity) UIObject Drag And Drop (UI오브젝트 드래그 앤 드랍) UIObject Drag And Drop (UI오브젝트 드래그 앤 드랍) 간단하게 UI Object를 Drag & Drop 하는 코드를 포스팅한다. using UnityEngine.EventSystems; public class Item : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler, IDropHandler { private bool isDragging = false; private Vector2 originalPointerPosition; private Vector3 originalLocalPosition; private Vector2 currentDragDelta; private RectTransform canvasRect.. 2023. 12. 20.
Unity)영상으로 녹화 하기(Editor:Recoder) 영상으로 녹화 하기(Editor:Recoder) Unity Recoder 패키지를 사용해서 '재생모드'중에 데이터를 캡처하고 저장이 가능한 패키지로 Editor에서만 사용이 가능하다. Unity 화면에서 영상을 녹화할때 사용하면 쓸만하다. 동영상, 애니메이션 클립, GIF, 오디오 녹음의 다양한 형태로 저장이 가능하다. 레코드 창을 사용하면 현재 장면의 다양한 유형의 데이터를 캡처하고 여러가지 녹화 설정( 프레임, 시간 간격,포맷, 애니메이션 클립 등등)으로 녹화가 가능하다. 옵션 설명 Frame Rate 녹화 프레임 (Target FPS, Max FPS, Cap FPS) Recording Mode 녹화 모드 Outpu.. 2023. 12. 15.
Unity 코드) GameObject 전체 경로 찾기(부모 오브젝트 포함) (GameObject : Path) GameObject 전체 경로 찾기(부모 오브젝트 포함) (GameObject : Path) 간단하게 특정 오브젝트(GameObject)를 기준으로 부모오브젝트를 찾는 코드이다. public string GetGameObjectPath(GameObject obj) { string path = null; if (obj) //오브젝트가 존재하면 { path = obj.name; while (obj.transform.parent) //부모가 존재하면 { obj = obj.transform.parent.gameObject; path = obj.name + '/' + path; //경로 추가 } } return path; //경로 반환 } Unity 의 GameObject의 구조는 Root 를 기준으로 하위에 추.. 2023. 12. 13.
Unity) RectTransform 비율로 처리하기 RectTransform 비율로 처리하기 Unity RectTransform을 비율로 처리하는 방법에 대해서 간략하게 포스팅한다. 흰색 배경의 오브젝트에 0.45%의 빨간색 영역을 차지하려면 컴포넌트를 다음과 같이 처리하면 된다. 결론적으로는RectTransform 의 Size Delta/ Anchors / Pivot 의 설정으로 다음과 같이 처리가 된 것이다. Anchors Max : 0 ~ 1 사이의 값이고 여기의 0.45 < 이 값이 전체를 기준으로 비율(45%)를 나타내고 이때 중요한 Size Delta 값은 0,0,0,0 이여야 한다. Pivot 값은 어디를 기준으로 중심점을 처리할 것이야 하는 수치 값이다. Unity discussions. Position UI ele.. 2023. 12. 12.
반응형