Question by
Phil5004 · Apr 09, 2018 at 12:26 AM ·
androidspeedplayer movementspeed issues
Unity 2D - Player movement on android is different than on PC
The player on the android version of the game moves "instantly". It doesn't builds up speed or slows down unlike the PC version of the game. There the player builds up speed and slows down if the button isn't pressed anymore. Here's the code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
public class PlayerPhysics : MonoBehaviour
{
Rigidbody2D rb;
float dirX;
public float speed = 5f;
public float jumpHeight = 8.5f;
public float maxSpeed = 5;
public float fallMultiplier = 5f;
public float lowJumpMultiplier = 2f;
public bool grounded;
public bool jumping;
bool facingRight = true;
Vector3 localScale;
private Animator anim;
void Start()
{
localScale = transform.localScale;
rb = GetComponent<Rigidbody2D>();
//Animations of the Char.
anim = gameObject.GetComponent<Animator>();
}
void Update()
{
#if UNITY_EDITOR || UNITY_STANDALONE || UNITY_WEBPLAYER
dirX = Input.GetAxis("Horizontal");
if (Input.GetButtonDown("Jump") && grounded)
{
jumping = true;
}
#elif UNITY_ANDROID
//Controlls
dirX = CrossPlatformInputManager.GetAxis("Horizontal");
if (CrossPlatformInputManager.GetButtonDown("Jump") && grounded)
{
jumping = true;
}
#endif
//Animations of the Char.
anim.SetBool("Grounded", grounded);
anim.SetFloat("Speed", Mathf.Abs(rb.velocity.x));
}
void FixedUpdate()
{
#if UNITY_EDITOR || UNITY_STANDALONE || UNITY_WEBPLAYER
if (jumping == true)
{
GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpHeight, ForceMode2D.Impulse);
jumping = false;
}
// Jump-Physics
if (rb.velocity.y < 0)
{
rb.gravityScale = fallMultiplier;
}
else if (rb.velocity.y > 0 && !Input.GetButton("Jump"))
{
rb.gravityScale = lowJumpMultiplier;
}
else
{
rb.gravityScale = 1f;
}
#elif UNITY_ANDROID
if (jumping == true)
{
GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpHeight, ForceMode2D.Impulse);
jumping = false;
}
// Jump-Physics
if (rb.velocity.y < 0)
{
rb.gravityScale = fallMultiplier;
}
else if (rb.velocity.y > 0 && !CrossPlatformInputManager.GetButton("Jump"))
{
rb.gravityScale = lowJumpMultiplier;
}
else
{
rb.gravityScale = 1f;
}
#endif
//Movement
rb.velocity = new Vector2(dirX * speed, rb.velocity.y);
//Speed limit
if (rb.velocity.x > maxSpeed)
{
rb.velocity = new Vector2(maxSpeed, rb.velocity.y);
}
if (rb.velocity.x < -maxSpeed)
{
rb.velocity = new Vector2(-maxSpeed, rb.velocity.y);
}
}
void LateUpdate()
{
CheckWhereToFace();
}
void CheckWhereToFace()
{
if (dirX > 0)
facingRight = true;
else
if (dirX < 0)
facingRight = false;
if (((facingRight) && (localScale.x < 0)) || ((!facingRight) && (localScale.x > 0)))
localScale.x *= -1;
transform.localScale = localScale;
}
}
Comment
Your answer
Follow this Question
Related Questions
How to implement a speed boost on-screen buton? 0 Answers
Space.Self smooth rotating menu around hand. How can I control the speed of the rotation?!?!? 0 Answers
Speed boost button for player 0 Answers
How do you code your own player movement script for android? 0 Answers
Help with drift physics 0 Answers