본문 바로가기

전체 글41

[게임 디자인 패턴] 오브젝트 풀 패턴 // 유니티로 배우는 게임 디자인 패턴 제 2판 (데이비드 바론, 구진수) 을 기준으로 작성되었습니다.참고자료 : https://docs.unity3d.com/kr/2022.1/ScriptReference/Pool.ObjectPool_1.html 개요  많은 게임들의 화면 속에서는 수많은 객체들이 각자 행동하고, 상호작용하는 모습들을 볼 수가 있다. 투사체가 이리저리 날아다니거나, 다양한 파티클 효과가 터지고, 갑자기 수많은 적의 무리가 덮칠 수도 있다.    다양한 객체를 효과적으로 다루기 위해서는 오브젝트 풀 패턴이 사용된다.    오브젝트 풀 패턴은 자주 사용되는 요소를 위해 일부 메모리를 예약한다. 최근 사라진 객체를 메모리에서 없애지 않고, 다시 사용할 수 있도록 오브젝트 풀에 추가한다. 이를 .. 2024. 9. 10.
[ML-Agents] 유니티에 ML-Agents 적용하기 // 파이토치와 유니티 ML-Agents로 배우는 강화학습 책에 대한 공부 요약 글입니다.  개요   유니티에서 ML-Agents를 활용해 강화학습을 진행하려면, 학습을 진행할 환경을 구축할 수 있어야 한다. 본 글에서는 환경 구축에 필요한 과정, 특히나 유니티에 ML-Agents를 적용하는 과정에 대해 알아본다.  파이썬 설치 / 유니티 설치 버전 확인하기  책이나 ML-Agents 공식 문서에서 권장하는 버전은 생각보다 잘 동작하지 않았다. 본 글에서는 시행착오 끝에 다음 버전을 사용한다.Python : 3.9.13Unity : 2022.3.28f1ml-agents : 0.30.0ml-agents-envs : 0.30.0PyTorch : 2.4.0numpy : 1.12.1 깃허브에서 ML-Agents.. 2024. 8. 22.
[ML-Agents] ML-Agents 구성 요소 알아보기 - Agent Script // 파이토치와 유니티 ML-Agents로 배우는 강화학습 책에 대한 공부 요약 글입니다. 개요  ML-agents의 구성 요소를 간단하게 살펴보고, 그 중 Agent 스크립트의 구성요소에 대해 알아본다.       Agent Script - Max Step  Max Step은 한 에피소드의 최대 스텝 수를 결정하는 값이다. Max Step이 5000으로 설정되어 있으면, 5000스텝이 지나야 한 에피소드가 종료된다. 에피소드 (Episode) : 에이전트가 어떠한 환경 내에서 행동을 시작하고, 특정한 조건을 만족하거나 목표에 도달하여 행동이 끝날 때 까지의 여정 하나를 하나의 에피소드라고 부른다.   Agent Script 의 주요 함수 - Initialize public override void.. 2024. 8. 14.
[ML-Agents] ML-Agents 구성 요소 알아보기 - Behavior Parameters // 파이토치와 유니티 ML-Agents로 배우는 강화학습 책에 대한 공부 요약 글입니다. 개요  ML-agents의 구성 요소를 간단하게 살펴보고, 그 중 Behavior Parameter 컴포넌트의 구성요소에 대해 알아본다.      ML-Agents 의 구성 요소  ML-Agents 예제 3D Ball의 3DBall의 Agent를 클릭하면, 인스펙터에서 다음과 같은 컴포넌트들을 찾아볼수 있다.Behavior ParametersBall 3D AgentDecision RequesterModel Overrider Behavior Parameters  Behavior Parameters는 학습에 필요한 여러가지 파라미터들을 관리하는 컴포넌트다. Behavior Parameters는 다음과 같은 구성 요소들.. 2024. 8. 9.
[게임 디자인 패턴] 커맨드 패턴 // 유니티로 배우는 게임 디자인 패턴 제 2판 (데이비드 바론, 구진수)에 대한 공부 요약 글입니다.  개요이번 글에서는 커맨드 패턴에 대해서 공부하고, 예제를 통해 이해해보자. 커맨트 패턴의 매커니즘은 플레이어 컨트롤러 입력과 그에 해당하는 타임스탬프를 기록한다.커맨드 패턴을 사용하여 게임의 리플레이 기능을 구현해보자. 커맨드 패턴 이해하기불을 끄고 키는 기능을 구현하기몇 가지 대안 살펴보기 커맨드 패턴이란,커맨드 패턴(Command Pattern)은 디자인 패턴 중 하나로, 요청을 캡슐화하여 객체로 만드는 디자인 패턴이다. 이를 통해 서로 다른 요청을 사용자가 선택적으로 사용할 수 있도록 하거나, 요청의 큐잉 및 로깅, 되돌리기(undo) 기능 등을 쉽게 구현할 수 있다. 커맨드 패턴의 구성 요소는.. 2024. 8. 5.
[게임 디자인 패턴] 이벤트 버스 // 유니티로 배우는 게임 디자인 패턴 제 2판 (데이비드 바론, 구진수)에 대한 공부 요약 글입니다. 개요이벤트 버스는 객체가 구독하거나 게시할 수 있는 특정한 전역 이벤트의 목록을 관리하는 중앙 허브 역할을 한다.이벤트 관리와 관련된 가장 간단한 패턴이며, 한 줄의 코드로 객체에 구독자 혹은 게시자의 역할을 할당하는 과정을 줄인다.빠른 결과가 필요할 때 유용한 디자인 패턴이다. (빠른 프로토타이핑이 필요할 때 유용하다!)복잡한 이벤트 타입 / 구조체를 다루지 않을 때 아주 유용하다.게시자(Publisher)가 이벤트를 발생하면, 게시자로부터 구독자(Subscriber)가 받을 수 있는 신호를 보내게 된다. 해당 신호는 구독자들만 받게 되며, 어떻게 처리할지 결정한다. 해당 과정의 중심에는 이벤트 버스.. 2024. 7. 16.
[게임 디자인 패턴] 상태 패턴 // 유니티로 배우는 게임 디자인 패턴 제 2판 (데이비드 바론, 구진수) 을 기준으로 작성되었습니다.참고자료 : https://unity.com/kr/how-to/develop-modular-flexible-codebase-state-programming-pattern 개요 - 상태 패턴 State Pattern 게임이 진행되면서, 게임 속의 존재(Entity)들은 저마다의 상태가 존재한다.예를 들어, 플레이어 캐릭터는 다음과 같은 상태들이 존재할 수 있다.가만히 서있는 Idle 상태입력을 받아 움직이는 Move 상태더 빠르게 움직이는 Dash 상태점프하는 Jump 상태... 게임 속 존재들의 상태들을 관리하고, 내부적으로 동작하도록 제어하기 위해서 사용하는 디자인 패턴이 바로 상태 패턴이다.상태 패.. 2024. 7. 10.
[게임 디자인 패턴] Singleton Pattern // 유니티로 배우는 게임 디자인 패턴 제 2판 (데이비드 바론, 구진수) 을 기준으로 작성되었습니다. 싱글턴 패턴 Singleton Pattern유니티 개발자들 사이에서 가장 널리 사용되는 패턴인 싱글턴 패턴. 특정 인스턴스의 유일성을 보장한다.싱글턴 패턴에 의해 초기화된 이후에는, 런타임 동안 단 하나의 인스턴스만 메모리에 존재한다. 주로 게임 매니저와 같은 매니저 클래스들이 싱글턴으로 구현된다.씬 사이를 드나들면서도, 매니저 클래스들은 사라지지 않고 존재하며, 덕분에 다른 씬에서의 정보도 그대로 가져갈 수 있다. 즉, 여러 씬이나 스크립트에서 동일한 데이터를 공유하고 접근하므로 데이터의 일관성이 만들어진다!예를 들어, 1번 씬에서 플레이어의 골드가 50이 되었다면, 2번 씬으로 이동한 뒤에서 플레이.. 2024. 7. 3.
[DevLogs] 구체 플레이어 구현 - 2, 이동, 공격, 애니메이션 이동 코드의 개선저번에 구현했던 구체 형태 플레이어의 이동방식은 AddForce로 구현한 매우 간단한 형태였다.따라서 조작에 여러모로 불편한 부분들이 많았는데, 그 중 가장 큰 단점은 바로 조작감이다.조작이 어려운 게임을 만들고 싶진 않았기 때문에, 더 간단한 조작을 위하여 CharacterController 컴포넌트를 사용하기로 했다.  private void Move() { float horizontal = Input.GetAxis("Horizontal"); float vertical = Input.GetAxis("Vertical"); //if(horizontal == vertical) RigidbodyReset(); direction = .. 2024. 6. 7.
[DevLogs] 구체 로봇 플레이어 만들기 - 아이디어와 기본 이동 "파괴" 를 바탕으로 만드는 게임에 어울리는 플레이어 캐릭터지금 진행하고 있는 프로젝트의 메인 키워드는 "파괴" 다. 플레이어나 지형지물의 Mesh가 게임 진행에 따라 파괴되는 점이 부각되는 메카 게임을 만들고 있었다.문득, 지금 이 플레이어의 형태나, 나아가서 게임의 구조 자체가 "파괴" 라는 키워드를 제대로 살리지 못하고 있는 것 같다. 좀 더 빠르고 활동적인 플레이어를 만들고 싶었는데, 마음에 드는 메카 애니메이션 리소스를 찾는 것이 여간 쉬운 일이 아니여서 계속 고민을 하고 있었다. 타협에 타협에 타협을 하다보니... 결국 본래 원하던 방향과는 너무나 멀어진 것. "파괴" 라는 핵심에서 멀어지는 것만 같았다. 그러던 도중, 과거에 취해 옛날에 들었던 노래들을 듣고 있었다.마이클 사이런스의 "Rec.. 2024. 5. 28.