I have an AI the relies on Force to move, but I need it to flee from the player's position once it reaches a certain distance. Normally this wouldn't be a problem, but once they hit a wall, they get stuck and using OnCollisionEnter doesn't help since they will force themselves towards the wall until they get locked. The game runs in 2D with the Z-axis locked. I tried the bounce material with similar results and raycasting is out of the question.
Question: How do I get the AI to flee from the player, but go the opposite way once it hits the wall, without touching the player?
var FromPlayer: Vector2 = Target.position - transform.position;
if(FromPlayer.magnitude < detectionRange){
rigidbody.AddForce(1,2,1, ForceMode.Impulse);
//rigidbody.velocity = -transform.forward * 2;
if(transform.position.y == Target.position.y){
rigidbody.AddForce(0, Random.Range(-1, 1), 0, ForceMode.Impulse);
}
if(FromPlayer.magnitude < 2){
rigidbody.AddForce(transform.forward * 1, ForceMode.Impulse);
}
function OnCollisionEnter(other: Collision){
if(other.gameObject.CompareTag("Wall")){
rigidbody.AddForce (Random.Range(-2, 2), Random.Range(-1, 1), 0, ForceMode.Impulse);
}
}
I just posted a script that might work well for you. Only thing is that they stop when out of range and start running again when you get into range, But I'll bet that can be tweaked though. LINKY: http://answers.unity3d.com/questions/42238/an-ai-that-will-move-away-or-move-to-another-waypoint-when-player-goes-near
– anon48034950Sorry, but no character controllers are used for it.
– Persona