我正在Unity中开发一款2D平台游戏。我的角色通过对刚体施加速度来移动,并且按照我的要求进行精确的控制。
当角色位于移动平台上时,我将角色设置为移动平台的父对象,以便在平台移动时角色保持在移动平台上。
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Player")
{
collision.collider.transform.SetParent(transform);
}
}
private void OnCollisionExit2D(Collision2D collision)
{
if (collision.gameObject.tag == "Player")
{
collision.collider.transform.SetParent(null);
}
}
我还使用transform.position从一个位置移动到另一个位置。
问题是这样的。只有当平台的速度为0时,角色才能完美地工作。如果平台在移动,角色在平台上行走时会像鼻涕虫一样移动。有什么想法可以解决这个问题吗?或者有没有一种方法可以让角色在移动的平台上骑行,而无需将其作为父对象?
编辑:我之前忘记加入这个了。我已经测试过物理材质是否会有不同。我在角色、平台以及两者同时加入了0摩擦物理材质。没有一个组合产生任何差异。当平台移动时,玩家仍然移动缓慢。
2条答案
按热度按时间1u4esq0p1#
如果你用一个力和一个刚体来移动你的角色,层次和谁是父不会有太大的影响,因为移动是由力提供的,这是物理学。如果你在代码中操纵变换来移动,这将是重要的,但如果运动是由力引起的,我认为不是。我会检查球员和平台的物理材料的摩擦,以确定元素的运动相互尊重。
xqnpmsa82#
答案还需要一段时间,但我想我找到了一个。将平台移到
FixedUpdate
而不是Update
可以解决这个问题。