How to get the position of a new Instantiated prefab (876296)

Hi to everybody!!

I have two same enemies already instantiated in the scene from a unique prefab “Dogor (clone)” and I’m instantiating also one bullet to make both to shoot the same bullet, I’m managing the RUN and SHOOT with the animator, and both clones are moving independently fine, the problem is tht the bullet prefab is alway getting the possition of the first enemy clone created, so, in the photo below you can see that the bullet is coming out from the second clone, not the first one that is in the range of shooting.

I’m going to attach also the code that I’m using inside of the animator to instantiate the bullet object.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Fire_Dogor_1 : StateMachineBehaviour
{
    //public GameObject Dogor;
    Transform enemy_2;
    Dogor_Script DS;
    public float Shootperiod = 0.50f;
    public GameObject BalaPrefab;
    public float LastShoot;
    public float distance;

    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {


        enemy_2 = GameObject.FindGameObjectWithTag("Dogor").transform;
    }

    // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
    override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        if (Time.time > LastShoot + Shootperiod)
        {
            Vector3 direction;
            if (enemy_2.transform.localScale.x == 1.0f) direction = Vector3.right;
            else direction = Vector3.left;
            GameObject Bala = Instantiate(BalaPrefab, enemy_2.transform.position + direction * 0.1f, Quaternion.identity);
            Bala.GetComponent<Bala_Script>().SetDirection(direction);
            LastShoot = Time.time;

            animator.SetBool("Fire", false);
        }
    }

    // OnStateExit is called when a transition ends and the state machine finishes evaluating this state
    override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        animator.SetBool("Fire", false);
    }

Please give me a hand, I’m blocked with this like a week or more, this problem doesn’t allow me to instantiate the enemies in my game!!,

Thank you very much in advance!!

Your problem is here:

{
enemy_2 = GameObject.FindGameObjectWithTag("Dogor").transform;
}```

Because, you are using FindGameObjectWithTag, that method only finds the FIRST object in hierarchy that have that tag, so if you have 2 GameObjects that have the same tag attached, the method will return the first GameObject on the hierarchy.

What you could do:

```override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
enemy_2 = this.gameObject;
}```

It will make the enemy_2 GameObject be the one who holds the script.

(If i wasn't clear in any point please let me know)