- Home /
Getting My Character to Move
My character currently has the below script attached and moves when playing in PC by holiding left arrow or right arrow to move left and right respectively. I want to be able Vto do left and right movement on deviceV by tilting device left and right. Game is for android and is done to fit portrait. Within **start()**I have gyro code and withing FixedUpdate() I have accelerometer code to try this. Most of other code is for the normal movements of the character on PC. Can anyone help me understand why it isnt working at the minute? Currently when the device is tilted toward player the charatcer moves right... if the minus is removed from dir.x = -Input.acceleration.y; tilting toward you moves player left...I want to move left and right but tilting left and right to do so ?
using UnityEngine;
using System.Collections;
// Require these components when using this script
[RequireComponent(typeof (Animator))]
[RequireComponent(typeof (CapsuleCollider))]
[RequireComponent(typeof (Rigidbody))]
public class PlayerControl_S : MonoBehaviour
{
[System.NonSerialized]
public float meshMoveSpeed = 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
public float movementScale;
public Vector3 dir;
void Start ()
{
dir = transform.position;
dir.y = Vector3.Dot (Input.gyro.gravity, Vector3.up) * meshMoveSpeed;
transform.position = dir;
// initialising reference variables
anim = GetComponent<Animator>();
if(anim.layerCount ==2)
anim.SetLayerWeight(1, 1);
}
void OnTriggerEnter (Collider other)
{
if (other.tag == "Coin")
{
audio.Play();
}
}
void OnAnimatorMove() //Tells Unity that root motion is handled by the script
{
if(anim)
{
Vector3 newPosition = transform.position;
newPosition.z += anim.GetFloat("Speed")* meshMoveSpeed * Time.deltaTime;
newPosition.x += anim.GetFloat("Direction") * meshMoveSpeed * Time.deltaTime;
transform.position = newPosition;
}
}
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", 1f); // 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 IK 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
//Vector3 dir = Vector3.zero;
if (Input.deviceOrientation == DeviceOrientation.Portrait)
{
dir.x = -Input.acceleration.y;
//dir.x = Input.acceleration.x;
if(dir.sqrMagnitude > 1)
{
dir.Normalize();
dir *= Time.deltaTime;
transform.Translate(dir * meshMoveSpeed);
}
}
//Controls the movement speed
if(v <= 0.0f)
{
meshMoveSpeed = 4;
}
else
{
meshMoveSpeed = 6;
}
if(anim.layerCount ==2)
{
layer2CurrentState = anim.GetCurrentAnimatorStateInfo(1); // set our layer2CurrentState variable to the current state of the second Layer (1) of animation
}
}
}
Answer by Kinger61 · May 24, 2015 at 07:06 PM
I took out all the gyro code and the dir code and simply wrote this and it worked perfectly: transform.Translate (Input.acceleration.x, 0, 0);
Your answer
Follow this Question
Related Questions
Making a bubble level (not a game but work tool) 1 Answer
Character Movement Problem 0 Answers
Moving character with touch buttons (Android) 1 Answer
Can't change the speed of a character. 2 Answers
[3D] Top-Down Make Character move in the direction of the position he is currently looking at? 1 Answer