我如何使用raycasthit查找可以移动的方向?

时间:2017-12-02 19:06:21

标签: c# unity3d

var availableDirections = new Vector3[] { Vector3.forward, Vector3.left, Vector3.right, Vector3.back };
RaycastHit objectHit;
Vector3 fwd = player.transform.TransformDirection(Vector3.forward);
Debug.DrawRay(player.transform.position, fwd * 1.5f, Color.green);
if (Physics.Raycast(player.transform.position, fwd, out objectHit, 1.5f))
{
    objectHit.transform.
}

我有所有方向的阵列,我只想向前,向左,向右,向后 我不想在这个时候使用对角线。

当有击中时,我想找到来自玩家的方向,射线投射的激光被击中。然后设置从数组到命中方向的正确方向。

也许我还应该使用循环?如果有多个可能的方向,我想将所有可能的方向放在列表中。这样我以后可以告诉玩家他可以移动到哪个方向。

现在我正在使用Physics.OverlapBox,但有时玩家正面向网格外,这不是一个可能的方向。

private void FindDirections()
{

    var availableDirections = new Vector3[] { Vector3.forward, Vector3.left, Vector3.right }

    .Select(directions => transform.position + directions * 1.5f)
    .Where(spot => Physics.OverlapBox(spot, Vector3.one * 0.5f).Length > 0)
    .ToArray();

    var direction = availableDirections[Random.Range(0, availableDirections.Length - 1)];

    player.rotation = Quaternion.Lerp(start.rotation, Quaternion.LookRotation(direction), Time.deltaTime);
    player.forward = direction;

    if (Physics.OverlapBox(transform.position, Vector3.one * 0.5f)
.FirstOrDefault(collider => collider.gameObject.tag == "End")
 != null)
    {

    }        
}

方向阵列在此之前:

var availableDirections = new Vector3[]{Vector3.forward, Vector3.left, -Vector3.left}

在大多数情况下,可能会有3个方向或两个方向。 所以数组包含3个方向。

但是在运行游戏时,玩家有时会面向外面:

outside

0 个答案:

没有答案