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个方向。
但是在运行游戏时,玩家有时会面向外面: