Я думаю, что есть проблема с соглашениями об именах. Вы пытаетесь найти пулю с именем «Button», но когда вы создаете экземпляр игрового объекта, он называет его чем-то вроде Button (клон).
Одно решение, которое приходит мне в голову:
1-й шаг:
Создание публичной статической переменной в скрипте PlayerMovement.
public static PlayerMovement Instance;
private void Awake()
{
Instance = this;
}
Установите его значение внутри функции пробуждения, чтобы вы могли вызывать его из любого места.
2-й шаг:
Я изменил функцию съемки.
void Shoot()
{
GameObject _firePosition = right == true ? firepointR : firepointL;
PlayerMovement.Instance.bullet = Instantiate(bulletPrefab, _firePosition.position, _firePosition.rotation); // we are setting the reference on runtime whenever we spawn a new bullet.
}
3-й шаг:
Удалите эту строку из сценария PlayerMovement, так как она сейчас не нужна.
bullet = GameObject.FindGameObjectWithTag("Button");
PS: Код не будет работать, если вы не выполните шаг 3. Дайте мне знать, если это поможет. :)