ARKit - 如何在不将物体附加到表面的情况下放置物体?
ARKit - how to place an object without attaching it to the surface?
使用 ARKit,我可以通过点击屏幕将对象放置在表面上。
是否可以放置一个对象 "in the air" 来代替?
比如我想在我面前打开一个传送门。因此,当我点击屏幕时,我希望门户出现在这个位置,但我不希望它附加到任何表面。
可能我必须使用手指点击的坐标和设备的轴,但是对于 z 轴(我和门户之间的距离)我想使用一些预定义的值,例如 1 米。
如何在 C# 中制作(对于 Unity 中的 ARKit)?
ScreenToWorldPoint() 会为所欲为。这个简单的例子将一个立方体放在相机前面 1 米处。只需替换 GameObject.CreatePrimitive() 部分并 Instantiate() 您的 "portal" 预制件即可:
public class PlaceObject : MonoBehaviour {
float objDist = 1.0f;
void Update() {
if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began ) {
Vector3 touchPos = Input.GetTouch (0).position;
touchPos.z = objDist;
Vector3 objPos = Camera.main.ScreenToWorldPoint (touchPos);
GameObject myObj = GameObject.CreatePrimitive(PrimitiveType.Cube);
myObj.transform.position = objPos;
myObj.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
}
}
}
使用 ARKit,我可以通过点击屏幕将对象放置在表面上。 是否可以放置一个对象 "in the air" 来代替?
比如我想在我面前打开一个传送门。因此,当我点击屏幕时,我希望门户出现在这个位置,但我不希望它附加到任何表面。
可能我必须使用手指点击的坐标和设备的轴,但是对于 z 轴(我和门户之间的距离)我想使用一些预定义的值,例如 1 米。
如何在 C# 中制作(对于 Unity 中的 ARKit)?
ScreenToWorldPoint() 会为所欲为。这个简单的例子将一个立方体放在相机前面 1 米处。只需替换 GameObject.CreatePrimitive() 部分并 Instantiate() 您的 "portal" 预制件即可:
public class PlaceObject : MonoBehaviour {
float objDist = 1.0f;
void Update() {
if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began ) {
Vector3 touchPos = Input.GetTouch (0).position;
touchPos.z = objDist;
Vector3 objPos = Camera.main.ScreenToWorldPoint (touchPos);
GameObject myObj = GameObject.CreatePrimitive(PrimitiveType.Cube);
myObj.transform.position = objPos;
myObj.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
}
}
}