- Home /
Opening and closing drawers with start and end points
Hey there guys, I'm having a fair bit of trouble with opening and closing drawers, with what i have at the moment when i open and close the drawers, they open and retract at different positions.. I don't know how to better describe this, so i have provided a quick Video demonstration to provide the answer I am looking for.
Video Link: https://youtu.be/zeJ9MgL0ihI
My current code:
var start : Vector3;
var end : Vector3;
var opening : boolean = false;
var closed : boolean = true;
public var smoothTime : float = 0.1;
public var maxSpeed = 8;
public var openDist = 0.2;
function Start ()
{
start = transform.position;
closed = true;
}
function Update ()
{
if(opening && closed)
{
//transform.position = Vector3.SmoothDamp(origin, origin + transform.forward * openDist, velocity, smoothTime, maxSpeed);
transform.position = Vector3.Lerp(start, start + transform.forward * openDist, Time.deltaTime * smoothTime);
closed = false;
end = transform.position;
}
if(!opening && !closed)
{
//transform.position = Vector3.SmoothDamp(origin, origin - transform.forward * openDist, velocity, smoothTime, maxSpeed);
transform.position = Vector3.Lerp(end, end - transform.forward * openDist, Time.deltaTime * smoothTime);
closed = true;
}
}
function open ()
{
opening = !opening;
}
I am trying to achieve a non animated script here, due to I just want to be able to add the script to the drawer and that's it, not have to make animations for each drawer i want to open/close
Answer by Pavulon · Apr 06, 2017 at 10:07 PM
Your code is being a mixture of animation handled by lerp
feeded with delta time with instantaneous state change handled by opening
and closed
booleans. If you just want them to open / close instantaneously on click then resign from lerp and just assign final position, which is for opened state: start + transform.forward * openDist
and for closed state: start
If you want animation then the boolean for closed shouldn't be set immediately inside the first if
, but rather after opening time has passed, so you need a time counter for opening / closing animation. When animation is done (`counter >= animationTime`) make sure to assign final position (to avoid overshooting position) and change the opened
boolean state to !opened
.
Your answer
Follow this Question
Related Questions
How to set GameObject's component to an instance of an object 0 Answers
PlayerPrefs on gameObject 1 Answer
inspector,Component 0 Answers
Transform.LocalScale Script Problem. Please help. 2 Answers
How can I tell what prefab a GameObject belongs to? 2 Answers