Unity Shader : 코드 분석
·
Unity
이전 글에서는 Unity 쉐이더의 기본 개념과 Surface 쉐이더의 구성 요소를 살펴보았습니다. 이번 글에서는 쉐이더 코드를 직접 분석하며 쉐이더 작동 방식을 이해하는 데 집중할 것입니다. 1. CGPROGRAM & ENDCG 쉐이더 코드는 CGPROGRAM과 ENDCG 키워드 사이에 작성됩니다. 이는 Cg 또는 HLSL과 같은 프로그래밍 언어를 사용하여 쉐이더를 구현한다는 것을 의미합니다. Cg는 NVIDIA에서 개발한 고수준 쉐이더 언어이며, HLSL은 Microsoft에서 개발한 고수준 쉐이더 언어입니다. Unity는 Cg와 HLSL 모두를 지원하며, 쉐이더 모델 3.0 이상을 사용할 수 있습니다. 2. #pragma #pragma는 쉐이더 컴파일러에게 특정 지침을 제공하는 키워드입니다. 컴파일러..
Unity Shader : 기초
·
Unity
Unity 쉐이더는 게임 오브젝트의 렌더링 방식을 제어하는 코드입니다. 3D 그래픽에서 쉐이더는 매우 중요한 역할을 하며, 텍스처, 색상, 조명 등을 사용하여 사실적인 이미지를 만들 수 있도록 합니다. 1. 쉐이더 정의 쉐이더는 Cg 또는 HLSL과 같은 프로그래밍 언어로 작성된 코드이며, 꼭지점 셰이더와 프래그먼트 셰이더로 구성됩니다. 꼭지점 셰이더: 3D 공간에서 꼭지점의 위치를 변환하고 조명 계산을 수행합니다. 프래그먼트 셰이더: 각 픽셀의 색상을 계산합니다. 2. 쉐이더 종류 Unity에는 다양한 종류의 쉐이더가 있으며, 일반적으로 다음과 같이 분류됩니다. Standard Surface Shader: 대부분의 오브젝트에 사용되는 기본 쉐이더입니다. Lit Shader: 조명 계산을 수행하는 쉐이더..
RigidbodyConstraints : 회전과 위치 제어
·
Unity
유니티 RigidbodyConstraints는 리지드바디의 회전과 위치를 제어하는 데 사용되는 enum입니다. 각 옵션은 다음과 같은 의미를 가집니다. 회전 제어:FreezeRotationX: X축 회전을 동결합니다. (X축 회전 불가능)FreezeRotationY: Y축 회전을 동결합니다. (Y축 회전 불가능)FreezeRotationZ: Z축 회전을 동결합니다. (Z축 회전 불가능)위치 제어:FreezePositionX: X축 이동을 동결합니다. (X축 이동 불가능)FreezePositionY: Y축 이동을 동결합니다. (Y축 이동 불가능)FreezePositionZ: Z축 이동을 동결합니다. (Z축 이동 불가능)예시단일 제어 Rigidbody rigid = GetComponent();// X축 회전..
List<T> FindIndex
·
C#
FindIndex 메서드는 리스트에서 특정 조건을 만족하는 첫 번째 요소의 인덱스를 찾는 데 사용됩니다. 사용 방법: 1. FindIndex(Predicate match): Predicate 델리게이트를 사용하여 조건을 정의합니다. 델리게이트는 리스트의 각 요소를 검사하고, 조건을 만족하는 경우 true를 반환합니다. 조건을 만족하는 첫 번째 요소의 인덱스를 반환합니다. 조건은 만족하는 요소가 없으면 -1을 반환합니다. 2. FindIndex(int startIndex, Predicate match): 검색을 시작할 인덱스를 지정합니다. startIndex는 0부터 시작하며, 리스트의 크기보다 크거나 같을 수 없습니다. startIndex 이후에 조건을 만족하는 첫 번째 요소의 인덱스를 반환합니다. 조건..
Rigidbody에서 오브젝트에 힘을 가할 때 사용되는 ForceMode
·
Unity
유니티에서 Rigidbody를 사용하여 오브젝트에 힘을 가할 때 ForceMode는 힘의 적용 방식을 결정하는 중요한 요소입니다. 이 글에서는 다양한 ForceMode 옵션과 각 옵션의 특징, 그리고 사용 시 고려해야 할 사항들을 자세하게 설명합니다. 1. ForceMode 종류 Force: 힘을 오브젝트의 질량에 비례하여 가속합니다. Impulse: 힘을 순간적으로 가하여 오브젝트의 속도를 변화시킵니다. Acceleration: 힘을 오브젝트의 질량에 관계없이 일정한 가속도로 적용합니다. VelocityChange: 힘을 오브젝트의 질량에 관계없이 일정한 속도 변화량으로 적용합니다. 2. ForceMode 옵션 비교 옵션 특징 사용 시 고려 사항 Force 질량에 비례하여 가속 시간에 따라 힘이 누적 ..
Unity에서 UnityWebRequest를 이용해 웹 접속하는 방법
·
Unity
Unity에서 웹 접속 기능을 구현하는 방법은 여러 가지가 있지만, UnityWebRequest는 비교적 간편하고 효율적인 방법입니다. 이 글에서는 UnityWebRequest를 이용해 웹 접속하는 방법을 단계별로 설명하고, 예시 코드와 함께 활용 방법을 제시합니다. 개요 UnityWebRequest는 웹 서버와 통신하여 데이터를 주고받을 수 있도록 하는 API입니다. GET, POST, PUT, DELETE 등 다양한 HTTP 메서드를 지원합니다. 텍스트, 이미지, 바이너리 데이터 등 다양한 형식의 데이터를 처리할 수 있습니다. 웹 접속 단계 UnityWebRequest 객체 생성 UnityWebRequest 클래스의 생성자를 사용하여 웹 요청 객체를 생성합니다 요청 URL, 메서드, 헤더 정보등을 설..
sort와 sorted의 차이점
·
파이썬/Basic
파이썬에서 리스트를 정렬하는 작업은 매우 빈번하게 발생합니다. 이를 위해 sort와 sorted 두 가지 함수가 제공되는데, 이들은 유사한 기능을 제공하면서도 중요한 차이점을 가지고 있습니다. 1. sort() 기능: 리스트를 직접 변경하여 정렬합니다. 반환 값: None (리스트 자체를 변경합니다) my_list = [5, 2, 4, 1, 3] # 리스트를 직접 정렬 my_list.sort() print(my_list) # [1, 2, 3, 4, 5] 2. sorted() 기능: 리스트를 새롭게 만들어 정렬 결과를 반환합니다. 반환 값: 정렬된 새로운 리스트 my_list = [5, 2, 4, 1, 3] # 새 리스트를 만들어 정렬 결과 반환 sorted_list = sorted(my_list) pri..
LayerMask 활용하기
·
Unity
유니티에서 레이어 마스크는 특정 레이어에만 영향을 미치는 코드를 작성하는 데 필수적인 도구입니다. 이 글에서는 레이어 마스크의 내장 메서드를 활용하여 코드를 더욱 효율적이고 명확하게 작성하는 방법을 설명합니다. 1. 레이어 마스크 기초 레이어 마스크는 32비트 정수 값으로, 각 비트가 하나의 레이어에 해당합니다. 특정 레이어에 대한 비트를 1로 설정하면 해당 레이어가 마스크에 포함됩니다. 여러 레이어를 포함하려면 해당 레이어에 대한 비트를 OR 연산하여 마스크를 생성합니다. 2. 내장 메서드 LayerMask.NameToLayer: 레이어 이름을 사용하여 레이어 인덱스를 얻습니다. LayerMask.GetMask: 레이어 이름 목록을 사용하여 레이어 마스크를 생성합니다. LayerMask.GetMask(..