我正在做一个2D平台,决定加入粘性平台。我让平台移动,但是玩家不跟着移动。
但是把玩家养育到平台之后,玩家还是福尔斯了,我加了两个BoxCollider2D
,把其中一个设置成Trigger
,对撞机都没有RigidBody2D
public class StickyPlatform : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.name == "Player")
collision.gameObject.transform.SetParent(transform);
}
private void OnTriggerExit2D(Collider2D collision)
{
if (collision.gameObject.name == "Player")
collision.gameObject.transform.SetParent(null);
}
}
2条答案
按热度按时间t98cgbkg1#
触发器不会阻止对象移动通过框,您可以尝试OnCollisionEnter。通常我会有一个地面检查,您可以说
if(isGrounded&&onPlatform) //move with platform
w46czmvw2#
听起来你有两个问题:
1.玩家从平台跌落
1.播放器未粘在平台上
从地板上掉下来是一个超级常见的bug,原因有很多,下面是我找到的一个checklist:
1.物体有碰撞器吗?2如果没有,选择物体
1.转到顶部栏
1.组成部分
1.物理学
1.选择合适的碰撞器(如果是地形,检查最后一个标签,小齿轮)
注:网格碰撞器可能会导致问题特别是,如果FallingObject和GroundObject都有网格碰撞器特别是,如果网格是动画的为了避免网格碰撞器,可以从几个基本体碰撞器构建网格的近似形状(在父、子或兄弟游戏对象中)如果你无论如何都需要一个网格碰撞器,你可以尝试把额外的基本碰撞器放在它们不会妨碍"强制"碰撞的地方
对象是否为触发器?如果是,请选择"对象
1.找到它的碰撞器组件(如果是地形,检查最后一个选项卡,小齿轮)
1.删除"IsTrigger"的检查
碰撞器放置的好吗?调整中心,大小和皮肤宽度(从0.1开始)直到绿色轮廓接近角色(如果你得到很奇怪的值,可能是由于比例(例如,你的网格太大了,所以你缩小到0.01))
你可以试着把所有的定位归零(包括unity和你的建模程序)
这种联系甚至会出现在更多的案例中。
一旦播放器可以保持,物理引擎应该处理动量转移,以移动播放器与平台使用摩擦力。这同样需要
RigidBody2D
。我不知道为什么你不使用RigidBody
,它有点像你在回避解决方案。这样做应该避免需要父母的球员,并有一个触发音量,以及,除非你想球员物理卡住,不能在平台上移动。