개발 프로젝트 (23) 썸네일형 리스트형 Unity 강화 학습 ML-Agent(4) - Chase AI MeetAgain 프로젝트에서 제작할 AI 모델은 2종류입니다. Chase AI : Target을 향해 불확실하게 향해 가는 AI Stay AI : Target 주위를 벗어나지 않는 AI 이번 게시글에선 Chase AI 모델의 생성 과정을 작성하겠습니다. Chase AI Chase AI는 Ml-Agent에서 가장 기본적인 추적 Agent입니다. 강화학습의 원리와, Ml-Agent의 사용법 그리고 Reward의 설정을 익히기 위해 가장 기본적인 모델부터 구현 시작했습니다. Chase Agent 스크립트는 CollectObservations() 함수를 통해 관찰 정보를 조절하거나 OnActionReceived() 함수에서 SetReward() 함수를 통해 보상을 조절하며 개선했습니다. 아래는 Chase AI.. Unity 강화 학습 ML-Agent (3) - GitBash로 학습 진행 이번 게시글에선 GitBash를 통해 Ml-Agent를 작동하여 신경망 모델을 제작하겠습니다. Ml-Agent가 Pytorch의 딥러닝 모델을 활용하는 과정은 아래와 같습니다. 환경 설정: ML-Agents로 훈련하려는 환경을 설정. Unity에서 에이전트들이 상호 작용하는 게임 환경이나 시뮬레이션을 구성합니다. 에이전트 정의: 각 에이전트는 훈련되어야 할 개체를 나타냅니다. 에이전트는 환경과 상호 작용하며 관찰(observation)을 수집하고, 행동(action)을 수행합니다 결정 주기: 학습된 에이전트는 환경에서 일정 주기마다 행동을 선택해야 합니다. 이 결정 주기는 DecisionRequester 등의 메커니즘을 사용하여 관리됩니다. 모델 학습: ML-Agents는 강화 학습 알고리즘을 사용하여 .. Unity 강화학습 ML-Agent (2) - Agent 클래스와 딥러닝 구조 이번 게시글에선 Ml-Agent의 Agent 클래스에 대해 설명하며, Feature Vector를 활용하는 딥러닝의 구조에 대해 작성하겠습니다. Agent 클래스를 상속받는 클래스는 최소 3개의 함수로 구성됩니다. 1. Ml-Agent FrameWork의 Agent 클래스를 상속하는 클래스 A작성 public class ButterflyAgentChase : Agent { void Start() { ... } //Update는 사용하지 않습니다. } 2. Agent 클래스의 OnEpisodeBegin을 override하여 새로운 Episode가 시작될 때 환경의 초기값 설정 // In Agent Class . . /// /// Implement `OnEpisodeBegin()` to set up an A.. Unity 강화학습 ML-Agent (1) - Meet Again Unity를 통해 3D 공간 설계에 집중한 프로젝트를 진행하고 있습니다. 머신 러닝을 사용하는 Ml_Agent 강화학습을 활용하여 나비 오브젝트가 특정 오브젝트 주위를 맴도는 학습 AI를 제작하려고 합니다. 머신 러닝이란 명시적인 프로그램 없이 컴퓨터가 스스로 배우는 능력을 연구하는 분야를 뜻합니다. Ml-Agent는 Machine Learning Agent의 약어로 Unity에서 머신러닝을 간단하게 수행시킬 수 있는 도구입니다. ML Agent의 주요 구성 요소와 개념은 다음과 같습니다: 에이전트(Agent): ML Agent의 핵심이며 의사 결정을 내리고 행동하는 주체입니다. 강화학습에서는 에이전트가 환경과 상호 작용하며 경험을 통해 학습합니다. 환경(Environment): 에이전트가 상호 작용하는.. WeaponGameProject - Weapon 클래스 설계 (3) (Bash와 상호작용하는 Weapon의 상태 구현 - 2) 바로 직전의 포스팅을 보았는데 글의 규모가 너무 넓고 집중이 되지 않았습니다. 기술의 핵심만을 작성하는 기술을 연습 해보겠습니다. 고로 오늘은 짧게 작성하겠습니다. 지난 포스팅에서 작성한 Weapon에 1가지 상태를 추가할 것입니다. 예전에 포스팅한 동영상에서 눈치채신 분들도 있겠지만, Weapon의 상태는 1가지 더 존재합니다. 무기가 노랗게 빛나는 상태. Weapon의 BashTrigger가 준비되었습니다. Bash 기술을 사용하여 WeaponDetectCollider가 생성되었을 때 플레이어 주변의 Weapon들은 CanBash 상태가 됩니다. 하지만 많은 무기들 중에 플레이어가 원하는 무기를 선택할 수 있어야겠지요. 원하는 무기를 선택하기 위해선 조준선이 필요했습니다. 조준선은 SphereCast.. WeaponGameProject - Weapon 클래스 설계 (2) (Bash와 상호작용하는 Weapon의 상태 구현) 오늘은 Weapon Class에 상태를 추가하겠습니다. 게임의 핵심이 되는 기술인 Bash와 Weapon이 상호작용하여 Weapon의 상태를 변화하는 것입니다. Bash 기술은 Player 기준으로 일정 범위 안의 Weapon을 스캔하여 Weapon의 Position으로 도약하는 기술입니다. Bash 기술은 다음을 요구합니다. 1. Player에게 부착되어 Weapon을 감지하는 Collider가 필요함. 2. 1의 Colldier의 부피가 Bash Key Input이 홀드된 상태면 부피가 증가해야함 3. Weapon이 1의 Colldier와 상호작용하여 상태 변환이 일어나야함 먼저 1번을 수행할 WeaponDetectCollider 클래스를 설계합니다. using System.Collections; u.. WeaponGameProject - Weapon 클래스 설계 (1) (SphereCast를 활용하는 감지 클래스) 이번에 소개할 클래스는 Bash 기술의 목표가 될 무기(Weapon)와 관련된 클래스입니다. 완성 예시 동영상 Weapon Class는 다음을 요구합니다. 1. Weapon의 상태(던져진 상태 , 획득 가능 상태)를 관리할 클래스가 존재해야함 2. Weapon은 플레이어가 감지하여 무기를 획득할 수 있어야 함. 가장 먼저 Weapon Class를 구현하여 상태를 관리합니다. using Retro.ThirdPersonCharacter; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; public class Weapon : MonoBehaviour { [Serial.. WeaponGameProject - Player 클래스 설계 (3) (bool 타입을 통한 플레이어 상태 구현) 이번에 소개할 Combat Class는 플레이어의 상태 Bool타입으로 관리하는 클래스입니다. 그런데 왜 Bool 타입으로 상태 클래스를 설계했는지 질문 하신다면, 정확한 지적입니다. 이 클래스는 잘못 설계되었습니다. 지금까지 RPG 게임을 제작해보지 않았던 저에겐 Bool 타입으로 상태를 관리한다는게 어떤 후폭풍을 낳는지 몰랐습니다. 먼저 Combat 클래스에 대해 설명하겠습니다. 이 클래스는 플레이어의 전투 상태(Combat)를 관리하는 클래스입니다. 왼쪽 마우스를 입력하면 기본 공격 오른쪽 마우스를 입력하면 무기 던지기 왼쪽 쉬프트를 입력하면 Bash를 시전합니다. Combat Class는 3가지 행동을 모두 구현하는 것이 아닌 공격과 Bash를 Trigger하는 클래스입니다. Bash , 기본 공.. 이전 1 2 3 다음