728x90

분류 전체보기 932

[Unity] 최초 실행되는 UnityMain 함수 만들기 (RuntimeInitializeOnLoadMethod 상세 순서 설명)

유니티 엔진에서 초기화를 하고싶어 유니티는 BuildSettings의 Scenes In Build 목록에 셋팅된 0번 인덱스 씬으로 시작하게 됨. 이 때 씬을 로드하면서 초기화도 같이 수행하게 되는데, 씬에 올라간, 씬의 Hierarchy 목록의 GameObject 들의 Awake와 Start의 호출 순서가 보장되지 않음. Awake, Start 호출 순서가 보장되지 않더라도 초기화 처리는 가능하겠지만, 어떤 GameObject 들의 초기화보다도 먼저 초기화 처리를 하고싶은 경우가 있을 수 있음. 이 때, [RuntimeInitializeOnLoadMethod] 어트리뷰트(Attribute)를 활용해서 특정 static 함수의 속성을 설정해서, 게임이나 앱 실행 후 가능한 빠른 시점에 호출되도록 핸들링 ..

[Unity] 유니티 셰이더 코드에서 _MainTex_TexelSize 변수의 정체는?

셰이더 코드는 참조하다보니 _MainTex_TexelSize; 라는 변수를 선언만 하고 바로 사용하는 모습들을 종종 보게 됨. 내장 변수인 것 같은데, 어떤 값을 담는지 설명은 검색해도 보이던데 어디서 어떻게 생성해서 값을 할당 해주는 것인지에 대한 내용이 잘 보이지 않더라. 일단 이 변수는 유니티 엔진 내부에서 생성 및 할당해주는 변수는 확실하고, 관련 설명은 아래 유니티 공식 문서에서 서술하고 있음. 주의해야 할 부분은, _MainTex_TexelSize 라는 이름의 변수명을 생성해주는 것이 아니고, {TextrueName}_TexelSize 라는 이름으로 생성해준다는 것. 셰이더를 작성할 때 보통 _MainTex 프로퍼티를 생성하기 때문에 결론적으로 _MainTex_TexelSize 라는 변수가 만..

[Unity] 셰이더 처리 후 텍스처 테두리가 번져 보이는 문제

간단한 가우시안 블러(Gaussian Blur) 코드를 올리고 보니 테두리의 색상이 번져있는 것을 제보를 받고 알게 됨. 원인은, 가우시안 블러 셰이더 처리 중, UV 값이 0보다 작거나 1보다 큰 영역까지 침범했기 때문. [Unity] 간단한 가우시안 블러(GaussianBlur) 셰이더 코드 텍스처에 가우시안 블러 처리를 하면 요런 결과물이 생성됨. 아래는 머티리얼 속성. Blur Radius 를 조절해서 Blur 강도를 조절할 수 있다. 간단한 가우시안 블러 셰이더 코드 Shader "Custom/GaussianBlur" { tistory.wonsorang.com 아래는 침범된 코드 스니펫. // Horizontal blur pass for (int x = -5; x

[Unity] 간단한 가우시안 블러(GaussianBlur) 셰이더 코드

텍스처에 가우시안 블러 처리를 하면 요런 결과물이 생성됨. 아래는 머티리얼 속성. Blur Radius 를 조절해서 Blur 강도를 조절할 수 있다. 간단한 가우시안 블러 셰이더 코드 Shader "Custom/GaussianBlur" { Properties { _MainTex ("Texture", 2D) = "white" {} _BlurRadius ("Blur Radius", Range(0.0, 10.0)) = 1.0 } SubShader { Tags { "RenderType"="Opaque" } Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex :..

[Unity] 유니티로 Texture 를 복사하거나 Shader로 변형하는 방법

Graphics.CopyTexture()는 텍스처 간의 간단하고 효율적인 데이터 전송 효율적인 데이터 전송 Texture.isReadable 값이 false 인 경우, CopyTexture 가 텍스처를 복사하는 가장 빠른 메소드. 아래 3가지 조건이 두 텍스처간에 동일해야 함. - 텍스처 포멧 - 크기 - RenderTexture.antiAliasing 값 https://docs.unity3d.com/ScriptReference/Graphics.CopyTexture.html Unity - Scripting API: Graphics.CopyTexture This method copies pixel data from one texture to another on the GPU. If you set Textu..

[Unity] Dithering 셰이더 함수, Dither 노드, Dither thresholds array

Dither는 양자화 오류를 무작위화하는 데 사용되는 의도적 형태의 노이즈. 이미지에서 컬러 밴딩과 같은 대규모 패턴을 방지하기 위해 사용되거나, 화면 공간에 디더링을 적용하여 패턴의 균일한 분포를 보장하기 때문에 불투명한 오브젝트의 특정 픽셀을 Cliping 하여 투명하게 보이도록 처리할 수 있음. 불투명 렌더링 패스에서 투명하게 보이도록 처리하는데 유용. 아래 함수의 ScreenPisition 은 디더 패턴을 적용하는 데 사용할 스크린 좌표. void Unity_Dither_float4(float4 In, float4 ScreenPosition, out float4 Out) { float2 uv = ScreenPosition.xy * _ScreenParams.xy; float DITHER_THRESH..

[게임 자료] 퍼즐 게임 관련 사이트들 모음

Novel Games 다양한 퍼즐 게임들을 웹상에서 바로 플레이 해볼 수 있는 곳. https://www.novelgames.com/ko/puzzle-games/ 퍼즐 게임 | Novel Games 무료 싱글 플레이어 게임을 즐기십시오. 액션, 슈팅, 퍼즐, 전략 등 종류가 다양합니다. 매달 새 게임이 추가됩니다! www.novelgames.com Increpare Games 스티븐의 소시지 롤 (Stephan's sausage roll) 의 게임 개발사 홈페이지. 독특한 미니 게임들을 홈페이지에 모두 공개해두고 있고 HTML5 소스코드를 공개해두기도 함. https://www.increpare.com/ increpare games 2018/06/18 Individuals can produce a soc..

[Unity] 밸브사의 포탈(Portal) 게임의 포탈 메카닉스 만드는 방법 (자료)

플레이어 카메라와 포탈의 카메라를 생성하고 조작해서 포탈에 해당하는 매쉬 렌더러의 머티리얼 텍스쳐를 교체하는 기법. 튜튜리얼 영상 https://www.youtube.com/watch?v=cWpFZbjtSQg GitHub 저장소 링크 https://github.com/SebLague/Portals/tree/master GitHub - SebLague/Portals: Portals in Unity Portals in Unity. Contribute to SebLague/Portals development by creating an account on GitHub. github.com 게임 개발에 필수적인 내용을 담는 명서들을 소개합니다. (유니티 최신 버전) https://link.coupang.com/a..

[Unity] Working with Cinemachine Cameras Overview (시네머신 카메라 작업 개요)

시네머신(Cinemachine) 개요 시네머신(Cinemachine)은 코드를 작성하지 않고 복잡한 행동을 만들 수 있는 방법을 제공하는 카메라 시스템. 이전에는 카메라 움직임을 직접 키프레임화하거나 코드를 통해 스크립트로 작성하여 특정 팔로우 움직임을 만들어야 했음. 시네머신(Cinemachine)은 Cinemachine Brain 과 Virtual Camera(vcam) 으로 구성되고 메인 카메라에 적용하는 방식. 메인 카메라에 있는 모든 것이 시네머신과 함께 작동하며, 메인 카메라를 구동하는 강력한 애니메이션 시스템이라고 생각하면 됨. Cinemachine plugin는 설치하기 쉽고 설치부터 애니메이션까지 카메라를 제어할 수 있는 사용하기 쉽고 유연한 시스템을 제공. 기존 카메라 시스템을 변형하거..

[Unity] 화면 캡쳐(Screen Capture) 관련 자료 메모

화면을 캡쳐가 필요한 일이 종종 있다. 간단한 사례로, 1. Screen Shot 을 파일로 남기기 위해 2. 게임 화면을 캡쳐한 뒤 가공해서 활용하기 위해 필요한 기능이 디테일하게 조금씩 달라질 수 있음. 화면 캡쳐를 위한 두 가집 방향성을 제시. 1. ScreenCapture 클래스 정적 메소드 사용 아래 함수를 활용해서 현재 화면을 바로 캡쳐할 수 있다. 아래 샘플 코드는 Texture 타입으로 반환하는데, 다른 함수도 있으니 참고. Texture2D texture = ScreenCapture.CaptureScreenshotAsTexture(); https://docs.unity3d.com/ScriptReference/ScreenCapture.html Unity - Scripting API: Scr..

728x90
반응형