如何使用 Unity 在 ARCore 中放置两个或多个 3D 资产

How place two or more 3D assets in ARCore using Unity

我只想在 canvas 上有两个按钮 #1、#2 并且在平面检测之后当我 select 按钮 #1 并点击屏幕时应该放置一个 3D 资产并且当我单击按钮 #2 并点击屏幕应该放置第二个 3D 资产,并且需要删除之前的资产。 一次需要放置一项资产,而当 select 放置另一项资产时,需要移除先前放置的资产。

你看过HelloAR Example了吗?你有: public GameObject AndyAndroidPrefab; 这将被放置在触摸上。因此,您可以修改示例项目中的代码以满足您的需要。

您可以在放置 3D 资产的位置添加两个 public 游戏对象,并移除 AndyAndroidPrefab 资产。

public GameObject obj1_prefab;
public GameObject obj2_prefab;

然后你可以添加一个 bool 变量来显示你点击了哪个按钮。

private bool firstBtnClicked = true;

然后你可以创建两个 public void 函数来处理按钮点击:

public void firstButtonClick()
{
    firstBtnClicked = true;
}

public void secondButtonClick()
{
    firstBtnClicked = false;
}

然后您可以将功能添加到 canvas 按钮:

然后你必须在 instantiate the object:

的地方进行更改
 //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;

所以现在,如果您单击按钮 one,您将 select 您的第一个对象,并且在触摸屏幕后放置第一个资产。当您单击第二个按钮时,您会将第二个对象放置在屏幕触摸上。