유니티의 텍스처 압축 포맷(texture compression format, TCF)유니티에서 임포트한 일반적인 이미지 파일 형식들(JPG, PNG, PSD, TGA, 기타)은 실시간 렌더링에 직접 사용되지않는다. 유니티는 이러한 형식들을 GPU에 최적화된 텍스처 압축 포맷(TCF)으로 변환한다. GPU는 변환된 텍스처를 비교적 더 적은 메모리로 더 빠르게 읽고 압축해제하여 렌더링할수있다. 기본적으로 유니티는 사용자가 선택한 빌드 플랫폼에 적합한 형식으로 텍스처를 자동 변환한다. 예에서 PC, standalone 플랫폼의 프로젝트에서 유니티가 이미지 소스 파일의 PNG 형식을 DXT1 형식으로 자동 변환한것을 확인할수있다(텍스처 import settings) 빌드에는 변환된 텍스처만 포함되며 이미지 소스..
유니티(unity)에서 오브젝트의 축 정렬하기(Quaternion.FromToRotation, Quaternion.LookRotation) Quaternion.FromToRotation, Quaternion.LookRotation 함수를 사용하여 오브젝트를 회전시키고 축 정렬하기 1)아래 예에서 rotateCylinder을 회전시켜서 y축을 targetCylinder의 y축과 일치시키고자한다. 2)아래 스크립트에서 Quaternion.FromToRotation함수를 사용하여 rotateCylinder의 회전을 설정한다. rotateCylinder의 y축(rotateCylinder.transform.up)을 targetCylinder의 y축(targetCylinder.transform.up)과 일치시킨다...
유니티(unity)에서 라이트의 그림자 설정(cast shadow, receive shadow) 1)예에서 씬에 sphere, cube 오브젝트를 생성하였다. cube 오브젝트는 바닥에 그림자를 드리우고(cast shadow) sphere 오브젝트의 그림자를 받는것을 확인할수있다. 2)빛에 의한 그림자를 생성하려면 라이트 오브젝트의 shadow type을 설정한다(hard shadows, soft shadows) 3)cube 오브젝트의 mesh renderer에서 cast shadows를 활성화하면(on) cube오브젝트에 의한 그림자를 생성한다. receive shadows에 체크하면 cube 오브젝트의 표면에 다른 오브젝트에 의한 그림자를 생성한다. cube 오브젝트의 receive shadows 비..
유니티 URP에서 알파 클리핑 사용하기(alpha clipping) 알파 클리핑(alpha clipping)은 투명한 영역과 불투명한 영역의 경계가 존재하는 투명 효과를 표현할때 사용할수있다. 예를 들어 동물의 날개, 나뭇잎등에 알파 클리핑을 사용하면 비교적 저해상도 모델에서 세부적인 표현이 가능하다. 1)알파클리핑을 사용하려면 텍스처에 알파 채널을 추가하여 투명한 영역과 불투명한 영역을 설정한다. 2)유니티에서 불러오기한 해당 텍스처의 알파 채널을 확인할수있다(import settings) 3)모델의 재질에서 알파 클리핑을 지원하는 URP의 빌트인 셰이더를 선택한다(lit, simple lit, unlit, baked lit, complxe lit) 4)재질의 속성에서 알파 클리핑(alpha clipp..
유니티 에디터 버전에 따라서 요구하는 SDK, JDK, NDK의 버전 1)아래 유니티 공식 기술문서에서 에디터의 버전에 따라서 요구하는 sdk, ndk, jdk버전을 확인할수있다. https://docs.unity3d.com/2020.3/Documentation/Manual/system-requirements.html 2)좌측 상단의 version에서 에디터 버전을 선택한다. 3)Unity Player system requirements의 mobile 섹션에서 유니티를 빌드하고 실행하기 위한 최소 요구 사항을 확인할수있다.
유니티 URP에서 legacy shader 사용하지않음 권장 1)아래 예에서 프로젝트는 렌더파이프라인으로 URP를 사용하고있다. 2)씬에 legacy shader를 사용하는 오브젝트를 추가하였다. 3)URP 프로젝트에서 일부 legacy shader를 사용하는 오브젝트들은 씬 또는 런타임에서 정상적으로 렌더링된다. 4)하지만 레거시 셰이더는 SRP Batcher와 GPU 인스턴싱(일부 셰이더)을 지원하지않음으로 최적화에 한계가 있어 권장하지않는다. 재질의 select shader를 선택한다. 5)해당 셰이더가 SRP Batcher와 호환되지않음을 확인할수있다(not compatible) SRP Batcher는 씬에서 CPU 렌더링 속도를 높이는 렌더링 루프로 SRP 프로젝트에서 사용가능하다(URP, HD..
유니티 onClick.AddListener에서 함수의 파라미터 전달 문제 1)예에서 아래와 같이 캔버스에 버튼을 구성하였다. 2)아래 스크립트의 for구문에서 순차적으로 버튼을 클릭했을때 호출되는 함수를 추가하고 함수에 전달하는 인수로 iteration 변수를 설정하였다. 3)게임을 시작하고 순차적으로 버튼을 클릭하면 의도한 iteration 변수를 출력하지않는것을 확인할수있다. 4)for 구문 내에서 임시적으로 정수형 변수를 선언하고 이 변수를 인수로 전달한다. 5)게임을 시작하고 순차적으로 버튼을 클릭하면 정상적으로 출력한다.
유니티 애니메이션 뷰에서 클립의 속성 목록이 노란색으로 표시되는 경우 1)씬에 애니메이션을 사용하는 모델을 추가하였다. 2)animation view에서 게임 오브젝트가 사용하는 애니메이션(우측 타임라인) 및 해당 애니메이션에 의해 제어되는 게임 오브젝트, 속성 목록(좌측)을 확인할수있다. 3)씬에서 게임 오브젝트의 이름을 변경하면 animation view에서 해당 게임 오브젝트 및 하위 게임 오브젝트의 속성 목록이 노란색으로 표시되며 애니메이션이 동작하지않는다(the gameobject or component is missing) 4)기존의 이름으로 재설정하면 정상적으로 목록을 표시하고 애니메이션이 동작한다. 5)이와같이 계층에 있는 게임 오브젝트의 이름과 해당 게임 오브젝트에 대한 애니메이션 속성의..
c# - region, endregion를 사용하여 코드 블록지정하기 c#스크립트에서 region, endregion를 사용하여 확대 및 축소 할수있는 코드 블록을 지정할수있다. 1)아래는 몇가지 변수와 함수를 선언한 클래스이다. 2)블록의 시작에 #region, 끝에 #endregion를 입력하면 코드 블록을 지정하며 확대 및 축소할수있다. #region 다음에는 축소했을때 표시할 주석을 입력한다. 3)같은 방법으로 추가적인 코드 블록을 지정하였다.
c# - 컴파일 경고 표시하지않기(#pragma warning disable) c# 스크립트의 컴파일 및 코드 분석 결과에서 경고를 표시하지않는 방법이다. #pragma warning를 사용하여 특정 경고를 사용하거나 사용하지 않도록 설정할수있다. 1)예에서 정수형 변수가 선언되었지만 사용되지않았다. 2)컴파일 및 코드 분석결과 하단에 있는 오류 목록에 경고를 표시한다. (CS0168 the variable 'i' is declared but never used) 3)해당 경고를 표시하지않으려면 스크립트에 다음 코드를 입력한다. disable는 스크립트의 모든 경고를 표시하지 않도록 설정한다. disable 뒤에는 경고번호 목록을 쉼표로 구분하여 지정한다. #pragma warning disable 01..
비주얼스튜디오 언어 변경하기 비주얼스튜디오에 새로운 언어 팩을 설치하고 사용자 메뉴 언어를 변경하는방법 1)윈도우에서 visual studio installer를 검색 및 실행한다. 2)비주얼 스튜디오 설치 관리자에서 언어를 변경하고자하는 버전에서 수정으로 이동한다. 3)언어 팩 메뉴에서 추가할 언어를 선택하고 수정을 클릭하면 설치를 진행한다. 4)설치를 완료하면 비주얼스튜디오를 재시작한다. 5)상단의 도구 메뉴에서 옵션으로 이동한다. 6)환경의 국가별 설정에서 추가 설치한 언어 목록을 확인할수있다. 언어를 선택하고 확인한다.
유니티에서 버튼이 반응하지않는경우 button의 영역에 같이 존재하는 다른 ui 오브젝트들의 raycast에 의하여 런타임에서 사용자 인풋에의해 버튼이 반응하지않는 경우 1)아래 예에서 씬에 canvas를 생성하고 button, panel를 구성하였다. 2)panel을 hierarchy에서 button의 하단에 위치시켰다. button과 panel이 같은 영역에 존재하면 런타임에서 버튼은 정상적으로 반응하지않는다. 3)panel의 image 컴포넌트에서 raycast target이 체크되어있는것을 확인할수있다. 4)raycast target을 체크해제하면 해당 오브젝트는 레이캐스팅 대상에서 제외된다. 5)런타임에서 버튼이 정상적으로 반응하는것을 확인할수있다.