public class PlaceObjectOnPlane : MonoBehaviour { [SerializeField] public GameObject objectPrefab; // 需要生成的预制体 private ARRaycastManager arRaycastManager; // 用于检测点击点所在的平面 private List<ARRaycastHit> hits = new List<ARRaycastHit>(); void Awake() { arRaycastManager = GetComponent<ARRaycastManager>(); } void Update() { if (Input.touchCount == 0) return; //查看是否有触摸输入 没有直接返回 Touch touch = Input.GetTouch(0); //获取触摸点 if (touch.phase != TouchPhase.Began) return; //检测触摸点是否处于TouchPhase.Began状态 不是直接返回 if (!arRaycastManager.Raycast(touch.position, hits, UnityEngine.XR.ARSubsystems.TrackableType.PlaneWithinPolygon)) return; //检测点击点所在平面 没有平面直接返回 Pose hitPose = hits[0].pose; //获取命中结果 Instantiate(objectPrefab, hitPose.position, hitPose.rotation); //根据结果位置生成对象 } }
时间: 2024-02-15 18:28:47 浏览: 24
Unity3D脚本:点击放大图片2
这段代码是用于在 AR(增强现实)场景中将一个预制体放置在检测到的平面上的。它使用了 Unity 的 AR 套件,其中 ARRaycastManager 用于检测点击点所在的平面,而 hits 则用于储存检测到的结果。如果有触摸输入,且处于 TouchPhase.Began 状态,代码将检测到的平面的位置和方向信息传递给 Instantiate 函数,以生成一个 objectPrefab 预制体对象,并将其放置在该平面上。
阅读全文