in RollerBall/Assets/RollerAgent.cs [72:113]
public override void OnActionReceived(float[] vectorAction)
{
// Actions, size = 2
Vector3 controlSignal = Vector3.zero;
controlSignal.x = vectorAction[0];
controlSignal.z = vectorAction[1];
rBody.AddForce(controlSignal * speed);
// Rewards
float distanceToTarget = Vector3.Distance(this.transform.localPosition, Target.localPosition);
// float distanceToObstacle = Vector3.Distance(this.transform.localPosition, Obstacle.localPosition);
// Reached target
if (distanceToTarget < 1.42f)
{
if (IsSimulationMode()) SaveLog(1);
SetReward(1.0f);
EndEpisode();
return;
}
// Collided with obstacles
foreach (var actor in obstacle.obstacleObjs)
{
float distanceToActor = Vector3.Distance(this.transform.localPosition, actor.transform.localPosition);
if (distanceToActor < 1.42f)
{
if (IsSimulationMode()) SaveLog(2);
SetReward(-1.0f);
EndEpisode();
break;
}
}
// Fell off platform
if (this.transform.localPosition.y < 0)
{
if (IsSimulationMode()) SaveLog(3);
SetReward(-1.0f);
EndEpisode();
}
}