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
相关产品推荐
相关产品推荐

