- Home /
 
Falling through terrain with Grid Move Script
I have narrowed it down to just this script because it doesn't happen if I use my simple move script. I must admit I'm very very new and not good at scripting but I can't seem to figure out why as soon as I hit play and then hit a direction he free falls. If I hit nothing he just floats there.
pragma strict
var walkSpeed : float = 1.0; var runSpeed : float = 2.0; var gridSize : int = 1; enum Orientation {Horizontal, Vertical} var gridOrientation = Orientation.Horizontal; var allowDiagonals = false; var correctDiagonalSpeed = true; private var input = Vector2.zero;
function Start () { var myTransform = transform; var startPosition : Vector3; var endPosition : Vector3; var t : float; var tx : float; var moveSpeed = walkSpeed;
 while (true) {
     while (input == Vector2.zero) {
         GetAxes();
         tx = 0.0;
         yield;
     }
 
     transform.forward = Vector3.Normalize(new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical")));
     startPosition = myTransform.position;
     endPosition = gridOrientation == Orientation.Horizontal?
         Vector3(Mathf.Round(myTransform.position.x), 0.0, Mathf.Round(myTransform.position.z)) +
         Vector3(System.Math.Sign(input.x)*gridSize, 0.0, System.Math.Sign(input.y)*gridSize)
         :
         Vector3(Mathf.Round(myTransform.position.x), Mathf.Round(myTransform.position.y), 0.0) +
         Vector3(System.Math.Sign(input.x)*gridSize, System.Math.Sign(input.y)*gridSize, 0.0);
     t = tx;
     while (t < 1.0) {
     //    moveSpeed = Input.GetButton("Run")? runSpeed : walkSpeed;
     t += Time.deltaTime * (moveSpeed/gridSize) * (correctDiagonalSpeed && input.x != 0.0 && input.y != 0.0? .7071 : 1.0);
     myTransform.position = Vector3.Lerp(startPosition, endPosition, t);
     yield;
     }
     tx = t - 1.0;    // Used to prevent slight visual hiccups on "grid lines" due to Time.deltaTime variance
     GetAxes();
 }
 
               }
function GetAxes () { input = Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")); if (allowDiagonals) return; if (Mathf.Abs(input.x) > Mathf.Abs(input.y)) input.y = 0.0; else input.x = 0.0; }
Your answer
 
             Follow this Question
Related Questions
How to Move an Object down until a certain point then activate a function 1 Answer
Limit MoveTowards for one step at a time movement 3 Answers
Can't move when fall from high 1 Answer
Movement by increment jerkiness 1 Answer
PROBLEM need Fix! 0 Answers