首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vuforia锚定

Vuforia锚定
EN

Stack Overflow用户
提问于 2018-11-08 04:29:28
回答 1查看 850关注 0票数 2

一旦物体产生,我就能确定它的位置。但是,在屏幕上的每个点击上,物体都被放置在不同的位置上。我希望避免这个问题,并希望在整个会话或应用程序生存期内将我的对象固定在生成的位置。

这是我的部署阶段(曾经的脚本):

代码语言:javascript
复制
public class DeployStageOnce : MonoBehaviour
{

    public GameObject AnchorStage;
    private PositionalDeviceTracker _deviceTracker;
    private GameObject _anchorGameObject;
    private GameObject _previousAnchor;

    public void Start()
    {
        if (AnchorStage == null)
        {
            Debug.Log("AnchorStage must be specified");
            return;
        }
        AnchorStage.SetActive(false);
    }
    public void Awake()
    {
        VuforiaARController.Instance.RegisterVuforiaStartedCallback(OnVuforiaStarted);
    }
    public void OnDestroy()
    {
        VuforiaARController.Instance.UnregisterVuforiaStartedCallback(OnVuforiaStarted);
    }
    private void OnVuforiaStarted()
    {
        _deviceTracker = TrackerManager.Instance.GetTracker<PositionalDeviceTracker>();
    }

    private void AnchorGameObjectSetHitTestPosition(HitTestResult reuslt)

    {

        _anchorGameObject.transform.position = reuslt.Position;

        _anchorGameObject.transform.rotation = reuslt.Rotation;

    }


    public void OnInteractiveHitTest(HitTestResult result)
    {
        if (result == null || AnchorStage == null)
        {
            Debug.LogWarning("Hit test is invalid or AnchorStage not set");
            return;
        }
        var anchor = _deviceTracker.CreatePlaneAnchor(Guid.NewGuid().ToString(), result);
        _anchorGameObject = new GameObject();
        AnchorGameObjectSetHitTestPosition(result);
        if (anchor != null)
        {

            AnchorStage.transform.parent = _anchorGameObject.transform;

            AnchorStage.transform.localPosition = Vector3.zero;

            AnchorStage.transform.localRotation = Quaternion.identity;

            AnchorStage.SetActive(true);

                    }
        if (_previousAnchor != null)
        {
            Destroy(_previousAnchor);
        }
        _previousAnchor = _anchorGameObject;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-08 09:35:55

您可以在脚本中创建一个isPlaced变量,以检查您的对象是否已经放置如下:

private bool isPlaced = false;

代码语言:javascript
复制
    public void OnInteractiveHitTest(HitTestResult result)
    {
        if (result == null || AnchorStage == null)
        {
            Debug.LogWarning("Hit test is invalid or AnchorStage not set");
            return;
        }
        if(!isPlaced)
        { 
            var anchor = _deviceTracker.CreatePlaneAnchor(Guid.NewGuid().ToString(), result);
            _anchorGameObject = new GameObject();
            AnchorGameObjectSetHitTestPosition(result);
            if (anchor != null)
            {

                AnchorStage.transform.parent = _anchorGameObject.transform;

                AnchorStage.transform.localPosition = Vector3.zero;

                AnchorStage.transform.localRotation = Quaternion.identity;

                AnchorStage.SetActive(true);

            }           
            isPlaced = true;
        }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53201569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档