【问题标题】:How to fix "gravity issue in unity AR project"如何解决“统一 AR 项目中的重力问题”
【发布时间】:2019-05-11 11:55:13
【问题描述】:

项目:增强游戏 (vuforia)

我有一架飞机,上面有一个球。

飞机上有刚体和网格碰撞器。 球上有一个球体碰撞器和刚体,重力开启。

当我玩游戏时,球从飞机上掉了下来,一直掉下去。

我想让球留在飞机上,这样我就可以通过触摸输入来控制它。

【问题讨论】:

  • 你添加了physicmaterial到你的对撞机吗?
  • 是的,飞机和球都有材料
  • 你的球上的对撞机也有一个physicmaterial 的位置,这与你添加的正常材料不同,我想你可能会错过那个。
  • 物理材料已到位,但不起作用

标签: unity3d vuforia


【解决方案1】:

我遇到了这个问题,我使用 I TrackableEventHandler 解决了。

看看这个脚本:

using System.Collections;
using UnityEngine;
using Vuforia; 

public class MarkerController: MonoBehaviour, ITrackableEventHandler
{
    private TrackableBehaviour mTrackableBehavior;

    // Start is called before the first frame update
    void Start()
    {
        mTrackableBehavior = GetComponent<TrackableBehaviour>(); 
        if (mTrackableBehavior)
        {
            mTrackableBehavior.RegisterTrackableEventHandler(this); 
        }

    }

    public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
    {
        if(newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
        {
            OnTrackingFound(); 
        } else
        {
            OnTrackingLost(); 
        }
    }

    private void OnTrackingFound()
    {
        Renderer[] rendererComponents = GetComponentsInChildren<Renderer>();

        Collider[] colliderComponents = GetComponentsInChildren<Collider>(); 


        for (int i = 0; i < this.transform.GetChildCount(); i++)
        {
            Debug.Log("Activating the children");
            this.transform.GetChild(i).gameObject.SetActive(true); 
        }

        foreach(Renderer component in rendererComponents)
        {
            component.enabled = true; 
        }

        foreach(Collider component in colliderComponents)
        {
            component.enabled = true; 
        }

        Debug.Log("Tracking of " + mTrackableBehavior.TrackableName + " found"); 
    }

    private void OnTrackingLost()
    {
        Renderer[] rendererComponents = GetComponentsInChildren<Renderer>();

        Collider[] colliderComponents = GetComponentsInChildren<Collider>();


        for (int i = 0; i < this.transform.GetChildCount(); i++)
        {
            Debug.Log("Deactivating children");
            this.transform.GetChild(i).gameObject.SetActive(false);
        }

        foreach (Renderer component in rendererComponents)
        {
            component.enabled = false;
        }

        foreach (Collider component in colliderComponents)
        {
            component.enabled = false;
        }

        Debug.Log("Tracking of " + mTrackableBehavior.TrackableName + " lost");

    }
}

在这个类中,我只在找到标记的跟踪时才激活组件!否则会被停用,当再次找到跟踪时,会显示为丢失跟踪前的状态。

我已将此脚本添加到 ARCamera 组件中。在这里工作正常!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多