【问题标题】:Unity: How Do I Center A Mouse To A 3D Player Using Vector3.MoveTowards()?Unity:如何使用 Vector3.MoveTowards() 将鼠标置于 3D 播放器的中心?
【发布时间】:2017-12-29 04:25:04
【问题描述】:

我目前正在使用鼠标输入在 3d 世界中移动玩家(球体)。我正在使用光线投射并使用hit.point 坐标来执行此操作。这是我希望我的游戏工作的方式,但它是一个 3d 游戏,所以每当我使用鼠标坐标移动玩家时,它都不会正确对齐。这是因为玩家是 3d 而鼠标坐标是 2d。

这是我的代码:

public float speed;
public GameObject player;

private Ray ray;
private RaycastHit hit;
private Vector3 mousePos;

void Start ()
{

}

void FixedUpdate ()
{
    ray = Camera.main.ScreenPointToRay(Input.mousePosition);

    if(Physics.Raycast(ray, out hit))
    {
        mousePos = new Vector3(hit.point.x, /*Insert Code*/, hit.point.z);

        if(mousePos != player.transform.position)
        {
            player.transform.position = Vector3.MoveTowards(player.transform.position, mousePos, speed * Time.deltaTime); 
        }
    }
}

我的问题是这样的:

如果我将播放器置于离地 1.3f 的位置,我该如何操作 Vector3.MoveTowards 使鼠标居中于播放器的中心而不影响播放器的高度 (1.3f)?

我尝试使用player.transform.position.y,但它将鼠标直接放在播放器下方(x 和 z 值有效,但 y 值无效)。

我也尝试过 hit.point.y,但它给我的值大于玩家身高 (1.3f)。

【问题讨论】:

  • Unity 问题通常最好在 Unity/Mono 论坛上提出。这个论坛仍然比 MSDN 更受欢迎,但不是很远。
  • @Christopher 我通常来这里询问有关团结的问题。我也去那里试试。
  • hit.point.y 可能没有返回您想要的值,因为光线投射正在击中播放器对象。您应该使用图层蒙版从鼠标光线投射中排除播放器对象。
  • @Draco18s 什么是图层蒙版?

标签: c# unity3d mouse-position


【解决方案1】:

这可能不是解决我的问题的最佳方法,但它现在可以解决。我制作了一个 y 值为 1.3f 的平面并将其穿过播放器对象。然后,我使对象不可见。现在,光线投射将击中该对象而不是地面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    相关资源
    最近更新 更多