Color // 참고2 각 색상 구성요소는 0에서 1 사이의 범위를 갖는 부동 소수점 값이다. Color32 // 참고3 32비트 형식으로 RGBA 색상을 표현한다. 각 색상 구성요소는 0~255 범위의 바이트 값이다. 여기서 Color32가 아닌 Color를 사용하는 것은 별로 권장하지 않는다. 이유는 아래와 같다. 1. float 값으로 색을 조정하는건 불편하다. 2. Color32를 대신 사용하면 색상의 byte-float 변환을 방지하고 임시 메모리를 덜 사용한다. (For performance reasons, consider using colors32 instead. This will avoid byte-to-float conversions in colors, and use less tempor..
Canvas에 TextMeshPro를 추가하고 스크립트로 색상을 변경하려 할 때 색상이 변경되지 않는 문제가 발생했다. 문제가 됐던 부분은 색상을 변경할 때 Color 구조체를 사용했기 때문이었다. Color 구조체 대신 Color32 구조체를 사용하니 문제가 발생하지 않았다. 글을 작성한 후 추가로 확인했을 때 구조체의 문제가 아닌 것을 확인했다. 기존에는 색상의 RGB 값을 검색하여 원하는 색상을 찾아 아래와 같이 코드를 작성했었다. Color color = new Color(255, 0, 0, 255); 하지만 Color 구조체의 경우 Byte 형태가 아닌 float 형으로 데이터를 입력해야 하는데 Byte 형으로 값을 입력하는 것이 문제가 되어 색상이 변경되지 않았던 것이다. * 추가 검색을 하다..
Unity를 다시 시작하거나 빌드할 때 Rect Transforms의 Y가 기존에 저장되어 있던 값과 다른 값으로 변경되는 현상이 발생했다. 해당 현상의 원인을 찾아봤을 때 유니티 버전의 문제였고 현재 사용하고 있는 2022.3.4f1 버전에서 발생하는 현상이었다. 해당 버그는 유니티 버전 2021.3.29f1 및 2022.3.5 f1에서는 고쳐졌다고 한다. 2022.3.7f1 버전에서는 재현되지 않는다는 내용이 있었고 해당 내용을 확인하고 버전을 2022.3.13f1로 업데이트했을 때 재현되지 않고 있다.
Unity에서 오브젝트 풀링(Object Pooling)이란 오브젝트를 미리 만들어 쌓아둔 후 필요할 때 꺼내서 사용하고 다 사용했으면 다시 넣어두는 방식을 뜻한다. 이러한 오브젝트 풀링을 사용하는 이유는 Unity에서 오브젝트를 생성하여 메모리를 할당하고 리소스를 초기화하거나 오브젝트를 파괴하여 가비지(Garbage)가 생기고 이런 가비지가 모여 가비지 컬렉터가 동작함으로 인해서 성능 저하가 발생할 수 있고 이러한 문제를 최대한 배제하여 성능을 높이기 위해서다. 동작 방식을 간단하게 설명하면 최초 오브젝트를 담기 위한 오브젝트 풀을 생성하고 오브젝트 풀에 최소한으로 사용할 오브젝트를 생성하여 담아둔다. 그리고 필요할 때 꺼내어 사용하고 다 사용했을 때는 오브젝트 풀에 넣는다. 만약 오브젝트 풀이 비어있..
코루틴은 주로 프레임, 시간 단위로 반복적으로 수행해야 하는 함수 등이 있거나 HTTP 전송, 에셋 로드, 파일 I/O 완료 등을 기다리는 것과 같이 긴 비동기 작업을 처리해야 하는 경우 코루틴을 사용한다. 코루틴을 사용하게 되면 프로세스가 진행되는 중 코루틴이 프로세스를 중단시키고 Unity에서 일시적으로 제어를 가져와 사용하고 다시 Unity에 제어와 선택적 반환 값을 반환하여 중단된 부분에서 다시 시작하게 된다. 다만 코루틴은 다중 스레드를 사용하는 것과는 다르고 메인 스레드에서 실행된다. 실행 방법 아래는 코루틴 메서드의 기본 구조다. IEnumerator Coroutine() { (1) yield break; (2) } 반환 값은 IEnumerator이여야 하며 반환할 때는 yield 문을 사용..
스택(Stack) 영역과 힙(Heap) 영역은 프로그램에서 사용하는 데이터를 관리하기 위한 메모리 영역에 속하며 각 영역의 주요 차이점은 프로그램에서 메모리를 할당하는 방식과 사용하는 방식에 존재한다. 스택(Stack) 영역 스택 영역은 컴파일할 때 크기가 정해지며 함수를 호출할 때 메모리가 쌓이고 함수에 정의된 데이터를 담아두는 영역으로 후입선출(LIFO, Last In First Out)의 특성을 가진다. 함수를 호출할 때 스택 프레임이 생기고 그 안에 호출된 함수의 매개변수, 지역변수, 리턴 값 등을 담아 두며 함수가 종료되면 메모리도 해제된다. 스택 영역의 크기는 제한이 있기 때문에 함수를 너무 많이 반복하여 사용하게 되면 오버플로우가 발생하여 예기치 않은 동작이 발생할 수 있고 이를 최소화할 방..
파싱할 수 없는 구조화된 데이터가 있다는 보고를 받았다. 문제가 발생한 글은 수정한적이 없었는데.... 2020년 04월에 작성된 글에서 문제가 되었다는 내용이 2023년 03월 부터 보고되기 시작했다. 우선 보고된 오류의 유형은 "문자열의 이스케이프 시퀀스가 잘못됨" 이고 공식 문서에서는 "문자열 값에 잘못된 이스케이프 시퀀스가 사용되었습니다." 라는 추가 설명이 있다. 결론은 문서에 역슬래시를 사용했기 때문에 발생한 것이였다. 따라서 역슬래시를 대신할 문자를 넣어주어 해결하는데, ㄱ 한자에 존재하는 특수문자를 사용했고, 기본 폰트를 사용하면 원하는 모양이 나오지 않기 때문에 글꼴을 바꿔주어 문제의 원인을 제거했다. 제거 후 URL검사에서 실제 URL 테스트를 진행하여 문제가 없는 것을 확인했다. 이제..
오버라이드(Override)란 부모클래스를 상속받은 자식클래스가 부모클래스에 존재하는 메서드를 다시 정의하는 것을 뜻한다. 메서드를 다시 정의하는 것이기 때문에 메서드의 구조는 같아야한다. class BaseClass { public void Method() { } } class DerivedClass : BaseClass { public void Method() { } } 오버라이드하고 있는 위 코드는 재정의하고 있는 DerivedClass.Method에 경고가 발생한다. 위와 같은 경고가 발생하지 않도록 수정한느 방법은 두 가지가 있다. 하나는 override 키워드를 사용하는 방법이 있고 (override 키워드를 사용하기 위해서는 부모클래스의 메서드에 virtual나 abstract 키워드를 사용..
한 달 전 블로그에 올린 몇 개의 글과 관련되어 Google Search Console에서 리디렉션 오류가 보고됐다. 오류가 보고된 글에서 리디렉션 오류가 발생할 만한 내용을 생각해봤을 때 발생할 만한 특별한 내용은 없다고 생각했다. 그래도 100% 확신할 수 없는 상황이였기 때문에 Google Search Console에서 제공하고 있는 실제 URL 테스트와 Google Search Console 측에서 안내하고 있는 테스트 방법인 크롬의 Lighthouse 테스트 그리고 이러한 방법 외에 별도로 찾아본 https://httpstatus.io/ 등등을 활용하여 테스트해봤을 때 리디렉션 관련 문제가 발생하지 않는 것으로 확인했다. 때문에 Google Search Console에서 재색인 및 리디렉션 오류..
그리기, 채우기, 전체 삭제, 다운로드 기능이 있는 그림판. HTML - BODY Draw Mode Clear Save Javascript const canvas = document.getElementById("canvas"); const ctx = canvas.getContext("2d"); const colors = document.getElementsByClassName("controls_color"); const range = document.getElementById("range"); const mode = document.getElementById("mode_btn"); const save = document.getElementById("save_btn"); const clear = docum..