본문 바로가기
728x90

Study23

Unity, IK를 이용한 거미 다리 이동 IK란? Inverse Kinematics를 뜻 하는 줄임말이며, 역운동학이라는 의미를 가지고 있습니다. 보통 캐릭터의 모습을 표현할 때는 애니메이션을 사용하기 때문에, 지형에 맞게 발이 붙어서 움직이는 섬세한 표현을 할 수가 없습니다. 이를 IK를 통해 표현을 할 수 있으며, 발이 움직이는 지점으로부터 역으로 무릎, 골반까지 반대로 표현할 수가 있으며, 이를 IK를 이용한 기술이라고 합니다. IK (Inverse Kinematics): 하위 오브젝트로부터 상위 오브젝트가 따라 움직인다. FK (Foward Kinematics): 상위 오브젝트로부터 하위 오브젝트가 따라 움직인다. 우리가 알고 있는 뼈대가 움직이는 기준은 FK입니다. 예를 들어, 우리가 피규어에서 어깨 방향을 틀면, 하위가 되는 팔꿈치 .. 2024. 2. 14.
C#, 포인터의 크기 (Pointer size) 포인터의 크기 일반적인 데이터형에 따른 메모리 사이즈말고도 할당으로 인해서 생기는 메모리도 존재합니다. 우리는 이것을 포인터라고 표현합니다. 보통 변수를 선언할 때는 메모리로부터 할당을 받습니다. 우리가 클래스를 만들고, 클래스를 할당 받으면 메모리가 어떻게 얼마나 생기는지 예측할 수가 있기도하고, 필요할 때만 받을 수 있게 정확히 구분 지어 사용이 가능합니다. 할당으로 생기는 메모리 크기는 "4byte" 통상적으로 메모리 크기는 4byte입니다. 언어 환경 또는 빌드 때 시스템 환경이 32비트냐 64비트냐에 따라 8byte가 되기도 합니다. 이는 포인터에 값이 들어있으면 존재하고, null이면 존재하지 않습니다. 예제 아래와 같은 클래스들이 있습니다. public class A { public stri.. 2023. 12. 29.
Unity, Coroutine과 Invoke 차이 Coroutine과 Invoke는 무슨 차이점이 있는걸까? 유니티를 사용하다보면 인보크와 코루틴의 차이점이 무엇인지에 대해 의문을 품은 적이 있으실겁니다. 이 둘은 마치 싱글 쓰레드를 사용한다는 전설을 가지고 있는 유니티에서 마치 멀티 쓰레드를 사용하는 것처럼 편하게 사용할 수 있습니다. 여담으로 유니티는 싱글 쓰레드만 사용하지 않습니다. 이러한 처리들을 위해서 여러 백그라운드 워커쓰레드가 함께 동작하고 있으며, 이는 프로파일러를 통해서 확인이 가능합니다. (최근 회사에 유니티 코리아 세미나가 있었는데, 절대 싱글 쓰레드만 사용하지 않는다고 강조를 하더군요.) 실제로 프로젝트 작업을 하다보면 이 둘에 대해 구분 없이 쓰는 분도 있으며 대게는 어떻게 관리가 이루어지는지에 대해서 모르는 시는 분들이 생각보다.. 2023. 11. 10.
자료구조, Array와 List 차이 배열과 리스트 왜 나눠져있을까? 작업을 하다보면 List와 Array 두 가지 타입을 접하게 되는데, 이 둘은 표면적으로는 기능이 비슷하지만, 상황에 맞게 골라야 합니다. 이 두 가지 데이터 타입은 서로 메모리에 접근하는 방식이 다르므로써 큰 차이가 있습니다. Array (배열) 데이터를 저장할 수 있는 길이가 고정이다. 런타임 중에 수정이 어려우므로, 보통은 정해진 데이터들을 사용할 때 적합하다. 저장되는 메모리가 연속적이다. 그러므로 탐색 속도가 List에 비해 상당히 빠르다. 삽입/삭제 행위가 적거나 없는 정적인 데이터에 어울린다. 배열은 선언할 때부터 어느 정도 사용할지 정해놓고 사용합니다. 그래서 삽입/삭제에 대한 불편함이 따릅니다. 새로 다시 할당하거나, 삽입/삭제로 인한 변경된 길이 만큼의 .. 2023. 10. 31.
Unity, 베지에 곡선으로 포물선 만들기 (Bezier Curve) 베지에 곡선 게임 제작에 있어서, 포물선 구현이 필요한 경우가 생기는데 이는 베지에(Bezier) 곡선을 통해서 구할 수 있습니다. 이는 4개의 정점을 통해서 간단하게 구현이 가능합니다. 베지에 곡선을 구하는 원리 위 이미지를 예시로 들어, Value 값이 0.5의 Lerp되는 값을 구한다고 가정합시다 'P1, P2, P3, P4'를 위 그림처럼 이어 3개의 변을 만들어줍니다. 처러 각 변의 각각 0.5 구간이 되는 구간인 'a, b, c' 구해 옵니다. 이번에는 각각 구해진 'a, b, c'를 이어 새로운 2개의 변을 만들어 0.5 구간이 되는 'd, e'를 구합니다. d와 e의 0.5가 되는 구간인 f를 구합니다. Value값이 0.5에 해당하는 베지에 f를 얻을 수 있습니다. 이렇게 각 구간의 베지.. 2023. 3. 1.
C#, 여러 개의 결과 값을 받아오기 (out, Tuple) 결과 값 여러 개로 받아오는 방법 함수를 통해 원하는 값이 여러 개일 경우 아래와 같은 방법들이 존재합니다. out 예약어를 통한 여러 개 반환 Tuple 문법을 통한 여러 개 반환 out 을 통해서 두 개의 결과값이 필요하다면 아래와 같은 문법으로 사용해야합니다. 스크립트 (out) public void GetMulipleBoolean(out bool item1, out bool item2) { item1 = true; item2 = false; } 기본적으로 배우게되는 out을 사용한 문법입니다. 필요한 인자가 많아질 수록 사용이 불편해질 수 있습니다. 예제 private static void Main(params string[] args) { GetMulipleBoolean(out bool item.. 2022. 10. 24.
Unity, 배경 스크롤링(Background Scrolling) 자연스러운 배경 슈퍼마리오나 평범한 2D 게임이면 배경이 자연스럽게 흘러갑니다. 이러한 배경들을 자세히 관찰하면 반복이 되고 있습니다. 이는 리소스 절약도 되며, 이미지가 흐르고 있기 때문에 단조로움에서도 벗어나는 효과를 주기도 합니다. 방법 유니티로 표현하는 방법은 총 2가지입니다. 같은 배경 이미지 2개를 사용하여 반복한다. Shader의 기능을 사용하여 Offset을 조절한다. 1. 같은 배경 이미지를 2개를 반복한다. 생각보다 단순합니다. 스크롤링에 자연스럽운 2개의 이미지를 이어주는 것입니다. 1번 이미지 -> 2번 이미지 -> 1번 이미지 -> 2번 이미지 위 그림과 같이 화면 밖으로 벗어난 이미지는 다시 앞으로 이동시켜주면 되겠습니다. 스크립트 using System.Collections; .. 2022. 9. 28.
Unity, 오브젝트 풀링(Object Pooling) Object Pooling 게임을 제작을 하다보면 '오브젝트 풀'이라는 것을 접하게됩니다. 먼저 풀(Pool)이라는 것에 대해서 알아보자면, 하나의 거대한 공간을 의미합니다. 또는 단어 의미 자체로만 본다면 수영장의 풀을 의미합니다. 이러한 풀(Pool)에 오브젝트를 담은 것을 '오브젝트 풀(Object Pool)'이라고 합니다. 이러한 오브젝트들을 모아두는 이유는 무엇일까요? 정확히 말을 하자면, 사용되지 않은 오브젝트들이 대기하고 있는 것을 의미합니다. 이를 재활용하기 위해서 풀이라는 곳에 담아두고 있습니다. 사용 대기를 하면서 두는 주목적은 리소스 또는 데이터의 재활용이라고 볼 수 있습니다. 예시 "전략 시물레이션 게임(RTS)에서 현재 50 vs 50 마리의 유닛이 서로 전투를 진행하고 있다. 얼.. 2022. 9. 27.
'Call by value'와 'Call by reference'의 차이 함수 호출 방법은 크게 두가지가 있다. Call by value(값에 의한 호출) Call by reference(참조에 의한 호출) 이를 설명하기 위해, 많은 교재에서는 그림으로 예시를 들고 있다. 예를 들어, 컵에 물을 채워서 이 물을 직접 가져다가 다른 컵에서 사용하느냐, 아니면 똑같은 컵과 물을 한 컵 더 준비하여 사용을 하느냐라는 식이다. 언뜻 보면 이해가 쉬울 수 있지만, 오히려 헷갈릴 수가 있다. 이는 프로그래밍적으로 직접 접근해서 알아보는 것이 가장 확실하다. Call by value(값에 의한 호출)는 인자로 받은 값을 복사하여 처리를 한다. Call by reference(참조에 의한 호출)는 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다. 간단히 말해 값을 복사를 하여 처리.. 2022. 9. 13.
반응형