본문 바로가기

개발/Unity, C#

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..
Unity Update문에 대해서 https://blogs.unity3d.com/kr/2015/12/23/1k-update-calls/ 위 링크를 보고 나서 언젠간 한 번 직접 테스트해봐야지 했던 건데 직접 해봄 1. 모노비헤이비어들의 업데이트문은 어떤 순서로 불려질까? using UnityEngine; public class UpdateTest : MonoBehaviour { public float t = 0; public bool isStart = false; // Update is called once per frame void Update() { if (isStart == false) { return; } t += Time.deltaTime; if (t > 5) { Debug.Log(this.name); t = 0; } } } u..
Unity Invoke vs Coroutine 인보크 - 단순하게 메서드 호출의 딜레이가 필요할 때 쓰면 깔끔함 대신 처음 호출 당시 세팅이 유지됨 코루틴 - 좀 더 유연하게 사용할 수 있음 간단한 코드와 결과 private void Start() { Debug.Log("Start : " + Time.time); StartCoroutine("PrintCoroutine"); Invoke("PrintInvoke", 3f); } private void PrintInvoke() { Debug.Log("PrintInvoke : " + Time.time); } private IEnumerator PrintCoroutine() { yield return new WaitForSeconds(3f); Debug.Log("PrintCoroutine : " + Time...
C# AES 암호화 Key는 32자리 IV는 16자리인데 해시로 만들어서 사용하는 사람들도 있던데 어느 방법이 더 좋은 건지는 모르겠음 알고리즘보단 일단 간단한 사용법 using UnityEngine; using System; using System.Text; using System.IO; using System.Security.Cryptography; public class Crypto { public static readonly string key = "01234567890123456789012345678901"; public static readonly string iv = "0123456789012345"; //AES 암호화 public static string AESEncrypt(string input) { try..