- 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
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                