- Home /
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?
Answer by Darmouth · Nov 08, 2013 at 05:19 AM
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 {
//Variables
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 = Vector3.zero;
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 != Vector3.zero){
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);
}
//Jumping
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);
} }
Answer by Orlean · Oct 13, 2013 at 09:59 AM
If you are using a standard FPS controller, then you can just rotate the graphics object.
$$anonymous$$y question asked How to do that. transform.Rotate doesn't work, neither does trying to modify transform.rotation.y directly. I don't know what I'm not doing.
Answer by DylanW · Oct 13, 2013 at 08:31 AM
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.
The character controller is already the parent of the model. How do I apply rotation to the model then? transform.Rotate doesn't do anything, and modifying transform.rotation.y also doesn't work.
Your answer
Follow this Question
Related Questions
Flip over an object (smooth transition) 3 Answers
C# 2d Always Rotate Facing Gameobject 1 Answer
making my space ship rotate then move. 0 Answers
Distribute terrain in zones 3 Answers
How do I fire a bullet where my player is facing? (C# 2D) 2 Answers