- 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