public static void GetGUO(this GraphUpdateScene gus, ref GraphUpdateObject guo) { if (gus.points == null || gus.points.Length == 0) { var polygonCollider = gus.GetComponent <PolygonCollider2D>(); if (polygonCollider != null) { var points2D = polygonCollider.points; Vector3[] pts = new Vector3[points2D.Length]; for (int i = 0; i < pts.Length; i++) { var p = points2D[i] + polygonCollider.offset; pts[i] = new Vector3(p.x, 0, p.y); } var mat = gus.transform.localToWorldMatrix * Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(-90, 0, 0), Vector3.one); var shape = new GraphUpdateShape(gus.points, gus.convex, mat, gus.minBoundsHeight); if (guo == null) { guo = new GraphUpdateObject(); } guo.bounds = shape.GetBounds(); guo.shape = shape; } else { var bounds = gus.GetBounds(); if (bounds.center == Vector3.zero && bounds.size == Vector3.zero) { Debug.LogError("Cannot apply GraphUpdateScene, no points defined and no renderer or collider attached", gus); } if (guo == null) { guo = new GraphUpdateObject(bounds); } else { guo.bounds = bounds; } guo.shape = null; } } else { GraphUpdateShape shape; // Used for compatibility with older versions var worldPoints = new Vector3[gus.points.Length]; for (int i = 0; i < gus.points.Length; i++) { worldPoints[i] = gus.transform.TransformPoint(gus.points[i]); } shape = new GraphUpdateShape(worldPoints, gus.convex, Matrix4x4.identity, gus.minBoundsHeight); if (guo == null) { guo = new GraphUpdateObject(); } guo.bounds = shape.GetBounds(); guo.shape = shape; } guo.nnConstraint = NNConstraint.None; guo.modifyWalkability = gus.modifyWalkability; guo.setWalkability = gus.setWalkability; guo.addPenalty = gus.penaltyDelta; guo.updatePhysics = gus.updatePhysics; guo.updateErosion = gus.updateErosion; guo.resetPenaltyOnPhysics = gus.resetPenaltyOnPhysics; guo.modifyTag = gus.modifyTag; guo.setTag = gus.setTag; }