Esempio n. 1
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        WaypointGraph instance = (WaypointGraph)target;

        if (GUILayout.Button("Build waypoint graph distance"))
        {
            var tmpWaypoints = instance.GetComponentsInChildren <WaypointEditor>();

            foreach (var waypointEditor in tmpWaypoints)
            {
                waypointEditor.maxDistance = new List <float>();

                for (var index = 0; index < waypointEditor.neighbors.Count; index++)
                {
                    var     neighbor = waypointEditor.neighbors[index];
                    Vector3 startPos = waypointEditor.transform.position;
                    Vector3 endPos   = neighbor.transform.position;
                    Vector3 dir      = (endPos - startPos).normalized;

                    Vector3 perp = new Vector3(dir.z, 0, -dir.x);

                    Vector3 offset = Vector3.zero;

                    for (int i = 0; i < 10; i++)
                    {
                        Physics.Raycast(startPos + dir * i, perp, out RaycastHit hit);
                    }

                    float maxDistance = float.MaxValue;

                    while (Vector3.Distance(startPos + offset, startPos) < Vector3.Distance(startPos, endPos))
                    {
                        offset += dir;

                        if (Physics.Raycast(startPos + offset, perp, out RaycastHit hit))
                        {
                            float distance = Vector3.Distance(startPos + offset, hit.point);

                            if (distance < maxDistance)
                            {
                                maxDistance = distance;
                            }
                        }

                        if (Physics.Raycast(startPos + offset, -perp, out RaycastHit hit2))
                        {
                            float distance = Vector3.Distance(startPos + offset, hit2.point);

                            if (distance < maxDistance)
                            {
                                maxDistance = distance;
                            }
                        }
                    }

                    waypointEditor.maxDistance.Add(maxDistance);
                }
            }
        }
    }