분류 전체보기 226

유니티 프로젝트 젠킨스로 빌드 자동화

https://tpree.tistory.com/208 벡터 기초 2https://tpree.tistory.com/207 벡터 기초벡터는 크기와 방향으로 이루어졌다. 크기는 length 또는 Magnitude 라고 한다. 방향은 Normalized 로 표시한다. 왜냐하면 벡터에서 크기요소를 1로 고정해서 영향을tpree.tistory.com https://github.com/gxtxhm/VectorPracticeWithJenkins  간단하게 CI/CD를 실습해보기로 했다. 게임잡에서 요구사항이나 우대사항 중 젠킨스라는 단어가 보였기 때문이다.  빌드 및 배포 자동화라는 개념이며 뭐든 해보는 것이 중요하다 생각해 실습해보았다.  젠킨스를 위해 여러가지 설치를 하고 윈도우 계정 정보를 입력한다. 이는 젠킨스..

CI-CD/Jenkins 2025.04.10

벡터 기초 2

https://tpree.tistory.com/207 벡터 기초벡터는 크기와 방향으로 이루어졌다. 크기는 length 또는 Magnitude 라고 한다. 방향은 Normalized 로 표시한다. 왜냐하면 벡터에서 크기요소를 1로 고정해서 영향을 미치지 않게 하고 방향만을 나타낼tpree.tistory.com 이전 글에서 벡터의 특징들을 이용해 간단하게 플레이어를 쫓아오는 적을 구현했었다. 문제는 적이 플레이어를 정면으로 바라보게 되면 작동을 멈췄다.  다른 코드들을 살펴보니 직접 이렇게 구현하지않고 Angle이란 함수를 사용하는데 이 함수는 두 벡터를 입력하면 그 벡터간 각도를 리턴해주는 함수였다. 그리고 이 함수를 쓰면 정면에서도 잘 쫓아와서 Angle의 내부코드를 봤다. public static fl..

게임수학 2025.04.09

벡터 기초

벡터는 크기와 방향으로 이루어졌다. 크기는 length 또는 Magnitude 라고 한다. 방향은 Normalized 로 표시한다. 왜냐하면 벡터에서 크기요소를 1로 고정해서 영향을 미치지 않게 하고 방향만을 나타낼수 있기 때문이다. 이를 정규화라고하며, 이때의 벡터는 단위벡터라 한다.  이 벡터에서 어떠한 방향 또는 어디까지의 거리 등을 알아내기 위해서 이미 정의된 수많은 특징들이 있다.  많이 쓰이는 것들에는 빼기연산, 내적 등이 있다.  먼저 빼기연산 즉 B - A 는 A에서 B로 향하는 벡터이다. 이 벡터의 단위벡터가 a에서 b로 향하는 방향벡터가 되는것이다.  또 내적은 a의 크기 * b의 크기 * cos 이다.또는 x1*x2 + y1*y2 + z1*z2 로 표현한다.  이걸 이용하면 각도의 범..

게임수학 2025.04.01

C#으로 만드는 텍스트 Rpg (8)

미션 7: 예외 처리와 에러 로그목표: 예외 처리를 활용하여 안전한 게임 로직을 구현한다.미션:아이템 사용 시, 아이템이 없으면 적절한 예외 메시지를 출력해라.예외가 발생했을 때 에러 로그를 파일로 저장하는 코드를 작성해라. 마지막 미션이다. 예외처리를 해보고 에러 로그를 파일에 저장하는 것이다 . // ItemManagerpublic void LogError(Exception ex){ string logMessage = $"[{DateTime.Now}] 예외 발생: {ex.Message}\n{ex.StackTrace}\n"; File.AppendAllText("error_log3.txt", logMessage); Console.WriteLine("오류가 발생했습니다. 로그 파일을 확인하..

텍스트 Rpg - C# 2025.02.06

C#으로 만드는 텍스트 Rpg (7)

미션 6: 리플렉션을 활용한 동적 속성 접근목표: 리플렉션을 활용해 클래스의 정보를 탐색하고 동적으로 조작한다.미션:Player 클래스의 모든 프로퍼티와 값을 출력하는 리플렉션 코드를 작성해라.리플렉션을 활용해 Player 클래스의 체력 값을 동적으로 수정하는 코드를 작성해라.  미션6을 해결했다. 리플렉션이라는 기능을 사용해보는 것에 초점을 맞췄다. 그래서 텍스트 rpg에 필요한 기능이라기보다는리플렉션을 사용해볼 함수를 하나 만들었다.  이 리플렉션이라는 기능이 툴을 만들 때 아주 유용하게 사용되고 유니티에서는 플러그인이나 이벤트 시스템 좀 더 유연한 옵저버패턴을 만드는데 사용된다는데 아직 잘 모르겠다.  우선 리플렉션이란 컴파일타임이 아닌 런타임에 클래스의 프로퍼티, 필드, 함수 등이 뭐가 있는지 접..

텍스트 Rpg - C# 2025.02.06

C#으로 만드는 텍스트 Rpg (6)

미션 5: 람다와 LINQ목표: 람다와 LINQ를 활용해 데이터를 효율적으로 처리한다.미션:몬스터 리스트에서 체력이 가장 낮은 몬스터를 람다와 LINQ로 찾아라.아이템 리스트에서 체력 회복 아이템만 추출하는 코드를 작성해라.  LINQ는 C#에서 지원하는 sql언어 같은 것이다. 컬렉션이나 json등 여러가지 데이터에서 사용하여 데이터를 가공할 수 있는 아주 편리한 기능이다.  사용법은 sql 처럼 where, orderby, select 등을 사용할 수도 있고, 함수를 사용할 수도 있다.  이번 미션에서는 함수로 사용했다. // GameManager.cspublic List monsters;public List FindHalfHpMonster(){ return monsters?.Where(n =..

텍스트 Rpg - C# 2025.02.05

C#으로 만드는 텍스트 Rpg (5)

이번에는 기존 미션 계획 중간에 미션 4이후, 아이템 시스템에 대한 리팩토링 및 자동화 기능을 추가했다.  델리게이트를 이용해 아이템 사용시 이벤트를 발생시킬 수 있게했다. 또한 플레이어와 몬스터에도 델리게이트를 적용시켜 전투 시, 이벤트를 발생시킬 수 있도록 하였다.  아이템 시스템 자동화부분은 json 파일을 읽어와 각 아이템 클래스의 값들을 초기화하는 것이다.하드코딩되었던 부분을 json에서 읽어오도록 바꾸었다.  //public delegate void OnDead();public event Action OnDeadEvent;//public delegate void OnAttack();public event Action OnAttackEvent;플레이어와 몬스터 클래스에 모두 Action 델리케이..

텍스트 Rpg - C# 2025.02.05

C#으로 만드는 텍스트 Rpg (4)

미션4를 해결했다. 간단하게 공격과 죽었을 때의 이벤트가 발생하게끔 구현했다. 문법의 개념과 사용법 자체는 어렵지 않은 것 같다. 어떻게 설계에 사용되는지 익히면 될 것 같다. 여기선 간단하게 문장출력으로 구현했다.유니티에서는 여러가지 로직이 추가될 것 같다.  미션 4: 델리게이트와 이벤트목표: 델리게이트와 이벤트를 활용하여 게임의 상태를 관리한다.미션:체력이 0 이하가 되면 "게임 오버" 이벤트를 발생시키는 델리게이트와 이벤트를 만들어라.플레이어가 공격할 때 "공격 이벤트"를 발생시키고, 콘솔에 공격 메시지를 출력해라.몬스터가 죽으면 "몬스터 처치 이벤트"를 발생시켜라. 처음엔 delegate를 직접 커스텀해서 event를 각 player와 monster에 만들었는데, 이걸 IGameInterface..

텍스트 Rpg - C# 2025.02.03

C#으로 만드는 텍스트 Rpg (3)

세번째 미션을 해결했다. 제네릭과 인터페이스를 써보는건데, List 타입을이용해서 제너릭을 사용하고 플레이어와 몬스터에서 반드시 필요한 변수들에 대한 인터페이스를 만들었다.  미션 3: 제네릭과 인터페이스목표: Generic과 Interface를 활용하여 재사용 가능한 코드를 작성한다.미션:IGameCharacter 인터페이스를 만들고, 이름, 체력, 공격력 프로퍼티를 정의해라.Player와 Monster 클래스가 이 인터페이스를 구현하도록 수정해라.제네릭 리스트를 사용해 여러 몬스터를 관리하고, 플레이어가 몬스터를 선택적으로 공격할 수 있는 코드를 작성해라. 1. GameManager에서 몬스터를 배열로 Monster[] 로 관리한던걸 List 로 바꿨다. -> 고정된 배열대신 List를 사용. 2. ..

텍스트 Rpg - C# 2025.02.01

C#으로 만드는 텍스트 RPG (2)

두번 째 미션을 해결했다. 이번에도 우선 구현하는데 초점을 뒀고 어떻게하면 더 효율적인지 고민해봤다. 그럼에도 개선점이 있어보이지만 앞으로 유니티로 발전시키면서 개선해나갈 생각이다. 아이템기능을 추가하는 미션이었는데 리스트와 딕셔너리를 활용해 인벤토리, 아이템을 관리하는 기능을만드는 것이었다.  미션 2: 리스트와 딕셔너리를 활용한 아이템목표: List와 Dictionary를 활용해 데이터를 관리한다.미션:Item 클래스를 만들고, 이름과 효과를 프로퍼티로 추가해라.플레이어의 인벤토리를 관리하는 List을 생성해라.아이템 사용 상태를 출력하는 코드를 작성해라. 아이템 4가지의 기획이다. 아이템 종류 기획1. 체력 회복 물약이름: 생명의 물약효과: 플레이어의 체력을 50 회복.설명: "마시자마자 체내에서 ..

텍스트 Rpg - C# 2025.01.31