Unity3d “如何修复”;“统一AR项目中的重力问题”;
项目:增强游戏(vuforia) 我有一个平面,上面有一个球 飞机上有刚体和网格碰撞器。 球体上有一个球体碰撞器和刚体,且重力处于启用状态 当我玩游戏的时候,球从飞机上掉了下来,并一直掉下去Unity3d “如何修复”;“统一AR项目中的重力问题”;,unity3d,vuforia,Unity3d,Vuforia,项目:增强游戏(vuforia) 我有一个平面,上面有一个球 飞机上有刚体和网格碰撞器。 球体上有一个球体碰撞器和刚体,且重力处于启用状态 当我玩游戏的时候,球从飞机上掉了下来,并一直掉下去 我希望球停留在平面上,这样我就可以用触摸输入控制它。我遇到了这个问题,我使用ITrackableEventHandler解决了这个问题 看看这个脚本: using System.Collections; using UnityEngine; using Vuforia; public class Mar
我希望球停留在平面上,这样我就可以用触摸输入控制它。我遇到了这个问题,我使用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组件中。在这里工作很好 我遇到了这个问题,我使用ITrackableEventHandler
解决了这个问题
看看这个脚本:
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组件中。在这里工作很好 您是否向碰撞器添加了物理材质
?是的,我添加了,平面和球上都有材质您在球上的碰撞器也有一个不同的点