- Home /
Character Movement Problem
Currently my Character is controlled using left and right arrows to move left and right. I want to be able to tilt left and right to move left and right. I have tried multiple things and know u need to include gyro in the code. I have added some code in start and FixedUpdate which allows device to tilt towards player to move character right, i need to tilt left and right to move left and right only...any ideas?
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
//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");
public float movementScale;
public Vector3 dir;
void Start ()
{
//Vector3 dir = transform.position;
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();
Start ();
}
}
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
}
}
}
Comment
Your answer
Follow this Question
Related Questions
Getting My Character to Move 1 Answer
Making a bubble level (not a game but work tool) 1 Answer
[Solved] Reading text file on Android 2 Answers
Make sphere shoot to Touch.position error 1 Answer
Edit this code? 0 Answers