- Home /
This question was
closed Feb 28, 2017 at 07:53 PM by
Krokozor for the following reason:
The question is answered, right answer was accepted
How do i get world position of collider if it inside multiple scaled gameobjects?
I want to get matrix wich will put vertices on sphere collider.
I wrote this:
[ExecuteInEditMode()]
[RequireComponent(typeof(SphereCollider))]
public class SphereColliderTest : MonoBehaviour {
Vector3[] _sphereVerts;
int[] _sphereTris;
SphereCollider col;
void OnEnable() {
col = GetComponent<SphereCollider>();
GameObject primitive = GameObject.CreatePrimitive(PrimitiveType.Sphere);
Mesh result = primitive.GetComponent<MeshFilter>().sharedMesh;
_sphereVerts = result.vertices;
_sphereTris = result.triangles;
DestroyImmediate(primitive);
}
void Update () {
Debuger.ClearGeneric();
Vector3[] v = new Vector3[_sphereVerts.Length];
Vector3 tScale = transform.lossyScale;
float r = Mathf.Max(Mathf.Abs(tScale.x), Mathf.Abs(tScale.y), Mathf.Abs(tScale.z)) * (col.radius / 0.5f);
Vector3 cr = new Vector3(r, r, r);
Matrix4x4 mr = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one) * Matrix4x4.TRS(Vector3.Scale(col.center, tScale), Quaternion.identity, cr);
for (int i = 0; i < _sphereVerts.Length; i++) {
v[i] = mr.MultiplyPoint3x4(_sphereVerts[i]);
}
Debuger.AddWireMesh(v, _sphereTris, Color.blue);
}
}
and, well, it actualy works just fine. but when i put sphere inside another scaled object i have no clue what unity does. how do i put vertices where i want in that case?
Comment
Oh. If anybody ever need answer: collider have BOUNDS. and bounds are actualy give all needed values
Follow this Question
Related Questions
How come certain Children don't cast an Overlapsphere? 1 Answer
Mesh Collider from 3d max animation? 1 Answer
Crouch in FPS changes player scale not controller height 1 Answer
Warning: BoxColliders does not support negative scale or size 4 Answers
Boxcollider is much bigger than the actual Object (imported from Blender) 2 Answers