- Home /
 
Different game speed
Working on runner. Gameplay is similar to Geometry Dash. Character stands in place and just jumping.
I'm testing game on two devices: lg optimus 2x and googel nexus 5. Main problem is that game is about 30% slower on better device - google nexus 5.
 Moving platform script:
 
 public class MoveRoadBlock : MonoBehaviour {
 
     void Start () {
 
         transform.gameObject.name = transform.gameObject.name.Replace("(Clone)", "");
 
     }
 
     void FixedUpdate () {
 
         transform.Translate(-0.09f, 0f, 0f * Time.fixedDeltaTime);
 
     }
 
 }
 
               Jumping script:
 public class Jump : MonoBehaviour {
 
     float speed = 300.0f;
 
     float jumpSpeed = 44.65f;
 
     float gravity = 50.0f;
 
     bool grounded;
 
     float param = 1.976f;
 
     int frameRate = 40;
 
 bool jump;
 
     public void Start () {
 
         Time.captureFramerate = frameRate;
 
         Screen.sleepTimeout = SleepTimeout.NeverSleep;
 
         rigidbody.constraints = RigidbodyConstraints.FreezePositionX;
 
         rigidbody.constraints = RigidbodyConstraints.FreezePositionZ;
 
         rigidbody.freezeRotation = true;
 
         grounded = false;
 
         jump = false;
 
     }
 
 void OnCollisionStay() {
 
         grounded = true;
 
     }
 
     void OnTriggerStay(Collider other) {
 
         if (other.tag == "NoJump")
 
             grounded = false;
 
     }
 
     public void FixedUpdate () {
 
         Vector3 dir = Vector3.zero;
 
         foreach (Touch touch in Input.touches)
 
  {
 
             if (touch.phase == TouchPhase.Began) {
 
                 Debug.LogWarning("touch_began");
 
                 jump = true;
 
             }
 
             if (touch.phase == TouchPhase.Ended) {
 
                 jump = false;
 
             }
 
         }
 
         if (jump) {
 
             if (grounded) {
 
                     dir.y = jumpSpeed;
 
                     grounded = false;
 
             }
 
         }
 
         dir.y -= gravity * Time.fixedDeltaTime;
 
         dir *= Time.fixedDeltaTime * param;
 
         rigidbody.AddForce(dir * speed);
 
     }
 
 }
 
               How to make it the same on all devices?
Answer by robertbu · Jun 17, 2014 at 04:22 PM
There is one problem here. Your code is:
 transform.Translate(-0.09f, 0f, 0f * Time.fixedDeltaTime);
 
               You are not scaling the 'x' movement (the only one that produces any movement) by fixedDeltaTime. At a minimum you want is:
 transform.Translate(speed * Time.fixedDeltaTime, 0f, 0f);
 
               'speed' will need to be around -5.5.
But I really suggest this movement code be moved into Update() instead of being in FixedUpdate().
 transform.Translate(speed * Time.deltaTime, 0f, 0f); 
 
              'speed' will need to be around -5.5
Why should it be exactly that value?
I think he meant -4.5, since that's -0.09/Time.fixedDeltaTime (Time.fixedDeltaTime being 1/50 by default).
Note that this isn't the problem you're having, just a general problem.
Answer by SENSBoD · Jun 19, 2014 at 12:35 PM
I made some tests and it look's like a problem is this line:
 Time.captureFramerate = frameRate;
 
               If I delete this - game speed become the same like on remote, but I have new problem - player sometimes don't jump or jumps after removal of finger.
Your answer
 
             Follow this Question
Related Questions
Wheel colliders and continuous ground hit 0 Answers
Smooth Movement Along Waypoints & Update() vs FixedUpdate() 2 Answers
Rigidbody and Time.deltaTime 2 Answers
Problem with Fixed Timestep 0 Answers