- Home /
How to get distance from position to transform bounds
Hey guys, this has been bugging me for some days now. Quite new to Unity, and it is possible that I misunderstood some concepts, so bear with me, please :).
I am trying to script a camera so that it can orbit a transform and zoom in right to the edge. The focal point of the camera is the transform pivot. The transform does not have the pivot right in the center, so I have to set the minimum distance of the camera as the max(distances between pivot and object bounds).
Is there any way to calculate this?
Answer by valyard · Nov 07, 2012 at 01:59 PM
Do you use Renderer.bounds? Because it has center property which is the mesh's geometrical center. So you could orbit around it with max(bounds.extents.x, bounds.extents.y, bounds.extents.x) radius.
I do use it, but it seems my camera is centered on the transform pivot and not the geometrical center. I will try to set the camera focus point on the geometrical center and use your sugestion. If it works i will post the script later for other people to use.
I ended up using this:
distance$$anonymous$$in = $$anonymous$$athf.$$anonymous$$ax($$anonymous$$athf.Abs(Get$$anonymous$$eshBoundingBox(target).max.x - target.localPosition.x),
$$anonymous$$athf.Abs(target.localPosition.x - Get$$anonymous$$eshBoundingBox(target).$$anonymous$$.x),
$$anonymous$$athf.Abs(Get$$anonymous$$eshBoundingBox(target).max.y - target.localPosition.y),
$$anonymous$$athf.Abs(target.localPosition.y - Get$$anonymous$$eshBoundingBox(target).$$anonymous$$.y),
$$anonymous$$athf.Abs(Get$$anonymous$$eshBoundingBox(target).max.z - target.localPosition.z),
$$anonymous$$athf.Abs(target.localPosition.z - Get$$anonymous$$eshBoundingBox(target).$$anonymous$$.z));
where Get$$anonymous$$eshBoundingBox is:
static public Bounds Get$$anonymous$$eshBoundingBox(Transform transform) {
GameObject gameObj = transform.gameObject;
$$anonymous$$eshRenderer[] meshFilter = gameObj.GetComponentsInChildren<$$anonymous$$eshRenderer>();
if (meshFilter.Length>0)
{
Bounds bounds = meshFilter[0].bounds;
for (int i=1; i<meshFilter.Length; i++)
{
bounds.Encapsulate(meshFilter[i].bounds);
}
return bounds;
}
else return new Bounds();
}
Doesn't seem right. You are getting distance aligned with axes, not distance from camera. Also why would you have more than one $$anonymous$$eshRenderer? And it would be a good idea to call Get$$anonymous$$eshBoundingBox just once and save it to a variable.
Distance aligned with axis is what i need. I want the $$anonymous$$imum distance to be the maximum of how much the target extends on any axis.
Agree about using just one $$anonymous$$eshRenderer and calling Get$$anonymous$$eshBoundingBox only once, will change my code.
Your answer
Follow this Question
Related Questions
Please help finding center of object 1 Answer
Procedural object generation, objects overlap each other 1 Answer
modifying renderer.materials resets scaling of renderer.bounds until transform.position is updated 0 Answers
How to grab position and bounds of Trackables in real time (AR Foundation)? 0 Answers
Change Sprite Pivot/Bounds from Script 2 Answers