3D runner, Having problems when the character makes a turn

Hello, i am having a problem with my character, i am doing a 3D runner game, and when my Character makes a turn, all the commands are changed.

in this Script my character is running automatic like a 3D runner, i can jump and move to right and left, but when my trigger enters, all the command go wrong, like when i press “A” he moves back and when i click “D” he moves forward(like a speed boost, since is a runner)

PS: the Anglo in the trigger part is set to 90 in the Inspector

i am really sorry about my english, but i hope all can understand

using UnityEngine;
using System.Collections;

public class PlayerControl : MonoBehaviour {
// Use this for initialization

public GameControlScript control;
CharacterController controller;
public float speed = 6.0f;
public float jumpSpeed = 20.0f;
public float gravity = 20.0f;
private Vector3 moveDirection;

private float verticalSpeed = 0;

public CountdownScript count;  //CountdownScript instance
public PauseMenuScript pause;  //PauseMenuScript instance
//audio source reference variables
public AudioSource powerupCollectSound;
public AudioSource jumpSound;
public AudioSource snagCollectSound;

void Start () {
	//Debug.Log("Inside player control script start");
	controller = GetComponent<CharacterController>();
	moveDirection = Vector3.zero;


// Update is called once per frame
void  Update (){
	//accelerometer and touch detection

	if (count.isCountDown) 
		transform.localPosition += transform.forward * speed * Time.deltaTime;
	//check if grounded and countdown is done with
		if (controller.isGrounded) {
			// We are grounded, so recalculate
			verticalSpeed = 0;
			// move direction directly from axes
			//transform.localPosition += transform.forward * speed * Time.deltaTime;
			//check if game is paused
				gameObject.GetComponent<AudioSource>().enabled = true;
				gameObject.GetComponent<AudioSource>().enabled = false;
			moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, 0); // Controla o Speed do personagem para os lados

			moveDirection = transform.TransformDirection(moveDirection);
			moveDirection *= speed;

			if (Input.GetButton ("Jump")) {

				gameObject.GetComponent<AudioSource>().enabled = false;
				//				moveDirection.z = jumpSpeed;

				moveDirection = transform.forward * jumpSpeed;
				moveDirection.y = jumpSpeed;

				verticalSpeed = jumpSpeed;


			gameObject.GetComponent<AudioSource>().enabled = false;
		// Apply gravity
		verticalSpeed -= gravity * Time.deltaTime;

		moveDirection = new Vector3(Input.GetAxis ("Horizontal")* speed, verticalSpeed, 0);
		// Move the controller
		controller.Move(moveDirection * Time.deltaTime);

void OnTriggerEnter(Collider other){

	if (other.gameObject.name == "Trigger de curva") {

		Quaternion PersonagemRotation;
		PersonagemRotation	= Quaternion.Euler (0,
		                                        0 +   other.gameObject.GetComponent<TriggerCurvaScript>().Anglo,
		transform.rotation = Quaternion.Slerp(transform.rotation, PersonagemRotation, 1);


You need to modify the horizontal movement value based off the players current rotation. Looks like your issue is on lines 48 and 84.

Old line 48:
moveDirection = new Vector3(Input.GetAxis(“Horizontal”), 0, 0);
New line 48:
float dir = Input.GetAxis(“Horizontal”) == 1 ? transform.right : transform.left;
moveDirection = new Vector3(dir, 0, 0);

And then do the same thing to line 84.