简体   繁体   中英

Enemy Projectile Script Won't Shoot Closest Object

I Have been trying to figure out how the Enemy doesn't return multiple GameObjects it only returns one.Im not sure whether it is my Bullet script that it allows only one object to return. I'm currently trying to develop a Game with multiple players like Slither.io so I'm not sure if the performance is affected I would like to use (List Function) but dont know where to start and I'm using a later version Unity 2017.3.1f1. Much Appreciated for your help.The scripts are below.

public class RandomAIProjectile
{
    private GameObject[] target;
    
    public float speed;
    
    Rigidbody2D bulletRB;
    
    public GameObject explosionEffect;
    
    // Find Targets Section.
    void Start () 
    {
        if (target == null)
            target = GameObject.FindGameObjectsWithTag("Player");
        
        for (int i = 0; i < target.Length; i++) 
        {
            bulletRB = GetComponent<Rigidbody2D> ();
            
            Vector2 moveDir = (target[i].transform.position - transform.position).normalized * speed;
            
            bulletRB.velocity = new Vector2 (moveDir.x, moveDir.y);
            
            Destroy (this.gameObject, 2);
        }
        
    }
    
    private void OnTriggerEnter2D(Collider2D other)
    {
        // Decoy Script To Destroy Players.
        if (other.gameObject.GetComponent<BlackthronpodDiePlayer>() != null)
        {
            Destroy (other.gameObject);
            Destroy (gameObject); 
        }
        // Damage Effect.
        if (other.gameObject.tag == "Player") {
            Instantiate (explosionEffect, transform.position, Quaternion.identity);
            Destroy(gameObject);
        }
        // Player (Bullet) Destroy Enemy.
        if (other.CompareTag ("Bullet"))
        {
            Destroy (other.gameObject);
            Destroy (gameObject); 
        }
        
        
    }
}

Here is the Player Script

public class RandomAIEnemy
{
    //Random Movement
    
    public float speed;
    
    public float waitTime;
    
    public float startWaitTime;
    
    public Transform moveSpots;
    
    public float minX;
    public float minY;
    
    public float maxX;
    public float maxY;
    
    //Enemy AI Shooting 
    
    public float lineOfSite;
    
    public float shootingRange;
    
    public float fireRate = 1f;
    
    private float nextFireTime;
    
    public GameObject bullet;
    
    public GameObject bulletParent;

    // My Current Player
    private BlackthronpodPlayerX playerX;

    // Player AI
    private GameObject[] player;

    public GameObject blood;
    
    Vector3 respawn = new Vector3 (-34f,0,0);
    
    //Additional Info
    
    
    void FixedUpdate () 
    {
        EnemyS ();
    }
    
    // Use this for initialization
    void Start () 
    {
        //My Player AI Tag.
        player = GameObject.FindGameObjectsWithTag("Player");
        
        waitTime = startWaitTime;

        //My Current Player Tag.
        playerX = GameObject.FindGameObjectWithTag ("Player").GetComponent<BlackthronpodPlayerX>();

        //Random Movement Reference
        moveSpots.position = new Vector2 (Random.Range (minX, maxX), Random.Range (minY, maxY));
    }


     //Closest (My Player Including Player AI.)
    private bool TryGetClosestPlayer(out GameObject closest)
    {
        var playersSortedByDistance = player.OrderBy(p => ((Vector2)p.transform.position - (Vector2)transform.position).sqrMagnitude);
        closest = playersSortedByDistance.FirstOrDefault();
        return closest;
    }

    
    void EnemyS () 
    {
        GameObject closestPlayer = null;
        
        if(TryGetClosestPlayer (out closestPlayer))
        {
            var distanceFromPlayer = Vector2.Distance (closestPlayer.transform.position, transform.position);
            
            if (distanceFromPlayer <= shootingRange && nextFireTime < Time.time) 
            {
                Instantiate (bullet, bulletParent.transform.position, Quaternion.identity);
                
                nextFireTime = Time.time + fireRate;
                
            }
        }
    }
    
    // Range And Shooting Boundary For Player Including Player AI.
    private void OnDrawGizmosSelected () 
    {
        Gizmos.color = Color.blue;
        Gizmos.DrawWireSphere (transform.position, lineOfSite);
        Gizmos.DrawWireSphere (transform.position, shootingRange);
        
    }
    
    // Random Movement (I).
    void RandomMove () 
    {
        //Rotate Movement Of Enemy.
        transform.position = Vector2.MoveTowards (transform.position, moveSpots.position, speed * Time.deltaTime);
        
        if (Vector2.Distance (transform.position, moveSpots.position) < 0.2f)
            
        {
            if(waitTime <= 0)
            {   
                moveSpots.position = new Vector2 (Random.Range (minX, maxX), Random.Range (minY, maxY));
                waitTime = startWaitTime;
                
            } else {
                
                waitTime -= Time.deltaTime;
                
            }
        }
    }
    
        
    private void OnTriggerEnter2D(Collider2D collision)
    {
        // Damage Effect On Enemy.
        if (collision.gameObject.tag.Equals ("Player")) 
        {
            Instantiate(blood,transform.position, Quaternion.identity);
        }

        // My Players Health.
        if (collision.CompareTag ("Player")) 
        {
            playerX.health --;
            Debug.Log(playerX.health);
            Destroy(gameObject);
        }

        // Player Score Manager.
        if (collision.tag == "Bullet")
        {
            Game.AddToScore(1);
            
            Destroy(gameObject);
        }
        
        
    }
    
}

Make sure that you have Rigidbody2d attached on your enemy and player. And also, is there any error coming in the code?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM