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

Unity+Vuforia AR应用实现仅单次部署物体的方法咨询

Unity+Vuforia实现单次点击放置物体的解决方法

不用纠结失效的DeployStageOnce.cs,自己写个简单逻辑就能搞定,核心就是加个标记控制只执行一次放置:

1. 自定义单次放置脚本

新建一个C#脚本(命名为SingleTapDeploy.cs),代码如下:

using UnityEngine;
using Vuforia;

public class SingleTapDeploy : MonoBehaviour
{
    // 拖拽要放置的预制体到这里
    public GameObject objectToDeploy;
    // 标记物体是否已放置
    private bool isDeployed = false;

    void Start()
    {
        // 初始隐藏预制体
        if (objectToDeploy != null)
            objectToDeploy.SetActive(false);
    }

    void Update()
    {
        // 检测屏幕点击(兼容移动端触摸和PC鼠标点击)
        bool isTap = Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began;
        bool isMouseClick = Input.GetMouseButtonDown(0);

        if (isTap || isMouseClick)
        {
            // 未放置时才执行逻辑
            if (!isDeployed && objectToDeploy != null)
            {
                Camera arCam = Camera.main;
                Ray ray = arCam.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out RaycastHit hit))
                {
                    // 把物体放到点击的平面位置
                    objectToDeploy.transform.position = hit.point;
                    objectToDeploy.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
                    objectToDeploy.SetActive(true);
                    // 标记为已放置,后续点击不再触发
                    isDeployed = true;
                }
            }
        }
    }
}

2. 快速设置步骤

  • 把脚本挂到AR Camera或者任意空物体上
  • 在Inspector面板里,把你要放置的预制体拖进objectToDeploy字段
  • 确保预制体带有Collider(Vuforia的平面检测会自动生成地面碰撞体,不用额外加)

3. 旧脚本修复(可选)

如果非要用DeployStageOnce.cs,检查这两点:

  • 脚本里是否有类似mHasBeenPlaced的布尔变量,确认放置后会被设为true
  • 点击触发的逻辑开头要加判断:如果mHasBeenPlaced为true,直接return跳过执行

这样改完后,第一次点击会放置物体,之后再点屏幕就不会重复放置了。

内容的提问来源于stack exchange,提问作者Confused screaming

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:43:16