- Home /
Character rotation
Hey,
Help me please to find out what is the best code to use in order to rotate my character along its' own Y axis. I use simple script to do that, but when I rotate the character, it is still walking the default way. So to say rotation doesn't affect the direction he walks in. How to establish this correspondence?
the script..
public var speed : float = 5.0f; public var character : GameObject;
function Update () {
var r_a_hor: float = (Input.GetAxis("RightAnalogHorizontal"))*102.4;
var r_a_ver: float = (Input.GetAxis("RightAnalogVertical"))*102.4;
if(r_a_hor < -30)
{
character.transform.Rotate(0, r_a_hor * Time.deltaTime, 0);
}
if(r_a_hor > 30)
{
character.transform.Rotate(0, r_a_hor * Time.deltaTime, 0);
}
}
Its my trial and error script so it might not make any sense at all.. :) Thanks in advance!
mmm there u go...
void FixedUpdate () { float h = Input.GetAxis("Horizontal"); // setup h variable as our horizontal input axis
float v = Input.GetAxis("Vertical"); // setup v variables as our vertical input axis
anim.SetFloat("Speed", v); // set our animator's float parameter 'Speed' equal to the vertical input axis
anim.SetFloat("Direction", h); // set our animator's float parameter 'Direction' equal to the horizontal input axis
anim.speed = animSpeed; // set the speed of our animator to the public variable 'animSpeed'
//anim.SetLookAtWeight(lookWeight); // set the Look At Weight - amount to use look at I$$anonymous$$ vs using the head's animation
currentBaseState = anim.GetCurrentAnimatorStateInfo(0); // set our currentState variable to the current state of the Base Layer (0) of animation
//Controls the movement speed
if(v <= 0.0f)
{
mesh$$anonymous$$oveSpeed = -5;
}
else
{
mesh$$anonymous$$oveSpeed = -11;
}
if(anim.layerCount ==2)
{
layer2CurrentState = anim.GetCurrentAnimatorStateInfo(1); // set our layer2CurrentState variable to the current state of the second Layer (1) of animation
}
//Jump state
if(Input.GetButton("Jump"))
{
anim.SetBool ("Jump", true);
}
else
{
anim.SetBool ("Jump", false);
}
//Run state
if(Input.GetButton("Speed"))
{
anim.SetBool ("Run", true);
}
else
{
anim.SetBool ("Run", false);
}
/*Reload weapon state
if(Input.GetButtonDown("Fire1"))
{
anim.SetBool("Reloading", true);
}
else
{
anim.SetBool("Reloading", false);
}
//Switch weapon state
if (layer2CurrentState.nameHash != reloadState || currentBaseState.nameHash != switchWeaponState)
{
if(Input.GetButtonUp("Fire2"))
{
anim.SetBool("SwitchWeapon", true);
}
}
if (layer2CurrentState.nameHash == switchWeaponState)
{
anim.SetBool("SwitchWeapon", false);
}*/
}
}
And that is the first part, sorry for mess!
using UnityEngine; using System.Collections;
// Require these components when using this script
[RequireComponent(typeof (Animator))]
[RequireComponent(typeof (CapsuleCollider))]
[RequireComponent(typeof (Rigidbody))]
public class PlayerControlScript : $$anonymous$$onoBehaviour
{ [System.NonSerialized]
public float mesh$$anonymous$$oveSpeed = 4.0f;
[System.NonSerialized]
public float animSpeed = 1.5f;
// a public setting for overall animator animation speed
private Animator anim;
// a reference to the animator on the character
private AnimatorStateInfo currentBaseState;
// a reference to the current state of the animator, used for base layer
private AnimatorStateInfo layer2CurrentState; // a reference to the current state of the animator, used for layer 2
static int reloadState = Animator.StringToHash("Layer2.Reload"); // and are used to check state for various actions to occur
static int switchWeaponState = Animator.StringToHash("Layer2.WeaponSwap");
void Start ()
{
// initialising reference variables
anim = GetComponent<Animator>();
if(anim.layerCount ==2)
anim.SetLayerWeight(1, 1);
}
void OnAnimator$$anonymous$$ove() //Tells Unity that root motion is handled by the script
{
if(anim)
{
Vector3 newPosition = transform.position;
newPosition.z += anim.GetFloat("Speed")* mesh$$anonymous$$oveSpeed * Time.deltaTime;
newPosition.x += anim.GetFloat("Direction") * mesh$$anonymous$$oveSpeed * Time.deltaTime;
transform.position = newPosition;
}
}
this script is from tutorial and its for the animation, as far as i got it. But I wanted to make one to control the camera.
Your answer
![](https://koobas.hobune.stream/wayback/20220613142930im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Is there a way to lock my camera's rotation and movement on certain axis? 2 Answers
Rotation eulerangles not adjusting correctly... 2 Answers
How to modify the value of an axis without touching to the others ? 1 Answer
Smooth rotation about global axis instead of local axis. 1 Answer
How to lock character controller rotation axis? (Java) 1 Answer