如何在 Unity AR 基础中只生成一个对象

How to spawn only one object in Unity AR foundation

我是 Unity 和 C# 的新手,有人可以帮助我吗?我正在创建一个儿童游戏,当他们环顾四周时,他们往往会不小心点击屏幕,但随后他们会再次生成该对象,并且它会覆盖第一个对象。我只想在我触摸屏幕对象时生成它们。对不起我的英语。 谢谢

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;

public class ProgrammManager : MonoBehaviour
{
    [Header("Put your planeMarker here")]
    [SerializeField] private GameObject PlaneMarkerPrefab;

    private ARRaycastManager ARRaycastManagerScript;
    private Vector2 TouchPosition;
    
    public GameObject ObjectToSpawn;
    void Start()
    {
        ARRaycastManagerScript = FindObjectOfType<ARRaycastManager>();

        PlaneMarkerPrefab.SetActive(false);
    }

    
    void Update()
    {
       
        ShowMarker();
        

    }


    void ShowMarker()
    {
        List<ARRaycastHit> hits = new List<ARRaycastHit>();

        ARRaycastManagerScript.Raycast(new Vector2(Screen.width / 2, Screen.height / 2), hits, TrackableType.Planes);

        if (hits.Count > 0)
        {
            PlaneMarkerPrefab.transform.position = hits[0].pose.position;
            PlaneMarkerPrefab.SetActive(true);
        }
        if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began)
        {
           
            Instantiate(ObjectToSpawn, hits[0].pose.position, ObjectToSpawn.transform.rotation);
        }
    }
}

如果您只想生成一次对象,可以在脚本中添加一个布尔检查。

private bool objectSpawned = false;

然后在生成对象时将 bool 设置为 true。

        if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began)
    {
       
        Instantiate(ObjectToSpawn, hits[0].pose.position, ObjectToSpawn.transform.rotation);
        objectSpawned = true;
    }

现在,您将支票插入 Update() 函数。这样,如果您已经生成了一个对象,您将无法再生成。

void Update()
{
   if(!objectSpawned)
   {
    ShowMarker();
   }
}