How to snap a model to the direction being moved in, without also rotating the character controller

I’m trying to create a topdown puzzler game, and i want the model to face the direction you’re moving. Everything I could find has me rotate the character controller, which then changes the movement direction of the character. Is there some way to rotate the model on a button press? or perhaps based on the direction the model is moving in, without rotating the character controller?

If you are using a standard FPS controller, then you can just rotate the graphics object.

I have an idea. Lets try adding an empty game object with a character controller attached to it. Then we set it as the parent of the model. Next we apply the rotating functionality to the model.

Huzzah! I figured it out. Posting the code here for all posterity. Does have a few bugs, but ultimately does what I want for this question.

using UnityEngine;
using System.Collections;

public class CharacterMovement : MonoBehaviour {

public GameObject player;
public float turnspeed=180f;
public float speed = 6.0F;
public float jumpSpeed = 8.0F; 
public float gravity = 20.0F;
private Vector3 moveDirection, moveVector =;

void Update() {
    CharacterController controller = GetComponent<CharacterController>();
    // is the controller on the ground?
    if (controller.isGrounded) {
        //Feed moveDirection with input.
        moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        moveVector = transform.TransformDirection(moveDirection);
        //Multiply it by speed.
        moveDirection *= speed;
		//Force the controller to pick a direction to turn when moving backwards.
		if (moveVector !={
			if(Vector3.Angle (transform.forward, moveVector) > 179){
				moveVector = transform.TransformDirection (new Vector3(.01f, 0, -1));
			player.transform.rotation = Quaternion.RotateTowards(player.transform.rotation, Quaternion.LookRotation (moveVector), turnspeed * Time.deltaTime);
        if (Input.GetButton("Jump"))
            moveDirection.y = jumpSpeed;
    //Applying gravity to the controller
    moveDirection.y -= gravity * Time.deltaTime;
    //Making the character move
    controller.Move (moveDirection * Time.deltaTime);