我正在尝试使角色像蜘蛛一样移动:鉴于上升的坡度(通常情况下,球将无法滚动),蜘蛛会慢慢爬上去。
类似地,在给定一个空中矩形平台的情况下,蜘蛛会继续前进,而不是在到达边缘时掉落,而是继续包裹在边缘上,并继续沿平台的侧面和下方向下移动(最终绕平台的外围行走)。
我研究了各种Unity 2D组件,但收效甚微。:(
我世界上大多数碰撞边界都以Collider 2D组件为标志(对受重力影响的简单球效果很好,但对于这种蜘蛛角色则效果不佳)。
我正在尝试使角色像蜘蛛一样移动:鉴于上升的坡度(通常情况下,球将无法滚动),蜘蛛会慢慢爬上去。
类似地,在给定一个空中矩形平台的情况下,蜘蛛会继续前进,而不是在到达边缘时掉落,而是继续包裹在边缘上,并继续沿平台的侧面和下方向下移动(最终绕平台的外围行走)。
我研究了各种Unity 2D组件,但收效甚微。:(
我世界上大多数碰撞边界都以Collider 2D组件为标志(对受重力影响的简单球效果很好,但对于这种蜘蛛角色则效果不佳)。
Answers:
当我注意到卡尔明顿已经在评论中链接到Gamasutra文章时,我打算在Walker敌人上发布指向Asteroid Base博客的链接。
不过,值得一提的是,它本身就可以给出一些更多的可见性和解释作为答案。
诀窍是射线广播。这些使您的代码沿着一条线进行扫描以查找冲突。
为了使Walker能够很好地与曲面对齐,他们向地形发射了两束光线,其中一束来自Walker的左侧,另一束来自其右侧(上方的红线和黄线)。
从每个RaycastHit2D对象中,您可以获得垂直于表面的垂直法线矢量(洋红色和绿色线)。通过平均两次命中的法线,您可以为角色找到合适的方向,从而可以合理反映基本地形(青色线)。
您可以沿该方向线向下施加力,以使角色保持在地形上(尽管如果摩擦力较低,这可能会导致滑动),或者像使用Walker一样将角色手动定位在平均射线相交点处。
您将需要逐渐融合角色的方向,以防止角色振动或看起来像机器人一样(请参阅当Walker越过角落时法线如何急剧变化,但身体会平滑移动)。
如果您的地形上有尖锐的拐角,则可能需要将这些光线稍微向内倾斜-这样,如果蜘蛛走过90度悬崖的边缘,悬垂的光线就会撞击到悬崖的表面。
“小行星基地”小组还朝沃克的运动方向(未显示)发射短射线,如果该射线撞击地形,它会覆盖该侧的射线。这样可以确保步行者进入90度凹角时不会卡住。
根据文档,2D射线广播与3D射线广播的不同之处在于,它检测射线在其中发生碰撞的对撞机。这对我来说听起来像是可疑的,但是如果您的测试证实了这一点,您将希望使用layerMask来限制射线以仅检测可爬坡的对撞机。
为此,您将需要自定义代码。
基本上,您需要知道最接近的对象是什么,例如所讨论的平台,然后找到最接近的边缘以及该边缘上的最接近的点,然后从那里计算出蜘蛛的位置和旋转。
使其真正变得好起来并不容易,但要使其完全正常工作将是一个很大的挑战。