Преобразование позиции размещенного GameObject - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь переместить куб из A в B. Приложение, над которым я работаю, использует Unity / ARKit для обнаружения плоскости. На сенсорном событии он помещает куб. В настоящее время это работает как ожидалось.

Теперь я хочу преобразовать помещенный куб в новую позицию, однако мой куб неподвижен. В приведенном ниже коде я размещаю куб. Затем в этом операторе if я вызываю метод с именем MoveToB, который должен получить GameObject с именем objectToPlace и преобразовать его позицию. Я предполагаю, что это где код идет не так.

void Update()
{
    UpdatePlacementPose();
    UpdatePlacementIndicator();

    if (placementPoseIsValid && Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) {
        PlaceObject();
        Debug.Log("Object Placed"); // This gets called
        MoveToB();
    }
}

private void MoveToB()
{
    objectToPlace.transform.position = new Vector3(100, 100, 100);
    Debug.Log("MoveToB Triggered"); // This gets called
}

Кто-нибудь может указать мне правильное направление?

Остальной код ...

private void PlaceObject()
{
    Instantiate(objectToPlace, placementPose.position, placementPose.rotation);
}

private void UpdatePlacementIndicator()
{
    if (placementPoseIsValid) {
        placementIndicator.SetActive(true);
        placementIndicator.transform.SetPositionAndRotation(placementPose.position, placementPose.rotation);
    } else {
        placementIndicator.SetActive(false);
    }
}

private void UpdatePlacementPose()
{
    var screenCentre = Camera.current.ViewportToScreenPoint(new Vector3(0.5f, 0.5f));
    var hits = new List<ARRaycastHit>();
    arOrigin.Raycast(screenCentre, hits, TrackableType.Planes);

    placementPoseIsValid = hits.Count > 0;
    if (placementPoseIsValid) {
        placementPose = hits[0].pose;

        var cameraForward = Camera.current.transform.forward;
        var cameraBearing = new Vector3(cameraForward.x, 0, cameraForward.z).normalized;
        placementPose.rotation = Quaternion.LookRotation(cameraBearing);
    }
}

1 Ответ

0 голосов
/ 21 января 2019

objectToPlace кажется префабом?

Если это teue, то

objectToPlace.transform.position = new Vector3(100, 100, 100);

пытается перевести этот префаб, а не объект (клон), который вы установили в своей сцене.

Вместо этого следует сохранить ссылку на размещенный объект

private GameObject spawnedObject;

private void PlaceObject()
{
  spawnedObject =   Instantiate(objectToPlace, placementPose.position, placementPose.rotation);
}

И чем его переместить

private void MoveToB()
{
    spawnedObject.transform.position = new Vector3(100, 100, 100);
    Debug.Log("MoveToB Triggered"); // This gets called
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...