You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改标准HelloARController脚本实现单次实例化?

解决ARCore触摸仅实例化一次对象的问题

没问题,这个需求很容易实现——只需要添加一个状态变量来跟踪是否已经生成过对象,每次触摸时先检查这个变量,只有未生成过的情况下才执行实例化逻辑。

修改步骤:

  1. 添加状态标记字段:在HelloARController类中声明一个私有布尔变量,用来记录是否已经完成过实例化操作。
  2. 修改触摸检测逻辑:在执行Raycast和实例化代码前,先检查这个标记;如果已经生成过对象,直接跳过后续代码。
  3. 更新状态:成功实例化对象后,将标记设为true,确保后续触摸不会重复触发。

修改后的代码示例:

using UnityEngine;
using GoogleARCore;

public class HelloARController : MonoBehaviour
{
    // 你的原有字段,比如AndyAndroidPrefab、raycastFilter等
    public GameObject AndyAndroidPrefab;
    public TrackableType raycastFilter = TrackableType.PlaneWithinPolygon;
    
    // 新增:标记是否已经生成过对象
    private bool _hasSpawnedObject = false;

    void Update()
    {
        // 处理触摸输入的原有逻辑
        if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
        {
            Touch touch = Input.GetTouch(0);
            TrackableHit hit;

            // 先检查是否已经生成过对象,再执行Raycast
            if (!_hasSpawnedObject && Frame.Raycast(touch.position.x, touch.position.y, raycastFilter, out hit))
            {
                // 实例化对象
                var andyObject = Instantiate(AndyAndroidPrefab, hit.Pose.position, hit.Pose.rotation);
                
                // 创建锚点并绑定对象(原有逻辑保留)
                var anchor = hit.Trackable.CreateAnchor(hit.Pose);
                andyObject.transform.parent = anchor.transform;

                // 标记已完成实例化,后续触摸不再触发
                _hasSpawnedObject = true;
            }
        }
    }
}

额外说明(可选):

如果你之后需要允许用户重置(比如删除已生成的对象并重新生成),可以添加一个重置方法,将_hasSpawnedObject设回false,同时销毁已生成的对象:

public void ResetSpawnedObject()
{
    // 找到并销毁已生成的对象(假设锚点是对象的父物体)
    GameObject spawnedObject = GameObject.FindWithTag("AndyObject"); // 记得给预制体加标签
    if (spawnedObject != null)
    {
        Destroy(spawnedObject.transform.parent.gameObject); // 销毁锚点及子对象
    }
    // 重置状态标记
    _hasSpawnedObject = false;
}

内容的提问来源于stack exchange,提问作者Volkert-TecDesign

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:36:24