- Home /
Distance from multiple enemies but follow master
I've made a dog that follows its master through my game. I managed to get it to attack ONE of the enemies on the game if it was within a certain distance. This would be cancelled, though, if its master ran away from the enemy(it would follow its master instead of attacking). I used this:
/*var enemies = GameObject.FindGameObjectsWithTag("Enemy").transform;
var distanceFromMaster = Vector3.Distance(master.position, transform.position);
var distanceFromEnemy = Vector3.Distance(enemies.position, transform.position);
if (distanceFromEnemy < 12 && distanceFromMaster < 15) {
transform.LookAt(enemies);
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
else {
if (distanceFromMaster > 3) {
transform.LookAt(master);
transform.Translate(Vector3.forward*speed*Time.deltaTime);
}
}
}
Now, instead of attacking just one enemy, i wanted to make it decide where the nearest enemy was out of a few enemies and attack that one. But i also want it to run after its master if the master runs away. The current one i'm using makes the dog loop looking at its master and the closest enemy, but i can't find what i need to change. Can someone help? Heres the one im trying to fiddle with now:
var distanceFromMaster = Vector3.Distance(master.position, transform.position);
if (distanceFromMaster > 3) {
transform.LookAt(master);
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
else {
var enemies: GameObject[];
enemies = GameObject.FindGameObjectsWithTag("Enemy");
var closest : Transform;
var distance = Mathf.Infinity;
var position = transform.position;
for(var enemy : GameObject in enemies) {
var difference = (enemy.transform.position - position);
var currentDist = difference.sqrMagnitude;
if (currentDist < distance) {
closest = enemy.transform;
distance = currentDist;
}
}
transform.LookAt(closest);
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}
Your answer
Follow this Question
Related Questions
transform.LookAt issue 1 Answer
How to prevent Z axis rotation ? 1 Answer
LookAt transform plus a y value 1 Answer
Using legacy particles and transform.LookAt() 0 Answers
Get LookAt vector of a tranform 1 Answer