- Home /
Networking Accelerometer uses wrong axis
I am making a ball game and i want my ball to go to the left and right with Input.acceleration without networking this script works fine. but when i am using this script on the network the accelerometer lets my ball go back and forward instead of going to the left or right.
I am using 2 scripts that control the ball.
BallUserControlMultiplayer script :
using System; using UnityEngine; using UnityStandardAssets.CrossPlatformInput; using UnityEngine.Networking; using UnityStandardAssets.Characters; namespace UnityStandardAssets.Vehicles.Ball { public class BallUserControlMultiplayer : NetworkBehaviour { // // 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.
//Input.acceleration.x;
float h = Input.acceleration.x;
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<Rigidbody>().velocity = conveyorBeltVelocity + inputVelocity;
// }
} }
And the Ball script:
using System; using UnityEngine; using UnityEngine.Networking;
namespace UnityStandardAssets.Vehicles.Ball {
public class Ball : NetworkBehaviour { [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(); // Set the maximum angular velocity. GetComponent().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); } } }
Can someone help me ? plz
Your answer
![](https://koobas.hobune.stream/wayback/20220612084332im_/https://answers.unity.com/themes/thub/images/avi.jpg)