- Home /
I want to rotate my character 90 degrees but set the value of the rotation to 0
I am trying to make a 2d game but when I move my character he is looking away from the camera and when I go the other way he looks towards the camera and not right and left (the way I want it to look). I am an amatuer at scripting so this is the c# script I used for the player controls. Please help me solve this.
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(PlayerPhysics))]
public class PlayerController : MonoBehaviour {
// Player Handling
public float gravity = 20;
public float walkSpeed = 8;
public float runSpeed = 12;
public float acceleration = 30;
public float jumpHeight = 12;
private float animationSpeed;
private float currentSpeed;
private float targetSpeed;
private Vector2 amountToMove;
private PlayerPhysics playerPhysics;
private Animator animator;
void Start () {
playerPhysics = GetComponent<PlayerPhysics>();
animator = GetComponent<Animator>();
}
void Update () {
// Reset acceleration upon collision
if (playerPhysics.movementStopped) {
targetSpeed = 0;
currentSpeed = 0;
}
// If player is touching the ground
if (playerPhysics.grounded) {
amountToMove.y = 0;
// Jump
if (Input.GetButtonDown("Jump")) {
amountToMove.y = jumpHeight;
}
}
// Set animator parameters
animationSpeed = IncrementTowards(animationSpeed,Mathf.Abs(targetSpeed),acceleration);
animator.SetFloat("Speed",animationSpeed);
// Input
float speed = (Input.GetButton("Run"))?runSpeed:walkSpeed;
targetSpeed = Input.GetAxisRaw("Horizontal") * speed;
currentSpeed = IncrementTowards(currentSpeed, targetSpeed,acceleration);
// Set amount to move
amountToMove.x = currentSpeed;
amountToMove.y -= gravity * Time.deltaTime;
playerPhysics.Move(amountToMove * Time.deltaTime);
// Face Direction
float moveDir = Input.GetAxisRaw("Horizontal");
if (moveDir !=0) {
transform.eulerAngles = (moveDir>0)?Vector3.up * 180 :Vector3.zero;
}
}
// Increase n towards target by speed
private float IncrementTowards(float n, float target, float a) {
if (n == target) {
return n;
}
else {
float dir = Mathf.Sign(target - n); // must n be increased or decreased to get closer to target
n += a * Time.deltaTime * dir;
return (dir == Mathf.Sign(target-n))? n: target; // if n has now passed target then return target, otherwise return n
}
}
}
Is your character a sprite, or a 3D model? Also, what exactly do you mean by the value of the rotation? Do you mean adding 90 under one condition, and setting the rotation to 0 when the condition is false?
It is a 3d model and I want to set the rotation to 90 but I want the script to think it is set to 0 so that my script will work properly
I agree, Janus's solution should work fine. Just put the script on the empty gameObject.
Answer by JanusMirith · Oct 21, 2014 at 01:54 AM
I am not sure if this was what you needed but instead of doing this by a script you can reset the orientation of a game object by making a empty game object and putting the visuals your player as a child. Then rotate your visuals to face the correct way, have the script act on the parent object.
That way you have corrected the rotation without changing your script to do something it was not designed for.
Here is a link to some unity documentation explaining the method: http://docs.unity3d.com/Manual/HOWTO-FixZAxisIsUp.html
I already tried that and for some reason it messed up my entire script and I couldn't walk or anything but thanks for trying
Are you sure that you did it correctly, with the controller script on the parent class. You would need to remove the player physics script from your model.
Your answer
Follow this Question
Related Questions
Why does my camera still rotate in the opposite way? 0 Answers
Rotate objects by mouse 2 Answers
Rotation of Player isn't very accurate 0 Answers