当前位置: 首页 > 知识库问答 >
问题:

使用光线投射与放置在Vuforia接地平面上的3D对象交互

齐驰
2023-03-14

你好,所以我一直在寻找解决我的问题的方法,但看起来好像什么都没有。

我正在处理一个场景,在这个场景中,我在地平面上渲染了一些3D对象,我的目标是在那个3D对象上制作动画,首先点击它。我正在使用最新版本的vuforia 10.4和Unity 2020.3。9f1。我有一个脚本,用于实例化3d模型,并使“平面查找器”消失,只要它不丢失跟踪`使用系统。收藏;使用系统。收藏。通用的使用UnityEngine;

公共类的场景管理器:MonoBe行为{私有字符串级别="蛇";

public GameObject[] renderredPrefab;
public GameObject ground;
public GameObject groundFinder;

private int levelChecker(string levelName)
{
    if (levelName == "snake")
        return 0;

    else return 1;
}

public void spawnObject(int i)
{
    Instantiate(renderredPrefab[levelChecker(level)], new Vector3(0, 0, 0), Quaternion.identity, ground.transform);
}

public void groundFinderOff()
{
    groundFinder.SetActive(false);
}

public void groundFinderOn()
{
    groundFinder.SetActive(true);
}

}和另一个使用System.集合;使用System.收藏。通用;使用UnityEngine;

公共类动画师:单行为{私人动画师m_Animator;

private string objectName;
private GameObject[] eos;
private GameObject snake;

[SerializeField]
private Camera ARCamera;

// Start is called before the first frame update
void Start()
{
    // Get the different eos present on the scene
    for (int i = 0; i < eos.Length; i++)
    {
        eos[i] = GameObject.FindWithTag("myEolienne" + i);
    }

    // Get snake game objecct in the scene
    snake = GameObject.FindWithTag("Snake");
}

// Update is called once per frame
void Update()
{
    if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began)
    {
        Ray ray = ARCamera.ScreenPointToRay(Input.GetTouch(0).position);

        if (Physics.Raycast(ray, out RaycastHit hit))
        {
            objectName = hit.collider.name;
            Debug.Log("raycast touched " + hit.transform.name);
            switch (objectName) //Get the Animator depending on which gameObject been tapped on.
            {
                case "myEolienne1":
                    m_Animator = eos[0].GetComponent<Animator>();
                    // Launch the animation on the gameObject that's been tapped 
                    m_Animator.SetTrigger("Helice_Rotate");
                    Debug.Log("rotate launched");
                    break;

                case "myEolienne2":
                    m_Animator = eos[1].GetComponent<Animator>();
                    // Launch the animation on the gameObject that's been tapped 
                    m_Animator.SetTrigger("Helice_Rotate");
                    Debug.Log("rotate launched");
                    break;

                case "myEolienne3":
                    m_Animator = eos[2].GetComponent<Animator>();
                    // Launch the animation on the gameObject that's been tapped 
                    m_Animator.SetTrigger("Helice_Rotate");
                    Debug.Log("rotate launched");
                    break;
                case "Snake":
                    m_Animator = snake.GetComponent<Animator>();
                    m_Animator.SetTrigger("snakeMoving");
                    break;
            }
        }
    }
}

} `

请注意,每个3D模型都有不同的部分分组在一个父级中,父级only.enter图像描述上有一个网格碰撞器

渲染效果非常好,但我无法找出光线投射脚本的错误。注意,我第一次尝试在图像目标上使用3D模型,效果很好。

提前感谢!


共有1个答案

陆承宣
2023-03-14

使用

private void OnMouseDown()
{
 ...   
}

而不是光线投射,当然除非对撞机有重量

 类似资料:
  • 这个类用于进行raycasting(光线投射)。 光线投射用于进行鼠标拾取(在三维空间中计算出鼠标移过了什么物体)。 代码示例 const raycaster = new THREE.Raycaster(); const mouse = new THREE.Vector2(); function onMouseMove( event ) { // 将鼠标位置归一化为设备坐标。x 和 y 方向的

  • 我是vuforia的新手,我正在做一个基于增强现实的项目。我想检测地板作为我的项目的一部分。

  • 刚面完二面 马上来分享 积攒点运气吧 虽然是凉了唉 我不太清楚是否其他所有人都是这样的 我这次二面更加像是我想象中的主管面 没有手撕 没有基础算法 概念 原理的考察 八股也很少 不过也有 我这边一会也会大概写下 首先说下整体印象吧 感觉地平线真心不错 就第一面第二面面试官给我印象都非常好 就那种有技术性格也很好的那种 有能力的大佬努力冲啊 我这菜鸡只能哭泣了 具体问题: 1.项目的细节【这里面试官

  • 该脚本引用了slider(滑块)gameobject(游戏对象),并具有一个协同例程(Coroutine),当我们通过按a键将光线投射到画布上时,该脚本将填充滑块。我的代码工作正常,但它不能正确填充滑块。它可以在光线投射时立即改变场景。我想要的是第一个滑块是fill,音频是play,而滑块值等于0。而不是场景更改。我想我在协同程序中做错了什么。 代码: RayCast脚本: 滑块选择脚本:

  • 我有两个程序。第一个分配共享内存文件,第二个从中读取。。我使用placement new将对象放置到此内存中,以确保对象不会使用新的或分配共享内存文件之外的任何内存。 我的阵列结构: 方案1: 方案2: > 程序一将SHMArray放置在内存中,位置为new。程序二在程序一已经放置的对象上做同样的事情(覆盖它)。这是未定义的行为吗?我认为不是,但我想确认一下。 两个程序都不调用析构函数数组- 我基

  • 我正在使用ArCore为Android构建一个简单的导航应用程序(Java)。我开始在Google(https://github.com/google-ar/sceneform-android-sdk/tree/master/samples/hellosceneform)的场景表单演示上构建我的应用程序。 目前,该应用程序正在扫描环境中的锚点。用户可以通过点击锚点将对象放置在锚点上。是否可以使用这