how to fire a missile that select nearest enemy to my aim
I have a lot of enemy , when I fire I don't know how can I chose right target for missile , I test nearest enemy but its not ok! (if the enemy was behind of player the missile chose it) The missile must chose nearest enemy to my aim ( center of view ) This is my script , who can I do that
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class Missile : MonoBehaviour
{
public float missileVelocity = 100f;
public float turn = 20f;
public Rigidbody homingMissile;
public float fuseDelay;
public GameObject missileMod;
public ParticleSystem SmokePrefab;
public AudioClip missileClip;
public Transform Enemy;
private Transform target;
// Use this for initialization
void Start()
{
var closestGameObject = GameObject.FindGameObjectsWithTag("Enemy").OrderBy(go => Vector3.Distance(go.transform.position, transform.position)).FirstOrDefault();
float dist = Vector3.Distance(closestGameObject.transform.position, transform.position);
Debug.Log(closestGameObject);
//Fire();
}
// Update is called once per frame
void FixedUpdate()
{
if (target == null || homingMissile == null)
return;
homingMissile.velocity = transform.forward * missileVelocity;
Quaternion targetRotation = Quaternion.LookRotation(target.position - transform.position);
homingMissile.MoveRotation(Quaternion.RotateTowards(transform.rotation, targetRotation, turn));
}
void Fire()
{
Start();
//StartCoroutine(fire());
}
void OnCollisionEnter(Collision theCollision)
{
StartCoroutine(oncollision());
}
IEnumerator fire()
{
yield return new WaitForSeconds(fuseDelay);
AudioSource.PlayClipAtPoint(missileClip, transform.position);
float distance = Mathf.Infinity;
foreach (GameObject go in GameObject.FindGameObjectsWithTag("Enemy"))
{
float diff = (go.transform.position - transform.position).sqrMagnitude;
if (diff < distance)
{
distance = diff;
target = go.transform;
}
}
}
IEnumerator oncollision()
{
SmokePrefab.emissionRate = 0.0f;
Destroy(missileMod.gameObject);
yield return new WaitForSeconds(5);
Destroy(gameObject);
}
}
Comment