How can i make accelerometer for my rolling ball android game?
I am making a android game and it works great so far but i want to make player (ball) to be controlled by the device rotation. i tried a lot of things with
'transform.Translate(Input.acceleration.x, 0, -Input.acceleration.z);
but nothing worked so far :(
on my ball (player) are 2 scripts : 1 "ball" script and 1 "BallUserControl" script
This is the Ball script:
using System; using UnityEngine;
namespace UnityStandardAssets.Vehicles.Ball {
 public class Ball : MonoBehaviour
 {
     [SerializeField] private float m_MovePower = 5; // The force added to the ball to move it.
     [SerializeField] private bool m_UseTorque = true; // Whether or not to use torque to move the ball.
     [SerializeField] private float m_MaxAngularVelocity = 25; // The maximum velocity the ball can rotate at.
     [SerializeField] private float m_JumpPower = 2; // The force added to the ball when it jumps.
     private const float k_GroundRayLength = 1f; // The length of the ray to check if the ball is grounded.
     private Rigidbody m_Rigidbody;
    public Vector3 exteriorForce = new Vector3(1f, 0f, 0f);
     private void Start()
     {
         m_Rigidbody = GetComponent<Rigidbody>();
         // Set the maximum angular velocity.
         GetComponent<Rigidbody>().maxAngularVelocity = m_MaxAngularVelocity;
         
 }
     public void Move(Vector3 moveDirection, bool jump)
     {
         // If using torque to rotate the ball...
         if (m_UseTorque)
         {
             // ... add torque around the axis defined by the move direction.
             m_Rigidbody.AddTorque(new Vector3(moveDirection.z, 0, -moveDirection.x)*m_MovePower);
         }
         else
         {
             // Otherwise add force in the move direction.
             m_Rigidbody.AddForce(moveDirection*m_MovePower);
         }
         // If on the ground and jump is pressed...
         if (Physics.Raycast(transform.position, -Vector3.up, k_GroundRayLength) && jump)
         {
             // ... add force in upwards.
             m_Rigidbody.AddForce(Vector3.up*m_JumpPower, ForceMode.Impulse);
         }
           m_Rigidbody.AddForce(exteriorForce);
     }
 }
 
               }
and this is the BallUserControl script:
using System; using UnityEngine; using UnityStandardAssets.CrossPlatformInput;
namespace UnityStandardAssets.Vehicles.Ball { public class BallUserControl : MonoBehaviour { // private Ball ball; // Reference to the ball controller.
     private Vector3 move;
     // the world-relative desired move direction, calculated from the camForward and user input.
     private Transform cam; // A reference to the main camera in the scenes transform
     private Vector3 camForward; // The current forward direction of the camera
     private bool jump; // whether the jump button is currently pressed
     private void Awake()
     {
         // Set up the reference.
         ball = GetComponent<Ball>();
         // get the transform of the main camera
         if (Camera.main != null)
         {
             cam = Camera.main.transform;
         }
         else
         {
             Debug.LogWarning(
                 "Warning: no main camera found. Ball needs a Camera tagged \"MainCamera\", for camera-relative controls.");
             // we use world-relative controls in this case, which may not be what the user wants, but hey, we warned them!
         }
     }
     private void Update()
     {
         // Get the axis and jump input.
         float h = CrossPlatformInputManager.GetAxis("Horizontal");
         float v = CrossPlatformInputManager.GetAxis("Vertical");
         jump = CrossPlatformInputManager.GetButton("Jump");
         // calculate move direction
         if (cam != null)
         {
             // calculate camera relative direction to move:
             camForward = Vector3.Scale(cam.forward, new Vector3(1, 0, 1)).normalized;
             move = (v*camForward + h*cam.right).normalized;
         }
         else
         {
             // we use world-relative directions in the case of no main camera
             move = (v*Vector3.forward + h*Vector3.right).normalized;
         }
     }
     private void FixedUpdate()
     {
         // Call the Move function of the ball controller
         ball.Move(move, jump);
         jump = false;
     }
 
               // public void Move(Vector3 inputVelocity) // {
// Vector3 conveyorBeltVelocity = new Vector3(5f, 0f, 0f);
// GetComponent().velocity = conveyorBeltVelocity + inputVelocity;
// } }
}
Does someone know how to fix this?
Your answer