如何在Unity3D中平滑我的基于加速计的角色运动
本文关键字:加速 运动 角色 于加速 Unity3D 平滑 我的 | 更新日期: 2023-09-27 18:16:03
我正在为手机平台创建一个无限垂直平台,我使用加速计来左右移动玩家。设备倾斜得越远,玩家在屏幕上移动的速度就越快。目前我的球员有点太摇晃了,我想在屏幕上创造一个更流畅的运动。下面是我移动字符的代码:
/********************************* 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));
}
}
你不能用你的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()
。
您可以使用Mathf。平滑速度值的Lerp方法。
尝试使用
maxSpeed = Mathf.Lerp(maxSpeed, 17, Time.deltaTime);
代替
maxSpeed = 17;