}
using System.Collections.Generic;using UnityEngine;[AddComponentMenu("Rendering/MPB Color Setter")][ExecuteAlways, DisallowMultipleComponent]public class MPBColorSetter : MonoBehaviour{ [Header("Target Renderers (Reorderable)")] [SerializeField] private Renderer[] targetRenderers; [Header("Override Color")] [ColorUsage(true, true)] [SerializeField] private Color overrideColor = Co..
유니티 메테리얼 복사본 없이 수정하기 #MaterialPropertyBlock메티리얼을 직접 수정하면 각 객체에 대해 메모리에 해당 머티리얼의 새로운 인스턴스를 생성하게 됩니다. MaterialPropertyBlock를 사용하여 복사본이 생성되는 문제를 해결할 수 있습니다. MaterialProwlsdn629.tistory.com 유니티 OVR 메테리얼 수정을 돕는 MaterialPropertyBlockEditorOVR SDK 프로젝트를 스터디 하다보면 MaterialPropertyBlockEditor 스크립트를 종종 발견하곤 했습니다. MaterialPropertyBlockEditor 스크립트가 무엇인지 이번 포스팅에서 살펴보고자 합니다😁. MaterialPropertyBlocwlsdn629.tis..
SRP Batcher가 “같은 셰이더 Variant(= Keyword 집합)” 만 묶어 준다는 사실은 많이 알려져 있지만, 무엇이 Variant를 갈라놓고 어디까지 다른 값을 허용하는지는 문서 곳곳에 흩어져 있습니다. 아래 표에 허용 범위 / 배제 범위를 정리하였 세 가지 배칭 기법의 세부 비교에 대해 알아보겠습니다!요약(복습)Shader Variant 분리 조건은 Pass, Shader Keywords, CBUFFER 레이아웃 3가지입니다. Texture·Color 값이 달라도 상관없지만 Keyword 플래그가 하나라도 다르면 SRP Batcher가 끊기게 됩니다.Static Batching 은 머티리얼만 공유하면 메시를 통째로 합쳐 1 드로우가 가능하지만, RAM·VRAM이 상당히 늘어나게 됩니다.G..
InverseTransformPoint 예시 설명Vector3 localTipPos = referential.InverseTransformPoint(tip.position);월드 좌표계에 있는 tip.position을 referential 기준의 로컬 좌표로 변환합니다.해석tip.position: 팁의 월드 좌표계 위치referential: 기준이 되는 오브젝트 (예: 접촉 대상의 Transform)localTipPos: referential 기준에서 본 팁의 상대적 위치즉, localTipPos는 "이 팁이 표면 오브젝트 기준으로 어느 위치에 있는지"를 알려줍니다.📌 이걸 통해 표면 안으로 얼마나 들어갔는지, 어느 방향으로 들어왔는지를 정밀하게 계산할 수 있습니다.BlockingSurface 구성은 ..
안녕하세요!VR 방탈출 게임을 제작하고 있는 팀에서 함께할 팀원을 찾고 있습니다. (5월 말까지만! - 6월 초부터는 새로운 테마 제작 시작!)명화나 동화 같은 작품을 재해석하여, 몰입감 있는 VR 방탈출 콘텐츠를 만들고자 합니다.👥 현재 팀 구성PM: 1명서버 & 클라이언트 개발자: 4명3D 모델러: 2명 (나갈 예정! 너무너무너무 필요해요)TA: 1명컨셉 아티스트: 2명사운드 디자이너: 1명기획자: 1명현재 팀은 학생들과 현직자들로 구성되어 있습니다.일부 팀원들은 사이드 프로젝트로 포트폴리오를 쌓고 있으며, 저를 포함한 몇몇은 이 프로젝트를 통해 사업을 진행하고 있습니다.🔧 진행 상황첫 번째 테마: 제작 마무리 단계두 번째 테마: 기획 준비중 (동화 및 명화 기반 스토리 해석)사업화 진행 중한양대..
개요Unity 프로젝트에서 한글 주석을 작성하다 보면, 가끔 Rider 편집기 상단에“The file was loaded in a wrong encoding: ‘UTF-8’”라는 빨간 에러 바가 뜨며 Ä¥ÆÇ¿¡… 같은 깨진 글자가 보일 때가 있습니다.이 글에서는 Rider에서 파일 인코딩을 바로 잡고, 한글 주석을 정상적으로 표시하는 방법을 단계별로 정리합니다.원인파일이 실제로는 CP949(윈도우 한글) · EUC-KR 등으로 저장되어 있는데, Rider가 UTF-8으로 불러오면서 바이트를 잘못 해석해 깨진 글자가 나옵니다.해결 방법1. “Reload in another encoding” 클릭에디터 상단 빨간 바 우측의 Reload in another encoding 버튼을 클릭팝업에서 Korean (..
해당 컴포넌트는 많은 곳에서 응용할 수 있습니다.이번 포스팅에서는 Snap Interactor에서 사용하는 방법에 대해 알아보겠습니다. 유니티 Snap Interactor을 이용해서 원하는 위치에 오브젝트 놓기 #SocketSnap Interactor 컴포넌트와 Snap Interactable을 활용하면 원하는 위치에 원하는 오브젝트를 놓을 수 있습니다. 이때 어느정도 간격이 떨어져 있어도 Smooth하게 해당 위치로 날아가면서 딱 Snap되듯 위치wlsdn629.tistory.comTagSet 컴포넌트란?Meta SDK에서 TagSet 컴포넌트는 "(문자열)Tag"를 이용해 인터랙터(Interactor)와 인터랙터블(Interactable) 간의 상호작용 대상을 손쉽게 필터링할 수 있도록 돕습니다. ..
PlayerRef와 NetworkObjectPlayerRef는 세션에 참여 중인 각 플레이어를 식별하는 핸들러이며, NetworkObject는 네트워크를 통해 동기화되는 게임 오브젝트를 의미합니다."Player Object(플레이어 오브젝트)"란 각 플레이어가 자신의 아바타로 사용할 NetworkObject를 고정해 두는 편의 기능으로, 설정된 매핑은 자동으로 모든 클라이언트에 복제됩니다.NetworkRunner.SetPlayerObject SetPlayerObject(PlayerRef player, NetworkObject networkObject)는 지정된 플레이어와 네트워크 오브젝트를 연관 짓습니다.이 호출은 네트워크 이벤트로 전파되어, 다른 클라이언트에서도 TryGetPlayerObject를 통해..
JWT 생성 과정→ 사용자 정보를 넣고, 서버가 가진 비밀키로 JWT를 암호화(서명)해서 만듭니다.JWT 검증 과정→ 서버는 JWT를 받으면 그 JWT가 서버가 가진 비밀키로 만들어졌는지 확인합니다.→ 이 과정에서 변조 여부와 유효성을 확인합니다.
Prisma 스키마 예시model User { id Int @id @default(autoincrement()) email String @unique name String? createdAt DateTime @default(now()) posts Post[]} 필드명 타입 설명 비고 idInt고유 ID자동 증가 (@id @default(autoincrement()))emailString이메일중복 불가 (@unique)nameString (선택적)사용자 이름선택적 필드createdAtDateTime생성된 날짜 및 시간기본값 현재시간 (@default(now()))postsPost[]사용자가 작성한 게시글과의 관계1:N 관계📌 1. 데이터 생성 ..
Prisma는 Node.js와 TypeScript 환경에서 사용하는 차세대 ORM(Object-Relational Mapper)으로, 데이터베이스 작업을 획기적으로 간단하게 만들어줍니다.ORM(Object-Relational Mapper)이란?ORM이란 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터 변환을 자동화해주는 기술입니다. 쉽게 말하면, 개발자가 직접 복잡한 SQL 쿼리를 작성하지 않고자바스크립트, 타입스크립트 같은 언어의 코드만으로 데이터베이스 작업을 할 수 있도록 도와주는 기술입니다.ORM이 없을 때, 사용자 정보를 가져오기 위해서는 아래와 같이 작성해야 합니다. // 직접 SQL 쿼리를 작성해야 함const result = await db.query('SELECT * FROM..
결론 : JWT 토큰은 무조건 서버가 만듭니다. 단계 누가 무엇을 하는가? 설명 ①클라이언트로그인 요청 (ID, PW)사용자가 서버에 로그인 시도②서버사용자 인증 (DB 확인 등)DB에서 사용자를 검증③서버JWT 생성 (Secret Key로)사용자 검증 완료 후 서버가 JWT 생성④서버 → 클라이언트JWT 전송서버가 생성한 JWT를 클라이언트에 전달⑤클라이언트JWT 저장 후 요청 시마다 전달클라이언트는 JWT를 저장했다가 매 요청 시 서버에 보냄⑥서버JWT 검증요청 받을 때마다 JWT 검증즉, 클라이언트는 서버가 만들어 준 JWT를 저장하고 있다가 요청할 때마다 서버로 전달하는 역할만 수행합니다. 직접 JWT를 생성하지 않습니다.서버의 비밀키(Secret Key)가 왜 중요할까?서버의 비밀키는 J..
LINQ란? (링크란?)LINQ는 Language Integrated Query의 줄임말로, C# 언어 안에서 SQL처럼 데이터를 다루는 문법입니다.리스트나 배열, 딕셔너리, 데이터베이스까지 다양한 컬렉션을 대상으로 사용할 수 있습니다. Where, Select, GroupBy, Any 등에 대해 간단히 설명드리겠습니다.Where – 조건에 맞는 데이터만 필터링💬 역할: LINQ에서의 Where는 모든 요소를 돌면서 조건을 만족하는 것만 추출합니다. 즉, “이런 애들만 골라줘!” 명령하는 것이지요.var activeObjs = FindObjectsOfType() .Where(obj => obj.activeSelf); Where는 루프와 if를 합친 느낌입니다obj.activeSelf == true..
시간복잡도란?시간복잡도(Time Complexity)는 입력 데이터의 크기(n)에 따라 알고리즘이 수행하는 연산량을 나타낸 것입니다.간단히 말해 "입력이 많아질수록 이 코드가 얼마나 느려질까?"를 수학적으로 표현하는 방법입니다.Big O Notation (빅오 표기법)이란?Big O 표기법은 알고리즘의 최악의 실행 시간을 나타내며, 다음과 같은 종류가 있습니다. 표기 설명 예시 O(1)상수 시간 – 입력 크기에 관계 없음배열에서 인덱스로 접근O(log n)로그 시간 – 이진 탐색처럼 반씩 줄이는 구조이진 탐색O(n)선형 시간 – 입력이 커지면 비례해서 늘어남전체 탐색O(n log n)대부분의 정렬 알고리즘 성능병합정렬, 퀵정렬O(n²)이중 반복문 등버블정렬, 삽입정렬O(2ⁿ), O(n!)매우 느림 –..