Как создать движущийся GameObject прямо над другим, не повредив привязку в ARCore? - PullRequest
1 голос
/ 29 мая 2019

Я создаю мобильное приложение на основе игры под названием StackAR для Android для своего университета. По сути, это игра, в которой вы можете сложить кубы друг над другом, чем больше вы сложите, тем выше будет счет.

Вот оно , я воссоздаю это.

Теперь то, что я делаю, - это нажатие на экран, якорь устанавливается на отслеживаемый и пустой объект GO с кубом, когда создается экземпляр ребенка. Так что теперь префаб установлен на якорь. В свою очередь, выводит на экран мобильного телефона куб, расположенный на плоскости.

За проблему ... Когда я хочу добавить движущийся куб поверх другого (точно так же, как в видео выше), куб смещается от точки привязки без причины.

Пустой GameObject на сцене заполняется кубами, когда пользователь касается, а затем привязывается к якору и пустому GO. И забавно то, что всякий раз, когда я добавляю их вручную из иерархии, вывод получается именно так, как я этого хочу.

Вот функция, которая добавляет куб в башню или стек.

 private void AddToStack()
    {


        GameObject nextInStack = Instantiate(cube, new Vector3(hit.Pose.position.x, hit.Pose.position.y + (numberOfObjects * yOffset.y * 2), hit.Pose.position.z), hit.Pose.rotation);

        nextInStack.transform.parent = GameObject.Find("Tower").transform;

        nextInStack.transform.localPosition = anchor.transform.position;

        listOfCubes.Add(nextInStack);
    }

И это добавляет начальный пустой GO.

    private void PlaceBase()
    {
        GameObject placed_obj = Instantiate(gameobj_to_place, new Vector3(hit.Pose.position.x, hit.Pose.position.y + yOffset.y, hit.Pose.position.z), hit.Pose.rotation);

        anchor = hit.Trackable.CreateAnchor(hit.Pose);

        placed_obj.transform.parent = anchor.transform;

        baseCubeIsPlaced = true;

        //AddToStack();

    }

И это присутствует в скрипте CubeBehaviour, который отвечает за перемещение куба слева направо.

        private void TranslateCubeForward()
    {
        forwardMethod = true;

        if (isGoingForward)
            transform.Translate(Vector3.forward * speed * Time.deltaTime);
        else
            transform.Translate(-Vector3.forward * speed * Time.deltaTime);

        if (transform.localPosition.z >= limitOfTranslation)
        {
            isGoingForward = false;
        }

        if (transform.localPosition.z <= -limitOfTranslation)
        {
            isGoingForward = true;
        }

    }

Я ожидал, что куб будет располагаться прямо над другим при движении. Но когда объект перемещается, вся вещь смещается, когда сценарий перемещения удаляется из куба, он создается правильно.

...