我创建了一个像 Infinite Runner 这样的游戏,它在Unity 5的游戏标签中正常运行,但在Android设备上,当我执行跳转时它永远不会有相同的高度。
[JhohnPoison回复更新]
注意:在Android 4.4.2和5.0上测试的应用注2 :在检查器中添加了一些值。
跳跃的功能
void FixedUpdate () {
CheckPlayerInGround();
MakeJump();
animator.SetBool("jump", !steppingDown);
}
void CheckPlayerInGround(){
steppingDown = Physics2D.OverlapCircle(GroundCheck.position, 0.2f, whatIsGround);
}
void MakeJump(){
if(Input.touchCount > 0){
if((Input.GetTouch(0).position.x < Screen.width / 2) && steppingDown){
if(slide == true){
UpdateColliderScenarioPosition(0.37f);
slide = false;
}
audio.PlayOneShot(audioJump);
audio.volume = 0.75f;
playerRigidbody2D.AddForce(new Vector2(0, jumpPower * Time.fixedDeltaTime));
}
}
}
答案 0 :(得分:5)
您遇到的错误与正在运行的帧速率相关。您拥有更高的帧速率,更频繁的更新将被调用(最大60fps)。因此,可以对身体施加不同的力量。
当您使用物理学时,您应该在FixedUpdate中完成所有工作并使用 Time.fixedDeltaTime 来扩展您的力量(而不是使用常量&#34; 7&#34;)。
void FixedUpdate () {
CheckPlayerInGround();
MakeJump();
animator.SetBool("jump", !steppingDown);
}
void CheckPlayerInGround(){
steppingDown = Physics2D.OverlapCircle(GroundCheck.position, 0.2f, whatIsGround);
}
void MakeJump(){
if(Input.touchCount > 0){
if((Input.GetTouch(0).position.x < Screen.width / 2) && steppingDown){
if(slide == true){
UpdateColliderScenarioPosition(0.37f);
slide = false;
}
audio.PlayOneShot(audioJump);
audio.volume = 0.75f;
playerRigidbody2D.AddForce(new Vector2(0, jumpPower * Time.fixedDeltaTime)); // here's a scale of the force
}
}
}
更多信息: http://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html http://docs.unity3d.com/ScriptReference/Time-fixedDeltaTime.html