Answers for "How to keep an object within a circle/sphere (radius) - NO RECTANGLE"
http://answers.unity.com/questions/1309521/how-to-keep-an-object-within-a-circlesphere-radius.html
The latest answers for the question "How to keep an object within a circle/sphere (radius) - NO RECTANGLE"Answer by grizzly48
http://answers.unity.com/answers/1309530/view.html
Hi,
I would simply check the distance.
I´m correct in the assumption, that we´re in the two-dimensional-space?
Vector2 center;
Vector2 position;
float maxDistance;
float actualDistance = Vector2.Distance(center, position);
if (actualDistance > maxDistance)
{
Vector2 centerToPosition = position - center;
centerToPosition.Normalize();
position = center + centerToPosition * maxDistance;
}Tue, 07 Feb 2017 13:33:36 GMTgrizzly48Answer by Bunny83
http://answers.unity.com/answers/1309526/view.html
Well, don't use max / min positions as they define a rectangle. What you want is defining a center point and a radius. Then just use [Vector3.ClampMagnitude][1] on the relative vector:
// C#
Vector3 v = newLocation - circleCenter;
v = Vector3.ClampMagnitude(v, circleRadius);
newLocation = circleCenter + v;
If the circle center and your location is not on the same "height" (y value) you can do:
// C#
circleCenter.y = newLocation.y;
Vector3 v = newLocation - circleCenter;
v = Vector3.ClampMagnitude(v, circleRadius);
newLocation = circleCenter + v;
[1]: https://docs.unity3d.com/ScriptReference/Vector3.ClampMagnitude.htmlMon, 06 Feb 2017 15:15:39 GMTBunny83Answer by CarterG81
http://answers.unity.com/answers/1309525/view.html
![Alt text](http://i.imgur.com/VNPoHyX.gif)
float radius = 400; //radius of *black circle*
Vector3 centerPosition = transform.localPosition; //center of *black circle*
float distance = Vector3.Distance(newLocation, centerPosition); //distance from ~green object~ to *black circle*
if (distance > radius) //If the distance is less than the radius, it is already within the circle.
{
Vector3 fromOriginToObject = newLocation - centerPosition; //~GreenPosition~ - *BlackCenter*
fromOriginToObject *= radius / distance; //Multiply by radius //Divide by Distance
newLocation = centerPosition + fromOriginToObject; //*BlackCenter* + all that Math
}
If the distance is < radius, it is within the circle. No need for any calculations.
If the distance is > radius, the object is outside the circle.
1. Determine the center position of the circle/radius. The radius of this circle is also the maximum limit.
2. Determine the distance between point A (circle/bounds) and B (object you want to limit; prevent movement outside of bounds A).
3. If the distance is greater than the radius, then do the following:
4. Get Vector3 **U** from B (object) minus A (circle).
**(U = B - A)**
5. Multiply by Radius
**(U x Radius)**
6. Divide by Distance
**(U / Distance)**
8. Position = U + A **(maxLocation = U + A)**Mon, 06 Feb 2017 15:14:10 GMTCarterG81