V2.7 Normalized state
Normalized distance and rotation state.
This commit is contained in:
@@ -63,7 +63,7 @@ public class AgentWithGun : Agent
|
||||
private string myTag = "";
|
||||
private float lastEnemyFacingDistance = 0f; // record last enemy facing minimum distance
|
||||
// scripts
|
||||
private RaySensors rayScript;
|
||||
private RaySensors raySensors;
|
||||
private CharacterController PlayerController;
|
||||
private EnvironmentUIControl EnvUICon;
|
||||
private ParameterContainer paramContainer;
|
||||
@@ -82,7 +82,7 @@ public class AgentWithGun : Agent
|
||||
EnvUICon = EnvironmentUIControlObj.GetComponent<EnvironmentUIControl>();
|
||||
targetCon = TargetControllerObj.GetComponent<TargetController>();
|
||||
hudController = HUDObj.GetComponent<HUDController>();
|
||||
rayScript = GetComponent<RaySensors>();
|
||||
raySensors = GetComponent<RaySensors>();
|
||||
PlayerController = this.transform.GetComponent<CharacterController>();
|
||||
// Environment parameters
|
||||
lockMouse = paramContainer.lockMouse;
|
||||
@@ -263,7 +263,7 @@ public class AgentWithGun : Agent
|
||||
{
|
||||
// while if attack mode
|
||||
float targetDis = Vector3.Distance(blockContainer.thisBlock.transform.position, transform.position);
|
||||
if (targetDis <= rayScript.viewDistance)
|
||||
if (targetDis <= raySensors.viewDistance)
|
||||
{
|
||||
// Debug.DrawRay(new Vector3(0,0,0), viewPoint, Color.red);
|
||||
if (Vector3.Distance(ray.origin + (ray.direction * targetDis), blockContainer.thisBlock.transform.position) <= blockContainer.thisBlock.firebasesAreaDiameter / 2)
|
||||
@@ -310,10 +310,10 @@ public class AgentWithGun : Agent
|
||||
isFacingtoEnemy = true;
|
||||
}
|
||||
}
|
||||
if (rayScript.inViewEnemies.Count > 0 && !isFacingtoEnemy) {
|
||||
if (raySensors.inViewEnemies.Count > 0 && !isFacingtoEnemy) {
|
||||
// have enemy in view
|
||||
List<float> projectionDis = new List<float>();
|
||||
foreach (GameObject thisEnemy in rayScript.inViewEnemies)
|
||||
foreach (GameObject thisEnemy in raySensors.inViewEnemies)
|
||||
{
|
||||
// for each enemy in view
|
||||
Vector3 projection = Vector3.Project(thisEnemy.transform.position - transform.position, (ray.direction * 10));
|
||||
@@ -346,7 +346,7 @@ public class AgentWithGun : Agent
|
||||
{
|
||||
// attack mode
|
||||
float targetDis = Vector3.Distance(blockContainer.thisBlock.transform.position, transform.position);
|
||||
if(targetDis <= rayScript.viewDistance)
|
||||
if(targetDis <= raySensors.viewDistance)
|
||||
{
|
||||
// Debug.DrawRay(new Vector3(0,0,0), viewPoint, Color.red);
|
||||
if (Vector3.Distance(ray.origin + (ray.direction * targetDis), blockContainer.thisBlock.transform.position) <= blockContainer.thisBlock.firebasesAreaDiameter / 2)
|
||||
@@ -419,7 +419,7 @@ public class AgentWithGun : Agent
|
||||
{
|
||||
EnvUICon.initChart();
|
||||
}
|
||||
rayScript.updateRayInfo(); // update raycast
|
||||
raySensors.updateRayInfo(); // update raycast
|
||||
}
|
||||
// ML-AGENTS处理-------------------------------------------------------------------------------------------ML-AGENTS
|
||||
// 观察情报
|
||||
@@ -428,10 +428,10 @@ public class AgentWithGun : Agent
|
||||
//List<float> enemyLDisList = RaySensors.enemyLDisList;// All Enemy Lside Distances
|
||||
//List<float> enemyRDisList = RaySensors.enemyRDisList;// All Enemy Rside Distances
|
||||
|
||||
float[] myObserve = { transform.localPosition.x, transform.localPosition.y, transform.localPosition.z, transform.eulerAngles.y/360f };
|
||||
float[] rayTagResult = rayScript.rayTagResult;// 探测用RayTag结果 float[](raySensorNum,1)
|
||||
float[] rayTagResultOnehot = rayScript.rayTagResultOneHot.ToArray(); // 探测用RayTagonehot结果 List<int>[](raySensorNum*Tags,1)
|
||||
float[] rayDisResult = rayScript.rayDisResult; // 探测用RayDis结果 float[](raySensorNum,1)
|
||||
float[] myObserve = { transform.localPosition.x/raySensors.viewDistance, transform.localPosition.y / raySensors.viewDistance, transform.localPosition.z / raySensors.viewDistance, transform.eulerAngles.y/360f };
|
||||
float[] rayTagResult = raySensors.rayTagResult;// 探测用RayTag结果 float[](raySensorNum,1)
|
||||
float[] rayTagResultOnehot = raySensors.rayTagResultOneHot.ToArray(); // 探测用RayTagonehot结果 List<int>[](raySensorNum*Tags,1)
|
||||
float[] rayDisResult = raySensors.rayDisResult; // 探测用RayDis结果 float[](raySensorNum,1)
|
||||
float[] targetStates = targetCon.targetState; // (6) targettype, target x,y,z, firebasesAreaDiameter
|
||||
float remainTime = targetCon.leftTime;
|
||||
gunReadyToggle = gunReady();
|
||||
@@ -452,6 +452,11 @@ public class AgentWithGun : Agent
|
||||
sensor.AddObservation(rayTagResult);
|
||||
}
|
||||
sensor.AddObservation(rayDisResult); // 探测用RayDis结果 float[](raySensorNum,1)
|
||||
/*foreach(float aaa in rayDisResult)
|
||||
{
|
||||
Debug.Log(aaa);
|
||||
}
|
||||
Debug.LogWarning("------------");*/
|
||||
//sensor.AddObservation(focusEnemyObserve); // 最近的Enemy情报 float[](3,1) MinEnemyIndex,x,z
|
||||
//sensor.AddObservation(raySensorNum); // raySensor数量 int
|
||||
//sensor.AddObservation(remainTime); // RemainTime int
|
||||
@@ -473,7 +478,7 @@ public class AgentWithGun : Agent
|
||||
shoot = mouseShoot;
|
||||
cameraControl(Mouse_X, 0);
|
||||
moveAgent(vertical, horizontal);
|
||||
rayScript.updateRayInfo(); // update raycast
|
||||
raySensors.updateRayInfo(); // update raycast
|
||||
|
||||
//判断结束
|
||||
float sceneReward = 0f;
|
||||
|
||||
@@ -63,6 +63,7 @@ public class TargetController : MonoBehaviour
|
||||
private CharacterController agentCharaCon;
|
||||
private WorldUIController worldUICon;
|
||||
private HUDController hudCon;
|
||||
private RaySensors raySensors;
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
@@ -84,6 +85,7 @@ public class TargetController : MonoBehaviour
|
||||
paramCon = ParameterContainerObj.GetComponent<ParameterContainer>();
|
||||
worldUICon = WorldUIObj.GetComponent<WorldUIController>();
|
||||
hudCon = HUDObj.GetComponent<HUDController>();
|
||||
raySensors = AgentObj.GetComponent<RaySensors>();
|
||||
freeProb = 1 - attackProb - gotoProb - defenceProb;
|
||||
targetNum = (int)Targets.Num;
|
||||
if (freeProb < 0)
|
||||
@@ -183,7 +185,7 @@ public class TargetController : MonoBehaviour
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("Free");
|
||||
//Debug.Log("Free");
|
||||
targetTypeInt = (int)Targets.Free;
|
||||
enemyCont.destroyAllEnemys();
|
||||
enemyCont.randomInitEnemys(hudCon.enemyNum);
|
||||
@@ -207,10 +209,10 @@ public class TargetController : MonoBehaviour
|
||||
else
|
||||
{
|
||||
targetState[0] = targetTypeInt;
|
||||
targetState[1] = targetPosition.x;
|
||||
targetState[2] = targetPosition.y;
|
||||
targetState[3] = targetPosition.z;
|
||||
targetState[4] = blockCont.thisBlock.firebasesAreaDiameter;
|
||||
targetState[1] = targetPosition.x / raySensors.viewDistance; // normalization
|
||||
targetState[2] = targetPosition.y / raySensors.viewDistance;
|
||||
targetState[3] = targetPosition.z / raySensors.viewDistance;
|
||||
targetState[4] = blockCont.thisBlock.firebasesAreaDiameter / raySensors.viewDistance;
|
||||
targetState[5] = blockCont.thisBlock.belongRatio;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user