我正在开发2D平台游戏,例如,我意识到玩家的跳跃功能并非每次都起作用。如果玩家在移动/跑步时跳跃,或者玩家跳跃而没有移动,则跳跃高度是不同的。
我有2个独立的函数Move()和Jump(),Move()使用transform.Translate来使玩家移动,而Jump()使用hardBody.AddForce()来使玩家跳转。我已经尝试过将播放器的Move()函数更改为使用刚性主体来使播放器移动,而不是使用transform.Translate()。而且没有用。
我还尝试使用transform.Translate来使玩家跳跃,它解决了不一致的跳跃高度问题,但是玩家只是向上移动而不是跳跃
这是我的代码结构的表示,而不是实际的代码,因为实际的代码就像600行
public class Player
{
float JumpSpeed;
bool isGrounded;
void Update()
{
if (Input.GetKey(KeyCode.A))
Move(Directions.Left);
if (Input.GetKey(KeyCode.D))
Move(Directions.Right);
if (Input.GetKeyDown(KeyCode.Space))
Jump(JumpSpeed);
}
public void Move(Directions dir)
{
Vector2 speed;
//figure out speed and etc...
//makes the player move in the right direction and speed
transform.Translate(speed * Time.deltaTime);
}
public void Jump(float speed)
{
if(isGrounded)
rigidBody.AddForce(new Vector2(0, speed * Time.deltaTime), ForceMode2D.Impulse);
}
}
答案 0 :(得分:1)
不确定这是否是您的专门问题,但是使用平移移动播放器并然后加力跳跃并不是真正解决问题的最佳方法。
我会考虑将刚体的速度部分用于跳跃和运动。这样可以防止翻译对象引起的任何怪异。