public override void CollectObservations(VectorSensor sensor) { if (_lastActions != null && _simulationManager.InitComplete) { if (_nearestLot == null) { _nearestLot = _simulationManager.GetRandomEmptyParkingSlot(); } Vector3 dirToTarget = (_nearestLot.transform.position - transform.position).normalized; sensor.AddObservation(transform.position.normalized); sensor.AddObservation( this.transform.InverseTransformPoint(_nearestLot.transform.position)); sensor.AddObservation( this.transform.InverseTransformVector(_rigitBody.velocity.normalized)); sensor.AddObservation( this.transform.InverseTransformDirection(dirToTarget)); sensor.AddObservation(transform.forward); sensor.AddObservation(transform.right); // sensor.AddObservation(StepCount / MaxStep); float velocityAlignment = Vector3.Dot(dirToTarget, _rigitBody.velocity); AddReward(0.001f * velocityAlignment); } else { sensor.AddObservation(new float[18]); } }