전체 글120 C#에서 float 형 random 이 없는 이유와 그래도 필요하다면? C#으로 게임이나 시뮬레이션 코드를 작성하다 보면, 종종 이런 고민을 하게 됩니다.“int 랜덤은 있는데, 왜 float 랜덤은 없지?”Random.Next()처럼 간단하게 쓸 수 있는 NextFloat() 같은 함수가 있으면 좋을 것 같은데, C# 기본 Random 클래스에는 그런 함수가 존재하지 않습니다.이 글에서는 그 이유와, 실제로는 float 랜덤을 어떻게 만들어 써야 하는지 정리해 보겠습니다. 1. float 랜덤이 없는 이유C#의 Random 클래스는 .NET 초창기부터 설계된 타입입니다. 이때 “실수 난수”를 표현하는 기본 타입으로 double이 선택되었습니다. 그래서 지금도 실수 난수는 무조건 NextDouble() 하나만 제공합니다.정수 계열 • int Next() • int Next(.. 2025. 11. 16. C# 에서 static GameData 클래스 설계 예시 이번 글에서는 StageData 구조체와 GameData 정적 클래스를 이용해 게임의 스테이지 설정 데이터를 관리하는 코드를 어떻게 구성했는지 설명합니다. 아래 예시 코드를 기준으로 세부 개념을 정리합니다.public struct StageData{ public int ballSpeed; public int blockRow; public int blockColumn; public int blockWidth;}internal static class GameData{ public static StageData[] stageData; public static int StageIndex { get; set; } public static StageData CurrentStag.. 2025. 11. 15. Data 관리 클래스를 static 으로 만들어야 하는 이유 1. 초기 구조의 한계처음에는 다음과 같이 게임 규칙과 로직이 모두 MainForm 안에 포함되어 있었습니다.public partial class MainForm : Form{ int stageIndex = 0; StageData[] stageData = new StageData[3]; int ballSpeedX = 7; int ballSpeedY = 7; int blockRow = 3; int blockColumn = 5; int blockWidth = 100;} 이 구조에서는 다음과 같은 문제가 발생합니다.스테이지 데이터와 게임 로직이 섞여 있어 가독성이 저하됩니다.Stage 관련 정보를 수정하려면 반드시 MainForm 내부를 수정해야 합니다.다른 화면(Form.. 2025. 11. 15. Unity의 FixedUpdate, Update, LateUpdate 완전 이해 1. 세 가지 함수의 역할 * FixedUpdate() - 물리 연산 루프 (Time.fixedDeltaTime 간격) Rigidbody 이동, AddForce, 충돌 계산 * Update() - 프레임 루프 (모니터 주사율 기준) 입력 처리, 일반 Transform 이동 * LateUpdate() - 렌더 직전 카메라 추적, 후처리, 위치 보정 2. 실행 순서 요약FixedUpdate (0~N회) → Update → LateUpdate → RenderUnity는 물리 루프(FixedUpdate) 와 그래픽 루프(Update) 를 분리해서 서로 다른 속도로 독립적으로 실행합니다. * FixedUpdate() : 일정한 물리 시간 단위로 반복 * Update() : 프레임마다 한 번씩 * L.. 2025. 10. 31. Cinemachine Camera : Dead Zone, Hard Limits, Damping Unity를 사용하다 보면 Inspector 창에 작게 붙어 있는 ‘?’ 마크를 본 적이 있을 겁니다.평소엔 무심코 지나치기 쉬운 이 아이콘, 사실은 Unity 공식 매뉴얼 페이지로 바로 연결되는 기능입니다. 최근에 저는 Cinemachine Camera 의 Position Control 설정을 확인하던 중, ? 버튼을 눌러봤더니 해당 항목의 공식 문서가 브라우저에 바로 열리는 것을 확인했습니다. 덕분에 번거롭게 검색하지 않고도, 정확한 설명을 빠르게 확인할 수 있었습니다. Position Control : Position Composer Position Control 은 Tracking Target (추적 대상) 을 화면에서 어떤 위치에 둘 것인지 결정하는 기능입니다. 여기에는 여러 가지 선택할 수 .. 2025. 7. 27. Dictionary 에서 구조체를 TValue 로 사용시, 주의할 점 구조체는 스택 메모리에 생성되기 때문에 값 복사가 일어납니다. 그리고 이로 인해 몇 가지 주의해야 할 점이 있는데, Dictionary 에서는 이 부분이 특히 더 민감하게 작동합니다. 이번 글에서는 이와 관련해서 자세히 설명해 보겠습니다. 구조체는 값 복사다음과 같은 코드가 있다고 가정해 보겠습니다. 그리고 "쌍검" 의 수량을 +1 증가하는 코드를 작성해 보려고 합니다. struct Item{ public string name; public string desc; public int price; public int quantity; public float weight;}// Dictionary 선언Dictionary itemTable = new Dictionary();/.. 2025. 7. 24. 이전 1 2 3 4 ··· 20 다음