如何在AR Foundation(arkit)中禁用触摸事件?

问题描述 投票:0回答:1

我对Unity不太满意,尤其是在AR方面,但我终于建立了我的第一个AR游戏。但是,有一个问题:当我将游戏对象放置在飞机上时,我希望它们静止不动,并希望它们在触摸显示屏时移动。有没有一种方法可以禁用触摸命中或任何其他功能?................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ...................................................... 在此处输入代码

[RequireComponent(typeof(ARRaycastManager))]

public class PlaceOnPlane : MonoBehaviour
{
    [SerializeField]
    [Tooltip("Instantiates this prefab on a plane at the touch location.")]
    GameObject m_PlacedPrefab;

    /// <summary>
    /// The prefab to instantiate on touch.
    /// </summary>
    public GameObject placedPrefab
    {
        get { return m_PlacedPrefab; }
        set { m_PlacedPrefab = value; }
    }

    /// <summary>
    /// The object instantiated as a result of a successful raycast 
    intersection with a plane.
    /// </summary>
    public GameObject spawnedObject { get; private set; }

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

    bool TryGetTouchPosition(out Vector2 touchPosition)
    {
       #if UNITY_EDITOR
        if (Input.GetMouseButton(0))
        {
            var mousePosition = Input.mousePosition;
            touchPosition = new Vector2(mousePosition.x, mousePosition.y);
            return true;
        }
else
        if (Input.touchCount > 0)
        {
            touchPosition = Input.GetTouch(0).position;
            return true;
        }
#endif

        touchPosition = default;
        return false;
    }

    void Update()
    {
        if (!TryGetTouchPosition(out Vector2 touchPosition))
            return;

        if (m_RaycastManager.Raycast(touchPosition, s_Hits, TrackableType.PlaneWithinPolygon))
        {
            // Raycast hits are sorted by distance, so the first one
            // will be the closest hit.
            var hitPose = s_Hits[0].pose;

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

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

    ARRaycastManager m_RaycastManager;
}
unity3d augmented-reality arkit
1个回答
0
投票

根据您的评论,如果要使用按钮放置对象,则现在需要做的就是禁用在此附加的脚本。该对象不应移动,因为导致其移动的是Update中的此代码位:

© www.soinside.com 2019 - 2024. All rights reserved.