Unity

    Unity Light : 조명

    개요 유니티는 다양한 조명 유형을 제공하여 게임 개발자들이 현실적인 조명 효과를 구현할 수 있도록 지원합니다. 이 글에서는 가장 일반적으로 사용되는 4가지 조명 유형인 Spot, Directional, Point, Area에 대해 자세히 설명하고 각 유형의 특징, 장단점, 활용 예시 등을 비교 분석합니다. 조명 유형 비교 유형 특징 장점 단점 활용 예시 Spot 원뿔형 조명 - 집중적인 조명 효과 - 특정 영역 강조 - 범위 제한 - 경계선 명확 - 손전등, 조명, 스포트라이트 Directional 태양광과 유사한 평행 조명 - 넓은 범위 조명 - 그림자 효과 자연스러움 - 방향 조절 제약 - 면적 조명 어려움 - 실외 환경, 햇빛, 달빛 Point 모든 방향으로 빛 발산 - 자연스러운 조명 효과 - 다..

    Unity Shader : 코드 분석

    이전 글에서는 Unity 쉐이더의 기본 개념과 Surface 쉐이더의 구성 요소를 살펴보았습니다. 이번 글에서는 쉐이더 코드를 직접 분석하며 쉐이더 작동 방식을 이해하는 데 집중할 것입니다. 1. CGPROGRAM & ENDCG 쉐이더 코드는 CGPROGRAM과 ENDCG 키워드 사이에 작성됩니다. 이는 Cg 또는 HLSL과 같은 프로그래밍 언어를 사용하여 쉐이더를 구현한다는 것을 의미합니다. Cg는 NVIDIA에서 개발한 고수준 쉐이더 언어이며, HLSL은 Microsoft에서 개발한 고수준 쉐이더 언어입니다. Unity는 Cg와 HLSL 모두를 지원하며, 쉐이더 모델 3.0 이상을 사용할 수 있습니다. 2. #pragma #pragma는 쉐이더 컴파일러에게 특정 지침을 제공하는 키워드입니다. 컴파일러..

    Unity Shader : 기초

    Unity 쉐이더는 게임 오브젝트의 렌더링 방식을 제어하는 코드입니다. 3D 그래픽에서 쉐이더는 매우 중요한 역할을 하며, 텍스처, 색상, 조명 등을 사용하여 사실적인 이미지를 만들 수 있도록 합니다. 1. 쉐이더 정의 쉐이더는 Cg 또는 HLSL과 같은 프로그래밍 언어로 작성된 코드이며, 꼭지점 셰이더와 프래그먼트 셰이더로 구성됩니다. 꼭지점 셰이더: 3D 공간에서 꼭지점의 위치를 변환하고 조명 계산을 수행합니다. 프래그먼트 셰이더: 각 픽셀의 색상을 계산합니다. 2. 쉐이더 종류 Unity에는 다양한 종류의 쉐이더가 있으며, 일반적으로 다음과 같이 분류됩니다. Standard Surface Shader: 대부분의 오브젝트에 사용되는 기본 쉐이더입니다. Lit Shader: 조명 계산을 수행하는 쉐이더..

    Rigidbody에서 오브젝트에 힘을 가할 때 사용되는 ForceMode

    유니티에서 Rigidbody를 사용하여 오브젝트에 힘을 가할 때 ForceMode는 힘의 적용 방식을 결정하는 중요한 요소입니다. 이 글에서는 다양한 ForceMode 옵션과 각 옵션의 특징, 그리고 사용 시 고려해야 할 사항들을 자세하게 설명합니다. 1. ForceMode 종류 Force: 힘을 오브젝트의 질량에 비례하여 가속합니다. Impulse: 힘을 순간적으로 가하여 오브젝트의 속도를 변화시킵니다. Acceleration: 힘을 오브젝트의 질량에 관계없이 일정한 가속도로 적용합니다. VelocityChange: 힘을 오브젝트의 질량에 관계없이 일정한 속도 변화량으로 적용합니다. 2. ForceMode 옵션 비교 옵션 특징 사용 시 고려 사항 Force 질량에 비례하여 가속 시간에 따라 힘이 누적 ..

    Unity에서 UnityWebRequest를 이용해 웹 접속하는 방법

    Unity에서 웹 접속 기능을 구현하는 방법은 여러 가지가 있지만, UnityWebRequest는 비교적 간편하고 효율적인 방법입니다. 이 글에서는 UnityWebRequest를 이용해 웹 접속하는 방법을 단계별로 설명하고, 예시 코드와 함께 활용 방법을 제시합니다. 개요 UnityWebRequest는 웹 서버와 통신하여 데이터를 주고받을 수 있도록 하는 API입니다. GET, POST, PUT, DELETE 등 다양한 HTTP 메서드를 지원합니다. 텍스트, 이미지, 바이너리 데이터 등 다양한 형식의 데이터를 처리할 수 있습니다. 웹 접속 단계 UnityWebRequest 객체 생성 UnityWebRequest 클래스의 생성자를 사용하여 웹 요청 객체를 생성합니다 요청 URL, 메서드, 헤더 정보등을 설..

    LayerMask 활용하기

    유니티에서 레이어 마스크는 특정 레이어에만 영향을 미치는 코드를 작성하는 데 필수적인 도구입니다. 이 글에서는 레이어 마스크의 내장 메서드를 활용하여 코드를 더욱 효율적이고 명확하게 작성하는 방법을 설명합니다. 1. 레이어 마스크 기초 레이어 마스크는 32비트 정수 값으로, 각 비트가 하나의 레이어에 해당합니다. 특정 레이어에 대한 비트를 1로 설정하면 해당 레이어가 마스크에 포함됩니다. 여러 레이어를 포함하려면 해당 레이어에 대한 비트를 OR 연산하여 마스크를 생성합니다. 2. 내장 메서드 LayerMask.NameToLayer: 레이어 이름을 사용하여 레이어 인덱스를 얻습니다. LayerMask.GetMask: 레이어 이름 목록을 사용하여 레이어 마스크를 생성합니다. LayerMask.GetMask(..

    데이터를 가져올 때 키 값이 존재하는지 확인하는 방법

    Firebase Database에서 데이터를 가져올 때, 해당 데이터에 특정 키값이 존재하는지 검사해야 하는 경우가 있습니다. 예를 들어, 특정 사용자의 데이터를 가져올 때, 해당 사용자의 이름 키값이 존재하는지 검사해야 할 수 있습니다. Unity에서 이러한 작업을 수행하려면 Firebase Database의 DataSnapshot 클래스의 HasChild 메서드를 사용할 수 있습니다. HasChild 메서드는 DataSnapshot에 지정된 키값이 있는지 여부를 반환합니다. True를 반환하면 키값이 존재하고, False를 반환하면 키값이 존재하지 않습니다. HasChild 메서드를 사용하려면 다음과 같은 코드를 사용할 수 있습니다. using Firebase; public class MyClass ..

    콜라이더 충돌 검사 : Physics.Overlap vs NonAlloc

    Unity의 Physics.Overlap[콜라이더이름] 메서드는 지정된 영역 내에서 콜라이더와 충돌하는 GameObject를 찾는 데 사용되는 메서드입니다. 이 메서드는 다음과 같은 두 가지 버전이 있습니다. 일반 버전: 이 버전은 충돌하는 GameObject의 배열을 반환합니다. NonAlloc 버전: 이 버전은 충돌하는 GameObject의 참조를 반환합니다. OverlapSphere() VS OverlapSphereNonAlloc() Physics.OverlapSphere() Physics.OverlapSphereNonAlloc() 메모리 사용량 새로운 배열을 할당하여 결과를 반환 기존 배열을 사용하여 결과를 반환 성능 메모리 할당 및 해제 과정이 추가되어 성능이 저하될 수 있음 메모리 할당 및 해..