自动网格运动

时间:2017-02-20 06:23:36

标签: c# unity3d

我想知道如何修改我的敌人的代码,以便能够在我的网格中自动移动?

这是我的代码:

[使用System.Collections; 使用UnityEngine;

class Enemy:MonoBehaviour {

private float moveSpeed = 50f;
private float gridSize = 18f;
private enum Orientation {
    Horizontal,
    Vertical
};
private Orientation gridOrientation = Orientation.Vertical;
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;
}

} ]

0 个答案:

没有答案