- Home /
How to limit gameobject movement to circle's circumference?
I have a gameObject (my camera/player controller) that I would like to keep restricted to the perimeter of a circle. I want to be able to move the object around the edge of the circle and look in towards the circle but I do not want the player to be able to enter the circle (yet). Also, I want to prevent the player from looking away from the circle, as it will not be allowed in the game's rules.
I have a quite basic understanding of code and Unityscript. I have been able to figure out much on my own so far, but I am lost when it come to the more 'advanced' techniques. Also, I have been coding in Java format with this game.
tl;dr : I want to keep an object restricted to the edge of a circle but allow it to move freely along that edge. How is this done, certain functions/whatever-theyre-called to be used. A direction to the correct page in the 'codex' would be greatly appreciated.
Thank you, and I hope to be able to present you with my game eventually.
Griffin.
Answer by aldonaletto · Jul 08, 2012 at 04:09 AM
You could use transform.RotateAround while the player is restricted, and enable regular movement otherwise:
var restricted: boolean; // set to restrict movement var center: Vector3; // circle center var rotateSpeed: float = 45; // rotate speed in degrees/second
function Update(){ if (restricted){ // when restricted, control only rotation around center: transform.RotateAround(center, Vector3.up, Input.GetAxis("Horizontal") rotateSpeed Time.deltaTime); } else { // otherwise use your regular movement script - like this: moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); ... } }
Thank you for the timely response, it seems to be exactly what I need to call in my script. I do, however, have a question.
Will this restrict the camera to be aimed towards the center (the Vector3) at all times? Or will this not affect the camera at all? I am having some trouble wording this in a way that will make it easily understandable...
Thanks again, this community ROC$$anonymous$$S!!!
RotateAround keeps the object in its original orientation relative to the center - if it was looking to the center, for instance, its transform will be kept facing the center while rotating around it. But a first person character usually has a child camera, and some script to control its direction. In the First Person Controller prefab, for instance, there's one $$anonymous$$ouseLook script attached to the character to make it turn left and right, and another $$anonymous$$ouseLook attached to the camera to turn it up and down - at least the first one should be disabled.