본문 바로가기

분류 전체보기142

C#에서 튜플(Tuple)이란? 튜플은 C# 7.0 부터 지원하는 여러 값 (최대 7개) 을 한 번에 묶어서 저장할 수 있는 구조입니다.최대 7개의 값을 다룰 수 있으며, 별도의 타입 정의 없이 간단하게 여러 값을 하나로 다룰 수 있다는 것이 특징입니다. ValueTuple 은 구조체 // 실제 소스 일부 (System.ValueTuple.cs)public struct ValueTuple{ public T1 Item1; public T2 Item2; // …} 코드에서 보면 알 수 있듯이, 내부는 단순한 구조체 입니다. 그럼 언제, 어떻게 쓰이는지 알아보겠습니다. 기본 사용법튜플은 직접 ValueTuple로 선언할 수도 있고, 간편하게 var를 사용할 수도 있습니다.// 1. 명시적 타입 지정ValueTuple stu.. 2025. 7. 9.
Unity 에서 Serializable 사용 예 Unity에서 사용자 정의 클래스나 구조체를 인스펙터에 보여주고 싶을 때 반드시 알아야 할 키워드가 바로 [System.Serializable]입니다. 이 키워드는 Unity의 직렬화(Serialization) 시스템에 해당 타입을 등록하겠다는 선언입니다. 언제 필요할까?Unity는 기본적으로 public 필드나 [SerializeField]가 붙은 필드만 인스펙터에 노출합니다. 그런데 그 필드가 클래스나 구조체일 경우, Unity는 내부 내용을 자동으로 보여주지 않습니다. 이때 [System.Serializable]이 있어야 내부 값들도 인스펙터에서 펼쳐서 볼 수 있게 됩니다. 예제 코드using System;[Serializable]public class DropInfo{ public float.. 2025. 7. 3.
오브젝트를 태그로 찾고자 할 때 : FindWithTag() FindWithTag() 은 유니티에서 특정 태그를 가진 오브젝트를 찾을 때, 사용하는 함수입니다.그런데, FindGameObjectWithTag() 라는 함수도 존재합니다.결론부터 말씀드리자면, 두 함수는 결국 같은 기능을 합니다. 내부 구현public static GameObject FindWithTag(string tag){ return FindGameObjectWithTag(tag);} Unity 엔진 내부에서 FindWithTag()는 결국 FindGameObjectWithTag()를 호출합니다.그리고 이 FindGameObjectWithTag()는 unsafe 키워드가 붙은, Unity의 엔진 내부 함수입니다. 즉, FindGameObjectWithTag()는 존재하긴 하지만 문서화되지.. 2025. 7. 2.
유니티에서 yield break 와 코루틴에서 제거되는 시점 Unity에서 코루틴은 IEnumerator 객체를 통해 실행되며, Unity는 이 객체들을 내부적으로 리스트에 등록하여 매 프레임마다 검사하고 실행 조건이 충족되면 이어서 실행합니다. yield break 란?yield break는 코루틴 내부에서 즉시 실행을 종료하는 명령어입니다.이것이 실행되면 Unity는 해당 코루틴을 더 이상 실행하지 않도록 처리하며, 코루틴 리스트에서 안전하게 제거합니다.IEnumerator MyRoutine(){ Debug.Log("Start"); if (SomethingWrong()) { Debug.Log("문제 발생 → 코루틴 중단"); yield break; } yield return new WaitForSeconds.. 2025. 7. 2.
구조체 배열 선언 시, 메모리에서 일어나는 과정 구조체 배열을 선언하면 메모리 관점에서 어떤 일이 발생하는지 그 과정에 대해 한번 알아보겠습니다. 배열 선언과 초기화 그리고 내부 동작 먼저, 다음과 같은 예제 코드가 있다고 해보겠습니다.public struct StageData{ public int ballSpeed; public int blockColumn; public int blockRow;}StageData[] arr = new StageData[5]; • new 로 StateData 구조체를 크기 5 인 배열로 선언합니다. • StageData[]는 참조 타입 (배열은 참조 타입입니다.) 이므로 힙에 5개짜리 배열 공간이 생성됩니다. • 그리고 StageData는 구조체(값 타입) 이므로, 배열 안에는 구조체가 들어.. 2025. 7. 2.
물체를 목표 지점에 정확히 도착시키는 방법 마우스를 클릭해서 그 위치까지 캐릭터를 이동시키고 나면, 캐릭터가 목표를 지나쳐서 멈추거나 혹은 다시 되돌아오는 현상을 한 번쯤은 경험해 보셨을 것입니다. 흔히 하는 실수transform.position += direction * speed * Time.deltaTime;if (Vector3.Distance(transform.position, targetPos) 이처럼 먼저 움직이고 나서 도착 여부를 검사하는 구조는, 프레임당 이동 거리를 예측하지 못해 목표 지점을 쉽게 지나쳐버립니다. 결국 도착 판별은 따로 하고, 다시 위치를 조정하는 등의 간결하지 못한 코드가 되버립니다. 해결 방법 : 먼저 이동 위치를 예측하자 일단 이동부터 하고 나중에 도착 판별을 하는 구조가 아니라, 이동 전에 이동하려는 위.. 2025. 7. 1.