- Home /
3D Grid Movement
I would like a grid-based setup where whenever you press w/a/s/d or the arrow keys, you move a specified amount of units, and if you hold it, you repeat this for as long as it is held. If you release the button before you make it to the next point, you keep moving until you do. VISUALIZATION You'll always end up on one of these dots. (Each dot is one Unity unit apart, but this property can publicly be changed.)
Answer by Warpboy9 · Apr 12, 2021 at 09:00 PM
Hi @chirpywiz711 , this may be the thing you're looking for (or not) :
// Player = your sphere (if the script is on the object no need of "Player." everywhere)
GameObject Player;
// This is if you want a little delay and that your sphere doesn't go super fast
bool movementOnGoing = true;
// If you want to see them teleport instead of moving to the other case, make this smaller (It's the time that it takes to move the Player)
float smoothSpeed;
public float movementUnit = 1;
float negativeMovementUnit;
Vector3 Movement;
Vector3 desiredPosition;
Vector3 smoothPosition;
void Awake(){
Player = GameObject.Find("Player");
negativeMovementUnit = (-1 * movementUnit);
}
void Update(){
if (movementOnGoing == true){
if (Input.GetKeyDown(KeyCode.A)) Movement = new Vector3(negativeMovementUnit, 0.0f, 0.0f);
if (Input.GetKeyDown(KeyCode.S)) Movement = new Vector3(0.0f, 0.0f, negativeMovementUnit);
if (Input.GetKeyDown(KeyCode.D)) Movement = new Vector3(movementUnit, 0.0f, 0.0f);
if (Input.GetKeyDown(KeyCode.W))Movement = new Vector3(0.0f, 0.0f, movementUnit);
movementOnGoing = false;
desiredPosition = Player.transform.position + Movement;
}
smoothPosition = Vector3.Lerp(Player.transform.position, desiredPosition, smoothSpeed);
Player.transform.position = smoothPosition;
if (Player.transform.position == desiredPosition) { Movement = new Vector3(0.0f, 0.0f, 0.0f); movementOnGoing = true;}
}
Also, I'm not quite sure about the "GetKeyDown" because I'm currently using the new Unity Input System.
If any more questions, just let me know. Have a good one!
Your answer
Follow this Question
Related Questions
2D Game, Player Not to move if a wall is next to it C# 1 Answer
Grid-based movement with auto-move 1 Answer
How do I create WASD controls for a fps? 3 Answers
store the user touch input 0 Answers
2D Isometric grid movement direction 0 Answers