- Home /
How can I Stop grid based movement on One or more access?
im trying to stop grid based movement if the tile next is blocked. I can use raycasts to check in direction of next tile to check if it is blocked but i'm not sure how to stop movement in only one direction. The grid movement works great but if it hits a collider it breaks, So i need to stop controller working in certain directions!
Any tips would be greatly appreciated. movement script is shown below.
class GridMove : MonoBehaviour
{
private float moveSpeed = 6f;
private float gridSize = 1f;
private enum Orientation
{
Horizontal,
Vertical
};
private Orientation gridOrientation = Orientation.Horizontal;
private bool allowDiagonals = true;
private bool correctDiagonalSpeed = true;
private Vector2 input;
private bool isMoving = false;
private Vector3 startPosition;
private Vector3 endPosition;
private float t;
private float factor;
NextTileCheck nextTileCheck;
void Awake()
{
nextTileCheck = GetComponentInChildren<NextTileCheck>();
}
public void Update()
{
if (!isMoving)
{
input = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
Debug.Log(input);
if (!allowDiagonals)
{
if (Mathf.Abs(input.x) > Mathf.Abs(input.y))
{
input.y = 0;
}
else {
input.x = 0;
}
}
if (input != Vector2.zero)
{
StartCoroutine(move(transform));
}
}
}
public IEnumerator move(Transform transform)
{
isMoving = true;
startPosition = transform.position;
t = 0;
if (gridOrientation == Orientation.Horizontal)
{
endPosition = new Vector3(startPosition.x + System.Math.Sign(input.x) * gridSize,
startPosition.y, startPosition.z + System.Math.Sign(input.y) * gridSize);
}
else {
endPosition = new Vector3(startPosition.x + System.Math.Sign(input.x) * gridSize,
startPosition.y + System.Math.Sign(input.y) * gridSize, startPosition.z);
}
if (allowDiagonals && correctDiagonalSpeed && input.x != 0 && input.y != 0)
{
factor = 0.7071f;
}
else {
factor = 1f;
}
while (t < 1f)
{
t += Time.deltaTime * (moveSpeed / gridSize) * factor;
transform.position = Vector3.Lerp(startPosition, endPosition, t);
yield return null;
}
isMoving = false;
yield return 0;
}
}
Your answer
Follow this Question
Related Questions
How to make the sprite move a certain amount of pixels when a key is pressed? 1 Answer
Why does the object not move on the Z-Axis? 0 Answers
How can i add movement distance into my code?,how can i add distance into this movement code? 1 Answer
Grid-based movement with auto-move 1 Answer
Keyboard not working in build (is working in editor) 0 Answers