【问题标题】:Unity Instantiate object at mouse point getting wrong coordinatesUnity在鼠标点处实例化对象得到错误的坐标
【发布时间】:2020-06-19 19:12:40
【问题描述】:

我正在开发一个 RTS,并且想在鼠标位置上放置一个游戏对象。这可行,但对象放置在错误的位置。

下图显示了我的鼠标所在位置的光线投射。但是对象(立方体,地形的左下角)在光线投射附近没有被实例化。

这是我用来获取位置的代码,我做错了什么?

toBuild.build(Camera.main.ScreenToWorldPoint(hit.point));

【问题讨论】:

  • 你能发布更多你的代码吗?你为什么使用ScreenToWorldPoint?您似乎使用了已经在世界空间中产生结果的光线投射..
  • 如果我使用光线投射中的点,它会被实例化为更接近鼠标位置,但仍然不正确。实际的实例化是通过:Instantiate(this, location, Quaternion.identity) 这是游戏对象,位置是来自光线投射的位置
  • 那么......你能展示你的光线投射等的完整代码吗?
  • 是的,当然在这里,它在不同的类中分开,但这里是调用堆栈:RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Debug.DrawRay(ray.origin, ray.direction * 500, Color.blue); ... Physics.Raycast(ray, out hit, 500); ... toBuild.build(hit.point); ... 变换 transform = Instantiate(this, location, Quaternion.identity).GetComponent();就是这样

标签: unity3d position raycasting


【解决方案1】:

看起来您正在世界空间中进行光线投射,但出于某种原因,您将投射命中用作屏幕位置。它应该已经在世界位置,所以不要使用 Camera.main.ScreenToWorldPoint()。

【讨论】:

  • 感谢丹尼尔的回复。如果我只使用来自光线投射的坐标,它会在离我的鼠标更近的地方实例化,但仍然不是我的鼠标所在的位置。
  • 你如何制作光线投射?
  • ``` RaycastHit 命中; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Debug.DrawRay(ray.origin, ray.direction * 500, Color.blue); ... Physics.Raycast(ray, out hit, 500); ... toBuild.build(hit.point); ... 变换 transform = Instantiate(this, location, Quaternion.identity).GetComponent(); ```
【解决方案2】:

经过更多研究,我找到了位置不正确的原因。我在地形周围放置了一个盒子对撞机,光线投射显然击中了它。我移除了盒子对撞机,它工作正常。

【讨论】:

  • 接受这个作为答案,希望有人能从中找到一些用处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多