AR 对象 Drifting/Flying 离开问题 Unity AR Foundation
AR Object Drifting/Flying Away Issue Unity AR Foundation
我是 AR 开发的新手,很抱歉这个菜鸟问题。我在摄像机前生成了一个 AR 对象,它生成的很好,但有时,该对象开始向随机方向漂移。谁能帮我解决这个问题?我已经搜索了一段时间;我找不到修复程序。
对于对象生成
prefabInstance = Instantiate(placeObject);
GetComponent<ARSessionOrigin>().MakeContentAppearAt(prefabInstance.transform, new Vector3(0, -0.76f, 3.35f), Quaternion.identity);
我想摇一摇把物体打碎。在对象变成碎片后,我将它们重新定位在不同的区域。我只重新定位了父对象,碎片在对象的子对象中。
搬迁代码
int temp = UnityEngine.Random.Range(0, ReferenceSpawnPoint.Length);
gObject.transform.position = new Vector3(ReferenceSpawnPoint[temp].position.x, ReferenceSpawnPoint[temp].position.y, ReferenceSpawnPoint[temp].position.z);
float y = UnityEngine.Random.Range(0, 360);
float z = UnityEngine.Random.Range(-10, 10);
gObject.transform.rotation = Quaternion.Euler(0, y, 0);
我也附上了视频的link;请看一下,你就明白我在说什么了video link。为了方便起见,请从0:30秒标记开始。
非常感谢您的帮助。
有时我也会黑屏;这是否意味着 AR Session 尚未初始化?
Plugin/Tool 版本:
- 统一:2019.2.7f2
- XR ARCore:3.1.3
- XR 增强现实基础:3.1.3
- XR ARKit:3.1.3
- XR 旧版输入助手:2.1.4
您放置对象的方式似乎有误。更好的方法是使用光线投射并将 3D 对象放置在由用户输入(例如触摸屏幕)定义的某个位置。
AR Foundation 示例场景有一个名为 PlaceOnPlane.cs 的脚本,它展示了如何检测用户何时触摸屏幕,然后从屏幕向世界投射光线以创建游戏对象:
if (Input.touchCount == 1) {
if (m_RaycastManager.Raycast(Input.GetTouch(0).position, s_Hits, TrackableType.PlaneWithinPolygon))
{
// Raycast hits are sorted by distance, so the first one
// will be the closest hit.
var hitPose = s_Hits[0].pose;
if (spawnedObject == null)
{
spawnedObject = Instantiate(m_PlacedPrefab, hitPose.position, hitPose.rotation);
}
}
一旦您在 "real-world" 位置(例如 hitPose.position 实例化模型,您就不会再看到它漂移了。
我是 AR 开发的新手,很抱歉这个菜鸟问题。我在摄像机前生成了一个 AR 对象,它生成的很好,但有时,该对象开始向随机方向漂移。谁能帮我解决这个问题?我已经搜索了一段时间;我找不到修复程序。
对于对象生成
prefabInstance = Instantiate(placeObject);
GetComponent<ARSessionOrigin>().MakeContentAppearAt(prefabInstance.transform, new Vector3(0, -0.76f, 3.35f), Quaternion.identity);
我想摇一摇把物体打碎。在对象变成碎片后,我将它们重新定位在不同的区域。我只重新定位了父对象,碎片在对象的子对象中。
搬迁代码
int temp = UnityEngine.Random.Range(0, ReferenceSpawnPoint.Length);
gObject.transform.position = new Vector3(ReferenceSpawnPoint[temp].position.x, ReferenceSpawnPoint[temp].position.y, ReferenceSpawnPoint[temp].position.z);
float y = UnityEngine.Random.Range(0, 360);
float z = UnityEngine.Random.Range(-10, 10);
gObject.transform.rotation = Quaternion.Euler(0, y, 0);
我也附上了视频的link;请看一下,你就明白我在说什么了video link。为了方便起见,请从0:30秒标记开始。
非常感谢您的帮助。
有时我也会黑屏;这是否意味着 AR Session 尚未初始化?
Plugin/Tool 版本:
- 统一:2019.2.7f2
- XR ARCore:3.1.3
- XR 增强现实基础:3.1.3
- XR ARKit:3.1.3
- XR 旧版输入助手:2.1.4
您放置对象的方式似乎有误。更好的方法是使用光线投射并将 3D 对象放置在由用户输入(例如触摸屏幕)定义的某个位置。
AR Foundation 示例场景有一个名为 PlaceOnPlane.cs 的脚本,它展示了如何检测用户何时触摸屏幕,然后从屏幕向世界投射光线以创建游戏对象:
if (Input.touchCount == 1) {
if (m_RaycastManager.Raycast(Input.GetTouch(0).position, s_Hits, TrackableType.PlaneWithinPolygon))
{
// Raycast hits are sorted by distance, so the first one
// will be the closest hit.
var hitPose = s_Hits[0].pose;
if (spawnedObject == null)
{
spawnedObject = Instantiate(m_PlacedPrefab, hitPose.position, hitPose.rotation);
}
}
一旦您在 "real-world" 位置(例如 hitPose.position 实例化模型,您就不会再看到它漂移了。