我正在为移动平台构建一个无限的垂直平台,我正在使用加速计左右移动播放器。设备越倾斜,玩家在屏幕上移动的速度越快。目前我的播放器有点过于震动,我想在整个屏幕上创建一个更流畅的动作。这是我移动角色的代码:
/********************************* Variables **************************************/
// Variables
float jumpForce = 700f;
float maxSpeed;
float acceleration;
/********************************* Start Method ************************************/
void Start ()
{
acceleration = Mathf.Abs (Input.acceleration.y);
}
/************************************ Fixed Update *************************************/
void FixedUpdate () {
if (acceleration < 0.2f) {
maxSpeed = 17;
} else if (acceleration < 0.9f) {
maxSpeed = 25;
} else {
maxSpeed = 40;
}
float move = Input.acceleration.x;
rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
/******************************* Collision Function ******************************/
void OnCollisionEnter2D(Collision2D coll)
{
foreach(ContactPoint2D contact in coll.contacts)
{
rigidbody2D.AddForce (new Vector2(0, jumpForce));
}
}
答案 0 :(得分:0)
你不能只用你的Input.acceleration.y
作为速度吗?那样你就不需要if条件了。如果这还不够,那么乘以乘数。
void Update () {
maxSpeed = Mathf.Abs(Input.acceleration.y);
speedMultiplier = 30;
float move = Input.acceleration.x;
rigidbody2D.velocity = new Vector2 (move * maxSpeed * speedMultiplier, rigidbody2D.velocity.y);
您可以随后调整speedMultiplier
以符合您的需求
此外,如果您有一些物理作品(在本例中为rigidbody2D.velocity
),则应使用Update()
代替FixedUpdate()
。
答案 1 :(得分:0)
您可以使用Mathf.Lerp方法平滑速度值。
尝试使用
maxSpeed = Mathf.Lerp(maxSpeed, 17, Time.deltaTime);
而不是
maxSpeed = 17;