Как разместить два или более 3D-ресурса в ARCore с помощью Unity - PullRequest
0 голосов
/ 29 июня 2018

Я просто хочу иметь две кнопки # 1, # 2 на холсте и после определения плоскости, когда я выбираю кнопку # 1 и нажимаю на экран, нужно разместить один 3D-актив, а когда я нажимаю на кнопку # 2 и нажимаю на экран, второй 3D-актив должен быть размещен, а предыдущий актив должен быть удален. За один раз необходимо разместить один актив, а при выборе другого актива ранее удаленный актив должен быть удален.

1 Ответ

0 голосов
/ 29 июня 2018

Вы смотрели на HelloAR Пример ? Там у вас есть: public GameObject AndyAndroidPrefab; Это будет на ощупь. Таким образом, вы можете изменить этот код из примера проекта в соответствии с вашими потребностями.

Вы можете добавить два общедоступных объекта GameObject, в которые вы помещаете свои 3D-ресурсы, и удалить ресурс AndyAndroidPrefab.

public GameObject obj1_prefab;
public GameObject obj2_prefab;

Затем вы не можете добавить переменную bool, которая показывает, какая кнопка нажата.

private bool firstBtnClicked = true;

Затем вы можете сделать две открытые функции void, которые обрабатывают нажатия кнопки:

public void firstButtonClick()
{
    firstBtnClicked = true;
}

public void secondButtonClick()
{
    firstBtnClicked = false;
}

Затем вы можете добавить функцию к кнопкам холста: enter image description here

Затем вам нужно внести изменения, когда вы создадите экземпляр объекта:

 //Test if already an object exists and delete it:
 if (GameObject.Find("Anchor/myobject") != null)
 {
     GameObject parentanchor = GameObject.Find("Anchor/myobject").transform.parent.gameObject;
     Destroy(parentanchor);
  }

  GameObject obj = null;
  if (firstBtnClicked == true)
  {
      // Instantiate first Asset model at the hit pose.
      obj = Instantiate(obj1_prefab, hit.Pose.position, hit.Pose.rotation);
  }
  else
  {
      // Second button clicked: Instantiate second Asset model at the hit pose.
      obj = Instantiate(obj2_prefab, hit.Pose.position, hit.Pose.rotation);
  }

  // Compensate for the hitPose rotation facing away from the raycast (i.e. camera).
  obj.transform.Rotate(0, k_ModelRotation, 0, Space.Self);
  obj.name = "myobject";
  // Create an anchor to allow ARCore to track the hitpoint as understanding of the physical
  // world evolves.
  var anchor = hit.Trackable.CreateAnchor(hit.Pose);

  // Make the object model a child of the anchor.
  obj.transform.parent = anchor.transform;

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

...