我无法弄清楚这一点。我的力量放在我的FixedUpdate()函数中,但我在Android上的跳跃速度仍然是我在PC版本上的3倍。有什么我做错了吗?固定更新不应该确保它不是fps问题吗?还是基于屏幕分辨率?
using UnityEngine;
using System.Collections;
public class CharacterControllerScript : MonoBehaviour {
public KeyCode up;
public KeyCode down;
public float maxSpeed = 10f;
public bool facingRight = true;
public float tiltSpeed = 10f;
public float filter = 5.0f;
public float accelerationSpeed = 10f;
public bool jump = false;
private Vector3 accel;
Animator anim;
public bool grounded = false;
public Transform groundCheck;
float groundRadius = 0.2f;
public LayerMask whatIsGround;
public float jumpForce = 700;
// Use this for initialization
void Start () {
anim = GetComponent<Animator>();
accel = Input.acceleration;
}
// Update is called once per frame
void FixedUpdate () {
grounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, whatIsGround);
anim.SetBool("Ground", grounded);
anim.SetFloat ("vSpeed", rigidbody2D.velocity.y);
/*if (grounded && ((Input.GetKeyDown(up)) || Input.touchCount == 1))
rigidbody2D.AddForce(new Vector2(0, Mathf.Clamp(jumpForce, 0, 700)));
*/
if(jump){
rigidbody2D.AddForce(new Vector2(0, jumpForce));
//rigidbody2D.AddForce (new Vector2(0, jumpForce) * rigidbody2D.mass / Time.fixedDeltaTime);
}
// Set animation
if ((Application.platform == RuntimePlatform.Android) || (Application.platform == RuntimePlatform.IPhonePlayer)){
// filter the jerky acceleration in the variable accel:
accel = Vector3.Lerp(accel, Input.acceleration, filter * Time.deltaTime);
// map accel -Y and X to game X and Y directions:
Vector3 dir = new Vector3(Mathf.Clamp(accel.x, -accelerationSpeed, accelerationSpeed), 0, 0);
// limit dir vector to magnitude 1:
if (dir.sqrMagnitude > 1) dir.Normalize();
// move the object at the velocity defined in speed:
transform.Translate(dir * tiltSpeed * Time.deltaTime);
anim.SetFloat("Speed", Mathf.Abs(dir.sqrMagnitude * tiltSpeed));
if (Input.acceleration.x > 0 && !facingRight)
Flip ();
else if (Input.acceleration.x < 0 && facingRight)
Flip ();
}
else {
float move = Input.GetAxis ("Horizontal");
anim.SetFloat("Speed", Mathf.Abs(move));
rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
// Decide what way animation moving
if (move > 0 && !facingRight)
Flip ();
else if (move < 0 && facingRight)
Flip ();
}
jump = false;
}
void Flip () {
facingRight = !facingRight;
Vector3 thescale = transform.localScale;
thescale.x *= -1;
transform.localScale = thescale;
}
void Update () {
if(grounded && ((Input.GetKeyDown(up)) || Input.touchCount == 1)){
anim.SetBool("Ground", false);
//rigidbody2D.AddForce(new Vector2(0, jumpForce * Time.fixedDeltaTime));
jump = true;
}
}
}