- Home /
Board Game Movement
Trying to figure out the best way to do this. What I'm trying to do is have a map with rooms.
r===r
||
r
Where the player can only click on the squares adjacent to them. I tried with raycasting, but that didn't work right. (It would let them go wherever.)I'd just like them to be limited to the adjacent squares, but can't figure this one out. I have the movement script, and I've tried grid move.
using System.Collections;
using UnityEngine;
class GridMove : MonoBehaviour {
private float moveSpeed = 3f;
private float gridSize = 1f;
private enum Orientation {
Horizontal,
Vertical
};
private Orientation gridOrientation = Orientation.Horizontal;
private bool allowDiagonals = false;
private bool correctDiagonalSpeed = true;
private Vector2 input;
private bool isMoving = false;
private Vector3 startPosition;
private Vector3 endPosition;
private float t;
private float factor;
public void Update() {
if (!isMoving) {
input = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
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;
}
}
But it won't keep them in the grid. The grid I have is:
using UnityEngine;
using System.Collections;
public class Grid : MonoBehaviour
{
[ SerializeField ] private Transform _transform;
[ SerializeField ] private Material _material;
[ SerializeField ] private Vector2 _gridSize;
[ SerializeField ] private int _rows;
[ SerializeField ] private int _columns;
void Start()
{
UpdateGrid();
}
public void UpdateGrid()
{
_transform.localScale = new Vector3( _gridSize.x, _gridSize.y, 1.0f );
_material.SetTextureScale( "_MainTex", new Vector2( _columns, _rows ) );
}
}
With my grid texture on it. For some reason I can't keep them on the grid or make them move only to rooms that are actually there. I have triggers set up for the rooms, but everything seems to get ignored.
Any thoughts would be helpful.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Assigning UV Map to model at runtime 0 Answers
How to check if your character is falling 2D - C# 1 Answer
Bool is not turning false 1 Answer