AR Foundation笔记04 Tap to Place Objects in AR
coconutnut

https://www.youtube.com/watch?v=xguiSueY1Lw&list=PL6VJLOFcTt7awvyIGIbLLPOBrW6-Y1R-J&index=5&ab_channel=DineshPunni


(接笔记03)

Create New Folder (Scripts)

Create C# Script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;

[RequireComponent(typeof(ARRaycastManager))]
public class ARTapToPlaceObject : MonoBehaviour
{
public GameObject gameObjectToInstantiate;

private GameObject spawnedObject;
private ARRaycastManager arRaycastManager;
private Vector2 touchPosition;

static List<ARRaycastHit> hits = new List<ARRaycastHit>();

private void Awake()
{
arRaycastManager = GetComponent<ARRaycastManager>();
}

bool TryGetTouchPosition(out Vector2 touchPosition)
{
if(Input.touchCount > 0)
{
touchPosition = Input.GetTouch(0).position;
return true;
}

touchPosition = default;
return false;
}

void Update()
{
if(!TryGetTouchPosition(out Vector2 touchPosition))
{
return;
}
if(arRaycastManager.Raycast(touchPosition,hits,TrackableType.PlaneWithinPolygon))
{
var hitPose = hits[0].pose;

if(spawnedObject == null)
{
spawnedObject = Instantiate(gameObjectToInstantiate, hitPose.position, hitPose.rotation);
}
else
{
spawnedObject.transform.position = hitPose.position;
}
}
}

}

把Script拖进AR Session Origin

Create Cube拖进Prefabs,拖进GameObjectToInstantiate

Build

Yeah~