android - 除非我的设备的位置和方向,否则我如何在相机前生成一个对象?
问题描述
我正在使用 ARfoundation 创建一个 AR 游戏,玩家可以在其中向任何方向滑动球。
我遇到的问题是,当第一次生成球时,所有其他生成的球都会加载到与第一个球相同的位置,无论我用相机瞄准的方向。
无论我手机摄像头的位置、位置和方向如何,我都希望它始终在摄像头前生成。尝试使用标签来获取相机的位置以及需要将球扔进的杯子,但无论位置如何,球都不会被加载到相机前面。我想这不是实现这一目标的正确方法,我想知道是什么?
我用于在某个位置生成球的代码
[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;
...
推荐阅读
- windows - 通过 Windows 商店安装时,Windows 应用程序摄像头无法正常工作
- javascript - unshift 会改变状态吗?你如何判断状态是否发生了变异(来自工具)?
- spring-boot - 杰克逊遗产
- vue.js - Vuex 可重用模块模式。使用状态功能不起作用
- can-bus - 车辆可以总线访问
- rest - Acumatica REST API 端点操作调用失败
- scala - 如何将“[T] 的子级”指定为 Scala 案例类中的类型
- java - 从 Java 调用 Informatica PC wf 并读取响应以恢复 Java 程序
- javascript - CKFinder:文件的自定义排序
- javascript - 使用循环检查组件的样式