如何解决将速度应用于刚体使其漂浮而不是冲刺
我正在尝试编写代码,以便我的角色在按下鼠标左键时向右冲,但它不是冲,而是开始缓慢滑行,或者说是浮动。 这是我用过的代码;
if (Input.GetMouseButton(0))
{
rb.veLocity = Vector2.right * DashSpeed;
}
我不确定,但我代码的其他部分可能是这个问题的原因,但如果是这样,我想知道如何解决它。这就是我要说的部分
rb.veLocity = new Vector2(moveInput * speed,rb.veLocity.y);
这就是我用于移动的代码。
void Start()
{
cam = Camera.main;
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
horizontal = Input.GetAxisRaw("Horizontal");
animator.SetFloat("Horizontal",Input.GetAxis("Horizontal"));
if (Input.GetKeyDown(KeyCode.Space) && isGrounded == true)
{
float jumpVeLocity = 7f;
rb.veLocity = Vector2.up * jumpVeLocity;
jumpsound.Play();
}
Vector3 worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (Input.GetKey(KeyCode.RightAlt))
{
Dashing();
}
}
void FixedUpdate()
{
isGrounded = Physics2D.OverlapCircle(groundCheck.position,CheckRadius,whatisGround);
moveInput = Input.GetAxisRaw("Horizontal");
rb.veLocity = new Vector2(moveInput * speed,rb.veLocity.y);
if (Input.GetKeyDown(KeyCode.Escape))
{
SceneManager.LoadScene("Main menu");
}
}
void Dashing()
{
rb.AddForce(Vector2.right * DashSpeed,ForceMode2D.Impulse);
}
解决方法
您当前代码的问题是您在几个地方直接改变了速度。一些基础物理,位置-时间图的积分是速度,速度的积分是加速度-时间。要获得更逼真的运动,最好对对象应用力。这样做时,Unity 使用的物理引擎可以在给定的时间添加一个新的力,然后使用加速度可以随时间在该方向上加速对象,然后可以随时间改变速度,这将导致位置随时间变化。
您发布的示例代码,您直接在几个地方设置了速度。
-
rb.velocity = Vector2.up * jumpVelocity;
(跳跃) -
rb.velocity = new Vector2(moveInput * speed,rb.velocity.y);
(移动) -
rb.velocity = Vector2.right * DashSpeed;
(破折号)
直接设置这些值时,新值会覆盖旧值。由于您的移动代码不是任何类型的 if 条件,它会不断写入速度,导致 dash 永远不会改变任何东西,无论您是使用 add-force 还是直接改变速度。
我会考虑让你的跳跃和冲刺都使用 AddForce,如果你喜欢直接应用速度的运动感觉,那么添加速度不要设置它。
您之前的行 rb.velocity = new Vector2(moveInput * speed,rb.velocity.y);
将变为 rb.AddForce(new Vector2(moveInput * speed,0),ForceMode2D.Impulse);
。同样,你可以更新你的跳跃和冲刺以匹配这个。如果您完成这项工作或有更多问题,请告诉我。
你的动画可能有问题。链接到统一答案的线程: https://answers.unity.com/questions/674516/rigidbody-character-problems-constant-floating-jum.html 您应该转到动画位置并点击bake intopose。
您应该使用 Rigidbody2D.AddForce(Vector2,ForceMode2D)。这样做是在 Vector2 的方向上移动游戏对象,使用 ForceMode2D 的力模式。这与仅仅翻译它的不同之处在于它与物理相互作用并提高了游戏的质量。这是一个链接和脚本: https://docs.unity3d.com/ScriptReference/Rigidbody2D.AddForce.html
Rigidbody2D rb;
float dashSpeed;
void Update()
{
if (Input.GetMouseButton(0))
{
rb.AddForce(Vector2.right * dashSpeed);
}
}
如果您正在谈论的代码的另一部分出现故障,那么请执行相同的操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。