렌더텍스쳐를 PNG로 저장하는 작업을 하던 중 첫번째같이 저장돼야 정상인데 아래같이 어둡게 나오는 문제가 있었다. 관련문제로 검색해보니 이미 좀 알려진 문제였다. 텍스쳐를 PNG로 인코딩할때 프로젝트의 컬러스페이스가 Linear라면 이런다고 하는데... 그렇다고 Linear를 포기할순없으니 찾아낸 방법이다. 렌더텍스쳐의 인스펙터에서 sRGB를 체크해주면 해결된다는 글을 봤는데... 여기서 방법은 2가지인데 1. ColorFormat 드롭다운을 열어서 직접 sRGB포맷 찾기 2. 디버그 인스펙터로 바꿔서 sRGB체크해주기 2번 방법이 쉽고 간편하다 인스펙터 오른쪽위 자물쇠 옆 세로점 3개를 클릭해서 메뉴를 연 뒤, 디버그 인스펙터로 진입하면 바로 체크해주고 다시 테스트해보니 이제 유니티에서 보이는 색감 그..
URP에서 내장함수 OnPostRender() (렌더링 이후 호출됨)을 작성했는데 호출이 되지않아서 검색해보니 나온 방법 using UnityEngine; using UnityEngine.Rendering; public class MyClass: MonoBehaviour { void OnEnable() { RenderPipelineManager.endCameraRendering += RenderPipelineManager_endCameraRendering; } void OnDisable() { RenderPipelineManager.endCameraRendering -= RenderPipelineManager_endCameraRendering; } private void RenderPipelineMana..
탭 투 블라스트 방식의 캔디팡, 꿈의집과 비슷한 퍼즐게임을 만들어보며레벨 에디터를 구현해 보았다.유니티의 에디터 커스터마이징은 거의 경험이 없었는데이 기회에 버튼이라든가 텍스쳐2D를 불러는거라든가여러가지를 배울 수 있었다. 에디터 스크립트#if UNITY_EDITORusing System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using UnityEngine.UIElements;using System.Linq;[CustomEditor(typeof(LevelData))]public class LevelDataEditor : Editor{ private LevelData level; ..
결과물 영상 Hitbox는 Overlapbox를 통해 충돌을 감지하고 원하는 타이밍에 켜고 끌수있다.(여기선 애니메이션 이벤트로 컨트롤) using System.Collections;using System.Collections.Generic;using UnityEngine;public class Hitbox : MonoBehaviour{ public enum ColliderState { Closed, Open, Colliding } public LayerMask mask; public Vector3 hitboxSize = Vector3.one; public Vector3 offset = Vector..
3D카드를 멋지게 표현해보고 싶었다.목표는 아래와 같은 영상이었지만... 튜토리얼을 열심히 찾아봐도 URP 튜토리얼은 조금이나마 있지만 BIRP튜토리얼은아래 영상말고는 찾을수가 없었다. 그래서! 위의 영상을 토대로 한땀한땀 따라서 쉐이더를 코딩하고쉐이더 관련 지식이 별로 없기때문에 원하는대로 커스텀하기 위해고쳐보고 컴파일해서 보고 또 고쳐보고 컴파일해서 보고 반복해서 만들었다. 결과물카드속에 있는 오브젝트는 Stencil마스크로 처리했고,호롤그램 이펙트를 주기위해 혼자서 R&D를 하다가 노말맵과 Gradient맵을 사용해서 구현했는데... 솔직히 정석적인 방법은 아닌것 같다.그래도 좋은 공부가 되었다. 프로젝트 링크GitHub - qwes348/FoilTradingCard: 홀로그램 트레이딩카드 쉐이더..
Renderer에 접근하여 Material들을 동적으로 바꿔줘야 할 때가있다. 처음 생각한 간단한 방법으로는 적용되지않아서 찾아낸 정보를 기록한다. 틀린예시 for (int i = 0; i < rend.materials.Length; i++) { rend.materials[i] = new Material(maskedShader); } 맞는예시 var rend = gameObject.GetComponentInChildren(); Material[] mats = rend.materials; for (int i = 0; i < rend.materials.Length; i++) { mats[i] = new Material(maskedShader); mats[i].CopyPropertiesFromMaterial(..