Exemplo n.º 1
0
    private void getReflectPath(Vector3 moveDir, float reflectDistance, List <HitPointInfo> pathList, LayerMask layerMask)
    {
        pathList.Clear();
        Vector3      startPos     = currentBall.transform.position;
        HitPointInfo startHitInfo = new HitPointInfo(startPos, null);

        pathList.Add(startHitInfo);
        while (reflectDistance > 0)
        {
            RaycastHit raycastHit;
            if (!Physics.Raycast(startPos, moveDir, out raycastHit, reflectDistance, layerMask))
            {
                break;
            }
            HitPointInfo hitPointInfo = new HitPointInfo(raycastHit.point, raycastHit.collider.GetComponent <IGameObject> ());
            pathList.Add(hitPointInfo);
            reflectDistance -= (raycastHit.point - startPos).magnitude;

            startPos = raycastHit.point;
            moveDir  = Vector3.Reflect(moveDir, raycastHit.normal);
        }

        if (reflectDistance > 0)
        {
            Vector3      endPoint   = startPos + moveDir * reflectDistance;
            HitPointInfo endHitInfo = new HitPointInfo(endPoint, null);
            pathList.Add(endHitInfo);
        }
    }
Exemplo n.º 2
0
    private void ballMove(float dt)
    {
        if (this.curPathList.Count <= 0)
        {
            return;
        }

        // 到达路径终点
        if (pointIndex >= this.curPathList.Count)
        {
            return;
        }

        HitPointInfo targetHitInfo = this.curPathList[pointIndex];
        Vector3      targetPos     = targetHitInfo.hitPos;
        Vector3      targetVec     = targetPos - currentBall.transform.position;
        Vector3      targetDir     = targetVec.normalized;

        if (targetVec.magnitude < 0.3)
        {
            pointIndex++;
            this.currentBall.colliderEnter(targetHitInfo.hitObstacle);
            if (pointIndex >= this.curPathList.Count)
            {
                // 重新产生路径
                this.getReflectPath(targetDir, ConstValue.reflectDis, this.curPathList, this.layerMask);
                this.pointIndex = 1;
            }
        }

        currentBall.transform.Translate(targetDir * ConstValue.ballMoveSpeed * dt);
    }