要实现的功能就是 : 得到这个点上最高的cube的位置。然后可以放新的cube在上面。(也就是如果射线碰撞到了cube,则会继续向上发射射线直到上方没有cube为止),然后会返回当前最高cube的位置。
因为是实时检测,需要在update中调用,但是这样的话就会陷入死循环,一个点这一帧检测到最高时,返回了false值,下一帧又会重新检测。所以就退不出来循环了。
该如何实现一个点只向上检测一次的功能。(点是变换的,不是固定点。)
下面是实现代码:
private void Start()
{
CheckCubePosition(Vector3.zero);
}
private Vector3 CheckCubePosition(Vector3 rayPosition)
{
Vector3 targetPosition = rayPosition;
bool hitcube = true;
while (hitcube)
{
hitcube = RayUpwards(targetPosition, out targetPosition);
}
return targetPosition;
}
private bool RayUpwards(Vector3 rayPosition,out Vector3 hitPosition)
{
bool hitCube = false;
hitPosition = rayPosition;
RaycastHit hit;
Ray ray=new Ray(rayPosition,Vector3.up);
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.CompareTag("Cube"))
{
hitCube = true;
hitPosition = hit.point;
Debug.Log(hitPosition);
}
}
return hitCube;
}

这里只是在Start中实现的,检测的初始点是坐标原点。各个cube的位置是(0,1,0)(0,3,0)(0,5,0)所以只调用了一次,在update中会一直调用,因为没有限制条件,会重复调用无限次。
代码应该没有问题的,就是想问问逻辑问题:
我该如何让它在update中调用且随机到任何点只去检测一次最高点的位置呢 ?(必须要实时检测任意点的最高点位置哈)
重点就是 任何点的检测都只去调用一次CheckCubePosition,而不会反复调用