- Home /
Animating sliding door, rotation problem
Hi
So I have a door prefab that I made which consists of a parent object and its 2 children, the left and right door, my intention is to create an elevator door.
I'm using a script in unity to animate the sliding doors with the following line of code.
LeftDoor.transform.Translate(Vector3.left * DoorSpeed * Time.deltaTime);
The problem occurs when I change the rotation of the door, since I only want to move the door 2 world units I check the x axis and stop when that position is equal to the original position of the door + 2. But that's not going to work if I rotate the door then I might have to check the Z axis instead and if I rotate the door 35 degrees or something else that's not entirely straight it's not going to work at all.
I could just do the animation in Blender but I feel that it's a lot more flexible to do these simple animations in Unity.
I'm looking for a way to move a transform in unity a specified number of world units regardless of its rotation.
Thanks
Answer by Piflik · Sep 17, 2011 at 07:25 PM
If you want to move an object in world coordinates, add Space.World to the transform.Translate:
LeftDoor.transform.Translate(-Vector3.right * DoorSpeed * Time.deltaTime, Space.World);
(there is no Vector3.left...)
Although I don't get why you would want to move sliding doors in world space. The movement should be in relation to the elevator's rotation, so Space.Self (the default behavior of transform.Translate) should be the way to go...
Vector3.left does exist even though the documentation doesn't mention it, however I think you misunderstood me I'm still having problem with the ter$$anonymous$$ology in unity. What I meant was, how do I know when I've moved a transform a specified number of units when doing an animation? Since it depends on the rotation of the transform which axis is going to increase.
Well...I was afraid I was reading the question incorrectly...
So try this:
var openPos : Vector3;
var closedPos : Vector3;
function Start() {
closedPos = transform.position;
openPos = transform.position - 2 * transform.right;
}
function Update() {
if((transform.position - openPos).magnitude > 0.1) {
transform.Translate((openPos - closedPos) * Time.deltaTime);
}
}
Answer by munaeem · Sep 09, 2012 at 01:10 PM
there is an example of that on angybots which can be found at assest stor for free