Github : Unity ML-Agents Toolkit
---------------------------------------------------------------------------------------------------------
Install
cmd->
py-> exit() ->
cd c:\Unity\MLAgents_intro->
py -m venv venv-> // สร้าง Folder แยก
venv\Scripts\activate->
python -m pip install --upgrade pip-> อัพเดต pip
pip install torch==2.1.0 -f https://download.pytorch.org/whl/torch_stable.html -> "use Vesrion ? from Document" Python AI Library
pip install mlagents --use-feature=2020-resolver -> Unity AI Library
mlagents-learn --help -> ดูว่า ml มี Fun อะไรบ้าง
---------------------------------------------------------------------------------------------------------
Reinforcement Learning
Observation สังเกต
-> ->
REWARD รางวัล DESCISON ตัดสินใจ
<- <-
ACTION กระทำ
---------------------------------------------------------------------------------------------------------
Code Sample
Agent move to Target
using Unity.MLAgents;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
using UnityEngine;
public class MoveToGoalAgent : Agent
{
[SerializeField] private Transform targetTransform;
[SerializeField] private Material winMaterial;
[SerializeField] private Material loseMaterial;
[SerializeField] private MeshRenderer floorMeshRenderer;
// รีเซ็ต Agent Postition and Target Position
public override void OnEpisodeBegin()
{
transform.localPosition = new Vector3(Random.Range(-3f, +1f), 0, Random.Range(-2f, 2f));
}
//การสังเกต Transform และ targetTransform
public override void CollectObservations(VectorSensor sensor)
{
sensor.AddObservation(transform.localPosition);
sensor.AddObservation(targetTransform.localPosition);
}
//การกระทำต่อ this.transform การเคลื่อนที่เอง
public override void OnActionReceived(ActionBuffers actions)
{
float moveX = actions.ContinuousActions[0];
float moveZ = actions.ContinuousActions[1];
float moveSpeed = 3f;
transform.localPosition += new Vector3(moveX, 0, moveZ) * Time.deltaTime * moveSpeed;
}
//การควบคุมการเคลื่อนที่โดยผู้เล่น
public override void Heuristic(in ActionBuffers actionsOut)
{
ActionSegment<float> continuousActions = actionsOut.ContinuousActions;
continuousActions[0] = Input.GetAxisRaw("Horizontal");
continuousActions[1] = Input.GetAxisRaw("Vertical");
}
//ให้ผลตอบแทนที่ Agent ทำงานว่า + หรืบ -
private void OnTriggerEnter(Collider other)
{
if(other.TryGetComponent<Goal>(out Goal goal))
{
SetReward(+1f);
EndEpisode();
}
if(other.TryGetComponent<Wall>(out Wall wall))
{
SetReward(-1f);
EndEpisode() ;
}
}
}
---------------------------------------------------------------------------------------------------------
IDEA
-AI ENEMY ที่ใช้โจมตี Player
-- การโจมตีไปในทิศทางที่ player กำลังจะไป
-- การเลือกสกิลที่ใช้โจมตี
-- การหาจุดบอดของผู้เล่น
-การควบคุม Animation ตัวละคร
-NPC AI ระบบควบคุม AI เพื่อนที่เฉลาดขึ้น
Comments