/// <summary> /// Record a reference to the Culling Group Behaviour so this Culling Group can have proper callbacks to the User-Defined script /// </summary> /// <param name="index">Index of Bounding Sphere in this Culling Group's Bounding Sphere Array</param> /// <param name="comp">Culling Group Behaviour linked to this Bounding Sphere</param> public void AddComponentRef(int index, CullingGroupBehavior comp) { cullGroupBehaveDict.Add(index, comp); }
void OnSceneGUI() { CullingGroupBehavior selfScript = (CullingGroupBehavior)target; //don't allow editing of radius while in Play mode if (Application.isPlaying) { return; } //for resetting Handle color to what it was originally Color originalColor = Handles.color; Handles.color = drawColor; //switch case handles drawing Handles at all //intersections of the disks that are drawn by the Gizmo //in the Monobehavior Vector3 posFromCenter = Vector3.zero; Vector3 vecDirec = Vector3.zero; for (int i = 0; i < 6; ++i) { switch (i) { case 0: vecDirec = Vector3.up; break; case 1: vecDirec = Vector3.down; break; case 2: vecDirec = Vector3.right; break; case 3: vecDirec = Vector3.left; break; case 4: vecDirec = Vector3.forward; break; case 5: vecDirec = Vector3.back; break; } //DRAW HANDLE posFromCenter = Handles.Slider(selfScript.transform.position + (vecDirec * selfScript.boundingSphereRad), //position vecDirec, //direction HandleUtility.GetHandleSize(selfScript.transform.position) * 0.1f, //handle size Handles.CubeCap, //handle shape 0.0f //snap amount ); float calcDist = Vector3.Distance(selfScript.transform.position, posFromCenter); //if radius was changed via Handle, record this frame in the Undo Stack //then apply the change if (calcDist != selfScript.boundingSphereRad) { Undo.RecordObject(selfScript, "CullingGroupBehavior_ModifyRadius"); selfScript.boundingSphereRad = calcDist; EditorUtility.SetDirty(target);//needs to be called so Undo Stack knows something was changed } } Handles.color = originalColor; }