Here is my movement code for the player:
function Go ()
{
horizontal = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
vertical = Input.GetAxis("Vertical") * speed * Time.deltaTime;
if (transform.position.x > 7 || transform.position.x < -7)
{
if (transform.position.x > 7)
transform.position.x = 7;
else
transform.position.x = -7;
horizontal = 0;
}
else
transform.Translate(horizontal,0,0);
if (transform.position.y > 9 || transform.position.y < -1)
if (transform.position.y > 9)
transform.position.y = 9;
else
transform.position.y = -1;
else
transform.Translate(0,vertical,0);
}
(WARNING: PSEUDO CODE AHEAD) My problem is when the player attempts to move outside of the boundaries, they do for a split second, THEN the code forces them back. This turns into a player constantly twitching if they constantly try to cross the boundary. What I want, is to grab the player's position from what would happen if they attempted to cross. This is what I mean by what I want:
if(transform.Translate(horizontal,0,0) makes transform.position.x == 7 or -7)
transform.position.x = 7 or -7;
//depending on which side of the screen they're on.
Now I guess that I could make this happen by having a clone box off screen move first, as in:
if(clone.transform.Translate(horizontal,0,0) makes
clone.transform.position.x == 7 or -7)
transform.position.x = 7 or -7;
But I think that would eat up too much resources, and that there is a better solution. Or am I wrong?