Hello, I took the GridMove script (http://www.unifycommunity.com/wiki/index.php?title=GridMove) and am trying to modify it to move according to mouse position. Here is my current script:
rivate var mouseButton1DownPoint : Vector2;
private var mouseButton1DownTerrainHitPoint : Vector2;
private var raycastLength : float = 200.0;
private var selectedUnit : GameObject;
var walkSpeed : float = 1.0;
var runSpeed : float = 2.0;
var gridSize : int = 1;
enum Orientation {Horizontal, Vertical}
var gridOrientation = Orientation.Horizontal;
var allowDiagonals = true;
var correctDiagonalSpeed = true;
private var input = Vector2.zero;
function Update () {
if (Input.GetKeyDown(KeyCode.Mouse0)) {
mouseButton1DownPoint = Input.mousePosition;
var hit : RaycastHit;
var ray = Camera.main.ScreenPointToRay (mouseButton1DownPoint);
if (Physics.Raycast (ray, hit, raycastLength))
{
if (hit.collider.name == "Terrain")
{
mouseButton1DownTerrainHitPoint = hit.point;
MoveSelectedUnitToPoint(mouseButton1DownTerrainHitPoint);
}
}
}
}
function MoveSelectedUnitToPoint(destinationPoint : Vector2) {
selectedUnit = gameObject.Find("Capsule");
selectedUnit.SendMessage("MoveToPoint", destinationPoint);
}
function MoveToPoint(destinationPoint : Vector2) {
while (input == Vector2.zero) {
GetAxes(destinationPoint);
tx = 0.0;
yield;
}
startPosition = transform.position;
endPosition = gridOrientation == Orientation.Horizontal?
Vector3(Mathf.Round(transform.position.x), 0.0, Mathf.Round(transform.position.z)) +
Vector3(System.Math.Sign(input.x)*gridSize, 0.0, System.Math.Sign(input.y)*gridSize)
:
Vector3(Mathf.Round(transform.position.x), Mathf.Round(transform.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);
transform.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(destinationPoint);
}
function GetAxes(destinationPoint : Vector2) {
input = Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
if (destinationPoint.x > transform.position.x)
{
while (transform.position.x < destinationPoint.x)
{
input.x = 1;
}
}
}
the point of emphasis here is GetAxes function
Everytime I click an x position greater than transform position, unity freezes and I must use task manager to close it.
Any help is appreciated. Thank you!