Fixed nan exception

This commit is contained in:
2022-05-18 01:37:06 +07:00
parent 4132787ef8
commit 7db8dbcfcf
8 changed files with 336 additions and 15 deletions

View File

@ -44,14 +44,18 @@ public class MovementController : MonoBehaviour
private void Update()
{
var thisPoint = _idNavPointDict[PointStartID];
if (ReachedDestination())
{
_myNpc.ChangePointState(_idNavPointDict[PointStartID].navType == NavPointType.Cover
_myNpc.ChangePointState(thisPoint.navType == NavPointType.Cover
? NpcEnumState.InCover
: NpcEnumState.InDirectPoint);
thisPoint.isOcuppied = true;
}
else
{
thisPoint.isOcuppied = false;
_idNavPointDict[PointEndID].isOcuppied = false;
_myNpc.ChangeBodyState(NpcBodyState.Standing);
_myNpc.ChangePointState(NpcEnumState.InRunning);
}
@ -78,7 +82,7 @@ public class MovementController : MonoBehaviour
{
return MapManager.Instance.NavPoints
.Where(point =>
(transform.position - point.Position).magnitude < _settings.MovementDistance)
(transform.position - point.Position).magnitude < _settings.MovementDistance && point.isOcuppied == false)
.ToList();
}

View File

@ -132,9 +132,7 @@ public class NPC : Agent, ICharacter
//state sensors
sensor.AddObservation((int)NpcState.State);
sensor.AddObservation((int)NpcBodyState.State);
sensor.AddObservation(GameManager.IsEnemyNearby(gameObject.transform.position, GetCharacter.Team));
//sensor.AddObservation(_navPointIdDict[_moveController.PointStartID].DeathAttr);
//sensor.AddObservation(_navPointIdDict[_moveController.PointEndID].DeathAttr);
sensor.AddObservation(GameManager.IsEnemyNearby(gameObject.transform.position, GetCharacter.Team));
sensor.AddObservation(_moveController.FlagDistance);
//point sensors
@ -142,13 +140,9 @@ public class NPC : Agent, ICharacter
{
var position = transform.position;
_bufferSensor.AppendObservation(new float[] {
point.DeathAttr,
(int)point.navType,
//4 flagEnemyDistance
GameManager.IsCloserToFlagFromNextNavPoint(point, position).ToInt(),
//5 EnemyVsNavPointDistance
GameManager.IsCloserToEnemyThanToNextNavPoint(point, position, GetCharacter.Team.GetOppositeTeam()).ToInt(),
//6 Have been seen by enemy in this point
GameManager.IsHaveSeenByEnemy(GetCharacter.Team.GetOppositeTeam(),
point.Position).ToInt()
});