Unity3d “如何修复”;“统一AR项目中的重力问题”;

Unity3d “如何修复”;“统一AR项目中的重力问题”;,unity3d,vuforia,Unity3d,Vuforia,项目:增强游戏(vuforia) 我有一个平面,上面有一个球 飞机上有刚体和网格碰撞器。 球体上有一个球体碰撞器和刚体,且重力处于启用状态 当我玩游戏的时候,球从飞机上掉了下来,并一直掉下去 我希望球停留在平面上,这样我就可以用触摸输入控制它。我遇到了这个问题,我使用ITrackableEventHandler解决了这个问题 看看这个脚本: using System.Collections; using UnityEngine; using Vuforia; public class Mar

项目:增强游戏(vuforia)

我有一个平面,上面有一个球

飞机上有刚体和网格碰撞器。 球体上有一个球体碰撞器和刚体,且重力处于启用状态

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


我希望球停留在平面上,这样我就可以用触摸输入控制它。

我遇到了这个问题,我使用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");

    }
}
使用系统集合;
使用UnityEngine;
使用Vuforia;
公共类MarkerController:MonoBehavior,ITrackableEventHandler
{
私人可追踪行为;
//在第一帧更新之前调用Start
void Start()
{
mtrackablebhavior=GetComponent();
if(mTrackableBehavior)
{
mtrackablebhavior.RegisterTrackableEventHandler(此);
}
}
公共无效OnTrackableStateChanged(TrackableBehavior.Status previousStatus,TrackableBehavior.Status newStatus)
{
if(newStatus==trackablebehavior.Status.DETECTED | | | newStatus==trackablebehavior.Status.TRACKED | | | newStatus==trackablebehavior.Status.EXTENDED |
{
OnTrackingFound();
}否则
{
OnTrackingLost();
}
}
私有无效OnTrackingFound()
{
Renderer[]rendererComponents=GetComponentsInChildren();
Collider[]colliderComponents=GetComponentsInChildren();
for(int i=0;i
在这个类中,我只在找到标记跟踪时激活组件!否则它将被停用,当再次找到跟踪时,它将显示为失去跟踪之前的状态


我已将此脚本添加到ARCamera组件中。在这里工作很好

我遇到了这个问题,我使用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");

    }
}
使用系统集合;
使用UnityEngine;
使用Vuforia;
公共类MarkerController:MonoBehavior,ITrackableEventHandler
{
私人可追踪行为;
//在第一帧更新之前调用Start
void Start()
{
mtrackablebhavior=GetComponent();
if(mTrackableBehavior)
{
mtrackablebhavior.RegisterTrackableEventHandler(此);
}
}
公共无效OnTrackableStateChanged(TrackableBehavior.Status previousStatus,TrackableBehavior.Status newStatus)
{
if(newStatus==trackablebehavior.Status.DETECTED | | | newStatus==trackablebehavior.Status.TRACKED | | | newStatus==trackablebehavior.Status.EXTENDED |
{
OnTrackingFound();
}否则
{
OnTrackingLost();
}
}
私有无效OnTrackingFound()
{
Renderer[]rendererComponents=GetComponentsInChildren();
Collider[]colliderComponents=GetComponentsInChildren();
for(int i=0;i
在这个类中,我只在找到标记跟踪时激活组件!否则它将被停用,当再次找到跟踪时,它将显示为失去跟踪之前的状态


我已将此脚本添加到ARCamera组件中。在这里工作很好

您是否向碰撞器添加了
物理材质
?是的,我添加了,平面和球上都有材质您在球上的碰撞器也有一个不同的点