除非我的设备的位置和方向,否则如何在相机前面生成一个对象?
How can I spawn an object in front of the camera unless the position and direction of my device?
我正在使用 ARfoundation 创建一个 AR 游戏,玩家可以在其中向任意方向滑动球。
我遇到的问题是,当第一次生成球时,所有其他生成的球都会加载到与第一个球相同的位置,无论我用相机瞄准什么方向。
我希望它始终在摄像机前生成,无论我的 phone 摄像机的位置、方位和方向如何。尝试使用标签来获取相机的位置以及需要将球扔进的杯子,但无论位置如何,球仍然不会加载到相机前面。我想这不是实现此目标的正确方法,我想知道什么是?
我用于在特定位置生成球的代码
[SerializeField]
GameObject ball;
public float distanceX;
public float distanceY;
public float distanceZ;
public float ballX;
public float ballY;
public float ballZ;
public void Spawn()
{
distanceX = GameObject.FindGameObjectWithTag("Cup").transform.position.x - GameObject.FindGameObjectWithTag("MainCamera").transform.position.x;
distanceY = GameObject.FindGameObjectWithTag("Cup").transform.position.y - GameObject.FindGameObjectWithTag("MainCamera").transform.position.y;
distanceZ = GameObject.FindGameObjectWithTag("Cup").transform.position.z - GameObject.FindGameObjectWithTag("MainCamera").transform.position.z;
ballX = distanceX / 4;
ballY = distanceY / 4;
ballZ = distanceZ / 4;
Instantiate(ball, new Vector3(ballX, ballY, 10f), Quaternion.identity);
}
很难说出你的相机和这个杯子对象是如何相关的,以及你的对象应该在哪里生成。
但一般来说,您可以在主摄像头前生成一些东西,例如
public void Spawn()
{
// this basically does FindObjectWithTag("Main camera")
var camera = Camera.main.transform;
Instantiate(ball, camera.position + camera.forward * 10f, Quaternion.identity);
}
如果您需要不同的距离,那么 10
例如基于该 Cup
对象,您只需替换它或添加另一个偏移向量。
无论哪种方式,您都不应该将它存储在单独的浮点数中,只是为了再次构建一个新向量;)
例如而不是
distanceX = GameObject.FindGameObjectWithTag("Cup").transform.position.x - GameObject.FindGameObjectWithTag("MainCamera").transform.position.x;
distanceY = GameObject.FindGameObjectWithTag("Cup").transform.position.y - GameObject.FindGameObjectWithTag("MainCamera").transform.position.y;
distanceZ = GameObject.FindGameObjectWithTag("Cup").transform.position.z - GameObject.FindGameObjectWithTag("MainCamera").transform.position.z;
ballX = distanceX / 4;
ballY = distanceY / 4;
ballZ = distanceZ / 4;
你更愿意
Vevtor3 distance = GameObject.FindGameObjectWithTag("Cup").transform.position - GameObject.FindGameObjectWithTag("MainCamera").transform.position;
Vector3 ballDelta = distanceX / 4f;
...
我正在使用 ARfoundation 创建一个 AR 游戏,玩家可以在其中向任意方向滑动球。
我遇到的问题是,当第一次生成球时,所有其他生成的球都会加载到与第一个球相同的位置,无论我用相机瞄准什么方向。
我希望它始终在摄像机前生成,无论我的 phone 摄像机的位置、方位和方向如何。尝试使用标签来获取相机的位置以及需要将球扔进的杯子,但无论位置如何,球仍然不会加载到相机前面。我想这不是实现此目标的正确方法,我想知道什么是?
我用于在特定位置生成球的代码
[SerializeField]
GameObject ball;
public float distanceX;
public float distanceY;
public float distanceZ;
public float ballX;
public float ballY;
public float ballZ;
public void Spawn()
{
distanceX = GameObject.FindGameObjectWithTag("Cup").transform.position.x - GameObject.FindGameObjectWithTag("MainCamera").transform.position.x;
distanceY = GameObject.FindGameObjectWithTag("Cup").transform.position.y - GameObject.FindGameObjectWithTag("MainCamera").transform.position.y;
distanceZ = GameObject.FindGameObjectWithTag("Cup").transform.position.z - GameObject.FindGameObjectWithTag("MainCamera").transform.position.z;
ballX = distanceX / 4;
ballY = distanceY / 4;
ballZ = distanceZ / 4;
Instantiate(ball, new Vector3(ballX, ballY, 10f), Quaternion.identity);
}
很难说出你的相机和这个杯子对象是如何相关的,以及你的对象应该在哪里生成。
但一般来说,您可以在主摄像头前生成一些东西,例如
public void Spawn()
{
// this basically does FindObjectWithTag("Main camera")
var camera = Camera.main.transform;
Instantiate(ball, camera.position + camera.forward * 10f, Quaternion.identity);
}
如果您需要不同的距离,那么 10
例如基于该 Cup
对象,您只需替换它或添加另一个偏移向量。
无论哪种方式,您都不应该将它存储在单独的浮点数中,只是为了再次构建一个新向量;)
例如而不是
distanceX = GameObject.FindGameObjectWithTag("Cup").transform.position.x - GameObject.FindGameObjectWithTag("MainCamera").transform.position.x;
distanceY = GameObject.FindGameObjectWithTag("Cup").transform.position.y - GameObject.FindGameObjectWithTag("MainCamera").transform.position.y;
distanceZ = GameObject.FindGameObjectWithTag("Cup").transform.position.z - GameObject.FindGameObjectWithTag("MainCamera").transform.position.z;
ballX = distanceX / 4;
ballY = distanceY / 4;
ballZ = distanceZ / 4;
你更愿意
Vevtor3 distance = GameObject.FindGameObjectWithTag("Cup").transform.position - GameObject.FindGameObjectWithTag("MainCamera").transform.position;
Vector3 ballDelta = distanceX / 4f;
...