WiMA
@WiMA
Пишу игрушки в свободное время

Как перемещать объекты к родителю?

Есть игра, что-то вроде симулятора инвокера, где при нажатии на одну из трёх кнопок (z, x, c) спавнится соответствующая кнопке сфера в одной из незанятых точек, всего точек три, а по нажатию на пробел игрок стреляет (пока просто удаляются все сферы. И с этим я ещё разобрался, но проблема в том, что персонаж постоянно двигается, и сферы спавнить нужно рядом с ним. Я перемещаю их в координаты родителя (пустого дочернего игроку объекта) + заданный вектор из массива, соответствующий нужной мне позиции, но вот в чём загвоздка, сначала три сферы появляются рядом с местом, в котором был игрок во время предыдущего спавна сфер, и только на второй раз появляются там, где нужно. Я в принципе не понимаю, как так могло случиться.
Вот код:
[SerializeField] GameObject fireSphere;
    [SerializeField] GameObject iceSphere;
    [SerializeField] GameObject sparkleSphere;
    [SerializeField] GameObject parent;
    [SerializeField] Vector3[] sphereCoords;
    public static bool shootButtonPressed = false;
    public static byte sphereCounter = 0;

    private void Update()
    {
        if ((Input.GetKeyDown(KeyCode.Z)) & (sphereCounter < 3))
        {
            sphereCounter += 1;
            Instantiate(fireSphere).transform.SetParent(parent.transform, true);

            if (sphereCounter == 1)
            {
                fireSphere.transform.position = parent.transform.position + sphereCoords[0];
            }

            else if (sphereCounter == 2)
            {
                fireSphere.transform.position = parent.transform.position + sphereCoords[1];
            }

            else if (sphereCounter == 3)
            {
                fireSphere.transform.position = parent.transform.position + sphereCoords[2];
            }

            else
            {
                Debug.Log("Многовато сфер");
                
            }
        }

        if ((Input.GetKeyDown(KeyCode.X)) & (sphereCounter < 3))
        {           
            sphereCounter += 1;
            Instantiate(iceSphere).transform.SetParent(parent.transform, true);
            if (sphereCounter == 1)
            {
                iceSphere.transform.position = parent.transform.position + sphereCoords[0];
            }

            else if (sphereCounter == 2)
            {
                iceSphere.transform.position = parent.transform.position + sphereCoords[1];
            }

            else if (sphereCounter == 3)
            {
                iceSphere.transform.position = parent.transform.position + sphereCoords[2];
            }

            else
            {
                Debug.Log("Многовато сфер");
               
            }
        }

        if ((Input.GetKeyDown(KeyCode.C)) & (sphereCounter < 3))
        {
            sphereCounter += 1;
            Instantiate(sparkleSphere).transform.SetParent(parent.transform, true);
            if (sphereCounter == 1)
            {
                sparkleSphere.transform.position = parent.transform.position + sphereCoords[0];
            }

            else if (sphereCounter == 2)
            {
                sparkleSphere.transform.position = parent.transform.position + sphereCoords[1];
            }

            else if (sphereCounter == 3)
            {
                sparkleSphere.transform.position = parent.transform.position + sphereCoords[2];
            }

            else
            {
                Debug.Log("Многовато сфер");
                
            }
        }
    }
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы