IsRayIntersectingBox() public static méthode

public static IsRayIntersectingBox ( Vector3 segment_pt0, Vector3 segment_pt1, Vector3 boxPosition, Vector3 boxSize ) : bool
segment_pt0 Vector3
segment_pt1 Vector3
boxPosition Vector3
boxSize Vector3
Résultat bool
Exemple #1
0
    public void DoRayCast()
    {
        /*if (enemyFound && raycastingCounter < 50)
         * {
         *      DrawHelper.DrawCube(new Vector3(actX, 0.0f, actY), new Vector3(2.0f, 2.0f, 2.0f), Color.yellow);
         *      raycastingCounter++;
         *
         *      foreach (EnemyController ec in enemiesInSightList)
         *              Debug.DrawLine (this.transform.position, ec.transform.position);
         *
         *      return;
         * }
         * else
         *      enemyFound = false;*/


        QuadTree qt = GameObject.Find("QuadTreeGenerator").GetComponent <QuadTree>();

        //List<QuadTreeItem> qtis = qt.GetQuadTreeItemFor(new Vector3(actX, 0.0f, actY), new Vector3(2.5f, 2.5f, 2.5f), 2);
        //QuadTreeItem qti1 = qt.GetQuadTreeItemFor(new Vector3(actX + this.transform.localScale.x/2.0f, 0.0f, actY + this.transform.localScale.z/2.0f), 3);
        //QuadTreeItem qti2 = qt.GetQuadTreeItemFor(new Vector3(actX + this.transform.localScale.x/2.0f, 0.0f, actY - this.transform.localScale.z/2.0f), 3);
        //QuadTreeItem qti3 = qt.GetQuadTreeItemFor(new Vector3(actX - this.transform.localScale.x/2.0f, 0.0f, actY - this.transform.localScale.z/2.0f), 3);
        //QuadTreeItem qti4 = qt.GetQuadTreeItemFor(new Vector3(actX - this.transform.localScale.x/2.0f, 0.0f, actY + this.transform.localScale.z/2.0f), 3);

        /*List<GameObject> gos = new List<GameObject>();
         *
         * foreach (QuadTreeItem qti in qtis)
         *      gos.AddRange(qti.GameObjects);*/
        //gos.AddRange(qti1.GameObjects);
        //gos.AddRange(qti2.GameObjects);
        //gos.AddRange(qti3.GameObjects);
        //gos.AddRange(qti4.GameObjects);

        List <GameObject> gos = new List <GameObject>(GameObject.FindGameObjectsWithTag("wall"));       //qt.GetQuadTreeItemFor(new Vector3(actX, 0.0f, actY), 1).GameObjects;

        List <GameObject> enemies = EnemyGenerator.enemies;

        enemiesInSight = 0;

        enemiesInSightIdList.Clear();
        enemiesInSightList.Clear();

        foreach (GameObject enemyGo1 in enemies)
        {
            bool obstacleFound = false;

            double distance = Vector3.Distance(enemyGo1.transform.position, this.transform.position);

            if (distance > 15.0f)
            {
                continue;
            }

            EnemyController ec1 = enemyGo1.GetComponent <EnemyController>();

            /*List<QuadTreeItem> qtis2 = qt.GetQuadTreeItemFor(new Vector3(ec1.actX, 0.0f, ec1.actY), new Vector3(2.5f, 2.5f, 2.5f), 2);
             * List<GameObject> gos2 = new List<GameObject>();//qt.GetQuadTreeItemFor(new Vector3(ec1.actX, 0.0f, ec1.actY), 3).GameObjects;//GetGameObjectsOnTheWay(ec1.transform.position, this.transform.position);
             *
             * foreach (QuadTreeItem qti in qtis2)
             *      gos2.AddRange(qti.GameObjects);
             *
             * List<GameObject> globalGos = new List<GameObject>();
             * globalGos.AddRange(gos);
             * globalGos.AddRange(gos2);*/

            if (this.id == ec1.id)
            {
                continue;
            }

            Vector3 lineDir    = ec1.transform.position - this.transform.position;
            float   halfLength = Vector3.Distance(ec1.transform.position, this.transform.position) / 2.0f;
            Vector3 midpoint   = new Vector3((ec1.transform.position.x + this.transform.position.x) / 2.0f, /*(ec1.transform.position.y + this.transform.position.y)/2.0f*/ 0.3f, (ec1.transform.position.z + this.transform.position.z) / 2.0f);

            foreach (GameObject go in gos)
            {
                Vector3 goPosition = new Vector3(go.transform.position.x, 0.5f, go.transform.position.z);

                double distance2 = Vector3.Distance(go.transform.position, this.transform.position);
                if (distance2 > 15)
                {
                    continue;
                }

                Vector3 goScale = go.transform.localScale;
                DrawHelper.DrawCube(goPosition, goScale, Color.red);

                if (OOBCollisionDetection.IsRayIntersectingBox(ec1.transform.position, this.transform.position, goPosition, goScale))
                {
                    obstacleFound = true;
                    break;
                }
            }

            if (!obstacleFound)
            {
                Debug.DrawLine(ec1.transform.position, this.transform.position);
                enemiesInSight++;
                enemiesInSightIdList.Add(ec1.id);
                enemiesInSightList.Add(ec1);

                enemyFound        = true;
                raycastingCounter = 0;
            }
        }
    }