示例#1
0
    public override void ActionUpdate(float timekey)
    {
        Vector3 position;

        float preferredDistance = distance + timekey * moveSpeed;

        if (!NeverdawnUtility.SamplePath(corners, distances, preferredDistance, out position) || preferredDistance > maxDistance)
        {
            Done();
            return;
        }

        Vector3 dir = (position - transform.position);

        dir.y = 0.0f;
        dir.Normalize();

        Vector2 fwdTurn = NeverdawnUtility.InputToForwardTurn(character.transform, dir, 1.0f);

        Vector3 forward = character.transform.forward;

        character.transform.forward = Vector3.RotateTowards(forward, dir, timekey * Mathf.PI * 2.0f * (turnSpeed / 360.0f), 0.0f);

        distance = distance + fwdTurn.x * timekey * moveSpeed;

        NeverdawnUtility.SamplePath(corners, distances, distance, out position);

        character.transform.position = position;

        RaycastHit rayHit;

        // experimental: stick to ground
        if (Physics.Raycast(character.transform.position + Vector3.up, Vector3.down, out rayHit, 3f, 1 << 9))
        {
            character.transform.position = rayHit.point;
        }
    }