분류 전체보기 51

내일배움캠프: 유니티 Character Controller

Character Controller유니티 환경에서 제공하는 클래스로 캐릭터 움직임을 더 쉽게 제어할 수 있도록 도와주는 기능rigidbdoy가 없어도 쉽게 움직임을 제어할 수 있도록 메서드를 제공 한다. 이 외에도 다양한 기능들을 제공 해준다. 단점으로는 중력, 질량등 물리적인 처리를 원한다면 별도로 구현해 줘야한다는 점있다. Character Controller 설정 값 Slope Limit:  이동할 수 있는 최대 경사각, 이 값보다 가파를 경우 캐릭터가 미끄러지거나 이동이 불가능Step Offset:  올라갈 수 있는 장애물(계단) 최다 높이, 이 값보다 낮은 높이의 장애물은 넘어갈 수 있음Skin Width: 캐릭터의 콜라이더 표면과 충돌 검사에 사용되는 공간Min Move Distance: 캐..

내일배움캠프 2024.11.11

내일배움캠프: object와 generic

C#에서 object, generic타입은 모두 유연한 데이터형을 사용하기 위한 타입이다. object는 모든 데이터형의 최상위 타입으로 어떤 데이터 형이든 저장할 수 있는 유연성을 제공한다.  하지만 object를 사용할 때는 값 타입을 참조형으로 변환할 때 박싱/언박싱이 발행하여 성능에 영향이 끼친다. 제네릭 타입의 경우에는 컴파일 타임에 타입을 지정해줘 object에 비해 타입 안전성이 높고, 값 타입을 박싱 / 언박싱 하지도 않아 유연성을 높여준다.  다만, .NET Framework 2.0  보다 낮아 제네릭을 지원하지 않는 경우에는 object 타입을 사용해야할 수도 있다.

내일배움캠프 2024.11.08

내일배움캠프: for문을 통한 AddListener 등록 시 인자 전달 문제 해결 방법

문제 상황Unity에서 for문을 통해 UI 버튼에 이벤트 리스너를 등록하던 중 내가 생각한 값이 아니라 이상한 값이 들어가는 현상이 생겼다. 코드상에서 원인을 찾을 수 없어서 중단점을 통해 확인해보니 메서드에 전달해준 인자 값이 계속 증가한다는 것을 확인 했다. 해당 문제를 해결하기위해 구글링을 통해서 자료를 찾아보니 람다식은 인자를 참조 해서 그 문제가 생긴다는 것을 알았다.  문제 코드 for (int i = 0; i SomeMethod(i));}AddListenr를 통해 인자 값을 넘겨줄 때는 람다식 혹은 델리게이트를 사용해 넘겨줘야하는데 람다식과 델리게이트 모두 참조형으로 값을 가지고 있기 때문에 문제가 발생했다. 해결 코드for (int i = 0; i SomeMethod(index));}..

내일배움캠프 2024.11.07

내일배움캠프: 이벤트 버스 패턴 (Event Bus Pattern)

이벤트 버스 패턴이란?이벤트 버스는 발행자(Publisher)와 구독자(Subscriber) 사이에서 중간 매개체(hub) 역할을 하는 패턴이다.  예를 들어, 이벤트 버스는 기사를 발행하고 이를 구독자에게 전달하는 신문사라고 생각하면 된다.신문사가 없다면 발행자가 직접 기사를 작성해 구독자들에게 전달해야 하지만, 신문사(이벤트 버스)를 통해 기사를 발행할 수 있게 된다. 즉, 구독자는 발행자가 누구인지 알 필요가 없고, 발행자도 구독자의 정보를 알 필요가 없어진다. 다만, 이벤트 버스를 통해 신문의 발행과 구독이 이뤄지기 때문에 약간의 비용이 발생할 수 있다. 일종의 수수료라고 생각하면 된다.  또한, 신문사를 통해 모든 발행과 구독이 이뤄지고 있다. 즉, 모든 기사(이벤트)의 중심이 신문사(이벤트버스..

내일배움캠프 2024.11.02

내일배움캠프: 유니티 JsonUtility을 활용한 데이터 저장 및 불러오기

JSON 간단 개념  JsonUtility를 사용해보자유니티 엔진은 json을 활용해 데이터를 저장하고 불러오는 작업을 손쉽게 할 수 있도록 JsonUtility 를 제공하고 있다. JsonUtility는 사용자가 Json 형식으로 데이터를 다루는 것을 편리하게 할 수 있게 해준다. JsonUtility 사용법1.   JSON 데이터에 저장할 변수 -유니티에서는 구조화된 Json의 개념을 중심으로 json 직렬화 기능을 설계 했다고 한다.  덕분에 JsonUtility를 통해 클래스나 구조체 형태로 데이터를 쉽게 JSON으로 직렬화하고 역직렬화가 가능하다. 예를 들어, 플레이어의 데이터를 저장하려면 PlayerData라는 클래스를 만들고, 그 안에 이름,스탯 등의 속성을 정의 해주면 된다.[System...

내일배움캠프 2024.11.01

내일배움캠프: 코루틴을 사용한 지속 회복 포션 구현

동기 / 비동기 코루틴을 사용하기 전에 동기 비동기 개념에 대해서 알고가면 좋다. 동기 방식은 작업이 순차적으로 진행되는 방식이다. 현재 작업이 끝나지 않으면 다음 작업은 시작되지 않으며 반드시 이전 작업이 완료된 후에 수행된다. 비동기 방식은 병렬적으로 작업을 진행하는 것 처럼 보이는 방식이다. 하지만 실제로는 작업의 시작과 종료 시점을 독립적으로 관리하는 방식으로 병렬방식과는 차이가 있다. 하나의 작업이 끝나지 않더라도 새로운 작업 요청이 들어오게 되면 그 작업을 시작한다. 각각의 작업은 완료되는 대로 개별적으로 결과를 처리하므로, 동시에 여러 작업이 진행될 수 있다.  코루틴은 그럼 비동기?? 코루틴은 비동기로 위장한 동기 방식이다. 코루틴은 실제로는 비동기적 처리가 아니라, 특정 작업을 나누어 순..

내일배움캠프 2024.11.01

내일배움캠프: 유니티 3D에서 Ray와 Raycast로 충돌 감지하기

Ray란 ? 유니티에서 광선을 쏘는 방식으로 사용되며, 주로 물체간의 충돌을 감지하거나 특정 방향으로의 시야를 확인할 때 사용된다.기본적으로 Ray는 원점에서 시작해 특정 방향으로 나아가는 선을 만들기위해 필요한 정보이다.  Raycast 함수를 통해 이 광선과 충돌하는 물체를 감지할 수 있다.Ray 생성자Ray ray = new Ray(Vector3 origin, Vector3 direction);​  Ray는 원점(origin)과 방향(direction)이라는 두 개의 프로퍼티로 이루어져 있으며, ray 객체를 생성할 때 원점과 방향을 인자로 전달하여 생성한다. 출처:https://docs.unity3d.com/ScriptReference/Ray.html 생성한 Ray를 사용해보자  ray를 생성하는..

내일배움캠프 2024.10.30

내일배움캠프: InputSystem Rebinding (인풋시스템을 활용한 키 리바인딩)

오늘 공부한 내용📝오늘은 Unity Input System에서 리바인딩을 적용하는 방법에 대해 학습했다. 인풋시스템 내부 메서드를 활용한다면  쉽게 리바인딩이 가능하다는 것을 깨달았다.인풋 시스템 리바인딩리바인딩 단계바인딩 키 등록:InputAction 객체를 생성하고, 각 Action에 필요한 초기 키 바인딩을 설정한다.(Input Action을 생성해 그 안에다 정의하거나 스크립트를 통해 정의)리바인딩 설정:[ InputAction  객체명].PerformInteractiveRebinding() 메서드를 사용해 특정 Action에 대해 리바인딩을 시작한다.WithControlsExcluding("")와 같은 설정으로 특정 장치를 제외할 수도 있다.리바인딩 비활성화 및 재작업:InputAction.D..

내일배움캠프 2024.10.25

내일배움캠프: AnimationCurve

오늘 공부한 내용📝오늘은 애니메이션 커브를 이용한 유니티 3d프로젝트에서 낮과 밤을 표현하는 방법에 대해 공부했다. 애니메이션 커브는 쉽게 말해 수학적 사고를 곁들인 애니메이션이라고 생각하면 될 것 같다. 기술적으로 접근한다면 애니메이션 커브는 시간에 따른 값의 변화를 부드럽게 조정할 수 있는 기능이다. 애니메이션 커브 애니메이션 커브는 시간(Time)을 x축으로, 값(Value)를 y축으로 설정한 그래프로 표현 된다.애니메이션 커브의 특징시간과 값의 관계:애니메이션 커브에서 x축은 시간(Time), y축은 해당 시간에서의 값(Value)을 나타냅니다.예를 들어, 낮과 밤을 표현하는 프로젝트에서는 낮 시간이 지나면서 태양의 밝기가 점점 줄어드는 자연스러운 변화를 커브로 설정이 가능하다. 부드러운 값 변..

내일배움캠프 2024.10.24

내일배움캠프: 딕셔너리에서 데이터가 찾아지는 과정

오늘 공부한 내용📝오늘은 자료구조 특강을 듣는 중 딕셔너리에서 데이터를 찾는 방법에 대해 학습했다. 튜터님께서 해당 내용에 관한 TIL을 작성하면 피드백을 주신다고하셔서 기회다 생각하고 해당 내용에 대해 공부해보고 글로 정리하는 시간을 가져보았다.  Q1. 딕셔너리에서 데이터를 찾는 연산의 시간 복잡도는 ?그렇다면 그 이유는?🤔시간 복잡도 딕셔너리에서 데이터를 찾는 연산의 시간 복잡도 평균적으로 O(1)이고 최악의 경우는 O(n)이다 .이유:딕셔너리는 Key값을 내부 함수로 변환 해 해시코드를 생성한 후 이를 배열의 크기로 나눠준다. 그리고 그 값이 배열의 인덱스가 된다.이때, 배열의 인덱스가 중복되지 않으면 값을 바로 찾기 때문에 평균 시간 복잡도는 O(1)이 된다.그러나 배열의 인덱스가 중복되면 ..

내일배움캠프 2024.10.23