- Home /
Question by
NinjTsax · Jun 12, 2015 at 08:43 PM ·
movementmove an objectvector3.lerp
Move player to mouse position never go to exact position
Hello, I hope title is good to explain my problem i use this code to move my character to mouse position when i click. i search arround the forum to find for similar problem but nothing.
void onTouch ()
{
if(Input.GetMouseButtonDown(0))
{
if(!one_click) // first click no previous clicks
{
one_click = true;
timer_for_double_click = Time.time; // save the current time
target = Input.mousePosition;
target = Camera.main.ScreenToWorldPoint(target);
target.z = 0f;
speed = 2f;
}
else
{
one_click = false; // found a double click, now reset
speed = 4f;
}
}
if(one_click)
{
// if the time now is delay seconds more than when the first click started.
if((Time.time - timer_for_double_click) > delay)
{
//basically if thats true its been too long and we want to reset so the next click is simply a single click and not a double click.
one_click = false;
}
}
transform.position = Vector3.Lerp (transform.position, target, speed * Time.deltaTime);
}
ther problem is that when i click the character start move fast i think with 2f but i think when is near to the position slow down... so move so slow is like he arrived at the position but x and y change for a long time changing decimals only ex. mouse position 5,5,0 character position after fast move 4.69999.... this number increas slowy. My character is like move on ice... :/
any ideas?
Thanks !
Edit Solution !!!!
Now i find the solution... i post it here if someone have the same problem.
void onTouch ()
{
if(Input.GetMouseButtonDown(0))
{
if(!one_click) // first click no previous clicks
{
Debug.Log(Camera.main.ScreenToWorldPoint(Input.mousePosition));
one_click = true;
timer_for_double_click = Time.time; // save the current time
target = Input.mousePosition;
target = Camera.main.ScreenToWorldPoint(target);
target.z = 0f;
speed = 10;
}
else
{
one_click = false; // found a double click, now reset
speed = 20;
}
}
if(one_click)
{
// if the time now is delay seconds more than when the first click started.
if((Time.time - timer_for_double_click) > delay)
{
//basically if thats true its been too long and we want to reset so the next click is simply a single click and not a double click.
one_click = false;
}
}
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, target, step);
//transform.position = Vector3.Lerp (transform.position, target, speed * Time.deltaTime);
if(target == transform.position)
{
speed = 0f;
}
}
Comment