Editing the Character Controller? Sort of...

What i am trying to do is make a top down 3d rpg. It will control like a top down fps however. Rotating the character to face the cursor. WASD to move left/right up/down. What i currently have is a camera, with an FPS script on it. And a character with the mouse look script. The character is a child of the camera. So, wasd moves the camera and the character, and the looking script only affects the rotation of the player. Now for collision etc, im trying to place the Character controllers position where the player is located, not the camera. The FPS script gets the controller, and position’s it, moves it, etc. But that in turn places the transform in the same position. Is there a way to leave them linked, but have the controller offset?

–I know there are other ways of accomplishing the same thing, or something similar, or better. But i’d like to get a prototype going with many of the things unity already has. Why reinvent the wheel? Especially if that wheel is a script with a lot of things i couldn’t come up with on my own. ;). I just figured this would be the easiest solution that i could grasp.

Hey so your issue is actually simple, I just made a basic interface for an RPG last night…
What you want to do is attach all the movement to the character and not the camera, that way your toon will move and the camera will follow and you are free to use the mouse however you need.

in my example I use the keyboard to rotate/move the toon, but you can substitute in the mouse inputs.

var speed = 6.0;
var jumpSpeed = 8.0;
var gravity = 20.0;

private var moveDirection = Vector3.zero;
private var grounded : boolean = false;

function FixedUpdate() {
	if (grounded) {
		// We are grounded, so recalculate movedirection directly from axes
		moveDirection = new Vector3(0, 0, Input.GetAxis("Vertical"));
		moveDirection = transform.TransformDirection(moveDirection);
		moveDirection *= speed;
		
		if (Input.GetButton ("Jump")) {
			moveDirection.y = jumpSpeed;
		}
	}

	// Apply gravity
	moveDirection.y -= gravity * Time.deltaTime;
	
	// Move the controller
	var controller : CharacterController = GetComponent(CharacterController);
	var flags = controller.Move(moveDirection * Time.deltaTime);
	grounded = (flags  CollisionFlags.CollidedBelow) != 0;
	
	transform.Rotate(Vector3.up * (Input.GetAxis("Horizontal"))*speed);
}

@script RequireComponent(CharacterController)

My camera is up above the toon looking down on it and is a child of the character, but it has no script attached to it