【发布时间】: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