top of page
Writer's picturexsplaystation5

Unity Machine Learning - ML-agent

Updated: Oct 16, 2023

---------------------------------------------------------------------------------------------------------

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 เพื่อนที่เฉลาดขึ้น

1 view0 comments

Recent Posts

See All

Comments


bottom of page