Skip to content

Instantly share code, notes, and snippets.

@GeorgiyRyaposov
Created September 30, 2021 09:27
Show Gist options
  • Save GeorgiyRyaposov/d3af6f64c07e842077a1e789002a5152 to your computer and use it in GitHub Desktop.
Save GeorgiyRyaposov/d3af6f64c07e842077a1e789002a5152 to your computer and use it in GitHub Desktop.
Debug capsule or sphere even from not monobehaviours
private List<GameObject> _debug = new List<GameObject>();
private void ClearDebug()
{
for (int i = _debug.Count - 1; i >= 0; i--)
{
GameObject.Destroy(_debug[i]);
}
_debug.Clear();
}
private void Debug(Vector3 pos, Color color)
{
Debug(pos, Vector3.one, color);
}
private void Debug(Vector3 pos, Vector3 scale, Color color)
{
var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position = pos;
sphere.transform.localScale = scale;
sphere.GetComponent<MeshRenderer>().material.SetColor("_Color", color);
var Collider = sphere.GetComponent<Collider>();
GameObject.Destroy(Collider);
_debug.Add(sphere);
}
void DebugCapsule(Vector3 p1, Vector3 p2, float radius, Vector3 dir, float distance, Color color)
{
var shape = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
GameObject.Destroy(shape.GetComponent<Collider>());
Vector3 scale; // calculate desired scale
var diam = 2f * radius; // calculate capsule diameter
scale.x = diam; // width = capsule diameter
scale.y = Vector3.Distance(p2, p1) + diam; // capsule height
scale.z = distance + diam; // volume length
shape.localScale = scale; // set the rectangular volume size
// set volume position and rotation
shape.position = (p1 + p2 + dir.normalized * distance) / 2;
shape.rotation = Quaternion.LookRotation(dir, p2 - p1);
shape.GetComponent<MeshRenderer>().material.SetColor("_Color", color);
_debug.Add(shape.gameObject);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment