본문 바로가기

개발

Unity 배경을 투명하게 캡처하는 방법 (URP프로젝트에서는 안 됨) 광고를 위해 배경을 투명하게 캡처해야 할 일이 생겨서 R&D함 그냥 렌더 텍스쳐를 png로 뽑으면 될 줄 알았는데.. 잘 안 되서 여기저기 검색해서 정리해봄 using System.Collections; using UnityEngine; public class TransparencyCapture : MonoBehaviour { public Camera _camera; private void Update() { if (Input.GetKey(KeyCode.Space)) { Capture(); } } private void Capture() { string path = Application.dataPath + "/capture.png"; StartCoroutine(CoCaptu..
C# Closure 클로저 보통 유니티에서 버튼 세팅을 편하게 하려고 반복문을 사용할 때가 있음 버튼 5개에 private void SetButton() { var buttons = GetComponentsInChildren(); for (int i = 0; i { Debug.Log(i); }); } } 적당히 이런 식으로 세팅하는 경우가 있는데 이러면 결과 버튼 하나만 누른 것이 아니라 5개 버튼 하나씩 누른 결과임 그럼 왜 이런 결과가 나오냐면 기본적으로 메모리에서 힙과 스택의 차이를 알아야 하는데 간단하게 넘어가면 스택메모리는 코드 영역에서 벗어나면 삭제되고 힙 메모리는 참조하는 곳이 없으면 GC가 돌 때 삭제됨 다..
Unity 2019.3 URP Camera Stacking 예전에 LWRP에서 Camera Stacking이 안 된다고 글을 쓴적이 있는데 URP 7.2부터 가능하게 됐다고 함.. https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.2/manual/camera-stacking.html 샘플 프로젝트 https://github.com/Unity-Technologies/UniversalRenderingExamples 일단 아주 간단하게 사용법만 써봄 NGUI를 테스트 해보진 않았지만 잘되지 않을까 싶음 메인카메라 렌더 타입을 Base로 추가 카메라 렌더 타입을 Obeerlay로 설정 오버레이 타입 카메라를 메인 카메라의 Stack 리스트에 추가해주면 끝
Unity Safe Area, Device Simulator Unity 2019.3 에서 Device Simulator가 새로 추가돼 모바일 기기에서 화면이 가려지지 않는 영역을 쉽게 테스트 가능하게 됨 테스트를 위해 개인적으로 테스트 툴을 만든적이 있는데.. 이번에 유니티에 추가 됨.. Screen.safeArea https://docs.unity3d.com/ScriptReference/Screen-safeArea.html Unity - Scripting API: Screen.safeArea On some displays, certain areas of the screen may not be visible to the user. This may be caused by the display's shape being non-rectangular or in the c..
Unity GameView 관리하기 (해상도 변경 등) 해상도와 관련된 툴을 만들어야 하는데 게임뷰를 컨트롤해야 해서 알아봄 요런 거.. 알고 보니 게임뷰는 internal 클래스였음.. 왜 굳이 internal인지 모르겠지만 어쩔 수 없이 리플렉션을 사용함 using System; using System.Reflection; using UnityEditor; public class GameViewSizeManager { private static object gameViewSizesInstance; private static MethodInfo getGroupMethod; static GameViewSizeManager() { var sizesType = typeof(Editor).Assembly.GetType("UnityEditor.GameViewSize..
UGUI Text 너비가 애매해서 텍스트가 끝까지 차지 않을 때 UGUI의 Text를 사용하다 보면 안 예쁘게 텍스트 줄이 바뀔 때가 있음 width에 비해 많이 남음 이럴 때는 일반적으로 사용하는 스페이스(' ')가 아닌 non-breaking space(nbsp, '\u00A0')을 사용해주면 됨 Text를 상속 받아 새로 만든 UIText using UnityEngine; using UnityEngine.UI; public class UIText : Text { [SerializeField] private bool m_DisableWordWrap; public override string text { get => base.text; set { if (m_DisableWordWrap) { string nsbp = value.Replace(' ', '\u00A0')..
Unity 오브젝트 Null 체크할 때 주의할 점(거지 같은 점) 유니티는 C#을 사용하고 C#은 강타입 언어임 그게 무엇이냐면 C++ 같은 경우 MyClass *myClass = new MyClass(); if (myClass) { // Do myClass } 이렇게 사용할 수 있음 하지만 C#의 경우 MyClass myClass = new MyClass(); if (myClass) // Error { // Do myClass } 에러가 나는데..... 근데 이놈의 유니티 오브젝트(를 상속받은 모노비헤이비어, 컴포넌트 등)는.. 참고 - https://github.com/Unity-Technologies/UnityCsReference/blob/master/Runtime/Export/Scripting/UnityEngineObject.bindings.cs#L93 이렇게 ..
Unity UGUI Text에서 특정 단어의 위치 찾기 여기저기 뒤져봤는데 바로 가져다 쓸만한 정보가 없어서 혼자 Text 클래스 내용 보면서 만든 소스 포지션은 첫 글자 좌상단 기준이고 Anchor는 해당 Text의 Anchor와 동일하게 해야 쓰기 쉬울듯함 (사실 비율 계산해서 정확하게 만들어 줄 수도 있지만 각자 알아서 쓰는 것이 더 좋을듯함) using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public static class TextUtil { public static bool GetWordRectInText(this Text textUI, out Rect rect, string word) { rect = new Rect(); if (stri..