如何使角色能够在墙上行走?


34

我正在尝试使角色像蜘蛛一样移动:鉴于上升的坡度(通常情况下,球将无法滚动),蜘蛛会慢慢爬上去。

类似地,在给定一个空中矩形平台的情况下,蜘蛛会继续前进,而不是在到达边缘时掉落,而是继续包裹在边缘上,并继续沿平台的侧面和下方向下移动(最终绕平台的外围行走)。

我研究了各种Unity 2D组件,但收效甚微。:(

我世界上大多数碰撞边界都以Collider 2D组件为标志(对受重力影响的简单球效果很好,但对于这种蜘蛛角色则效果不佳)。


1
该游戏:youtube.com/watch?v=ga4Zqq1tXa8(我很久以前玩过PS1上的“蜘蛛”)可能是灵感的来源。
tigrou 2014年

Answers:


43

当我注意到卡尔明顿已经在评论中链接到Gamasutra文章时,我打算在Walker敌人上发布指向Asteroid Base博客的链接。

不过,值得一提的是,它本身就可以给出一些更多的可见性和解释作为答案。

我正走在光亮的地方,哦!

诀窍是射线广播。这些使您的代码沿着一条线进行扫描以查找冲突。

为了使Walker能够很好地与曲面对齐,他们向地形发射了两束光线,其中一束来自Walker的左侧,另一束来自其右侧(上方的红线和黄线)。

从每个RaycastHit2D对象中,您可以获得垂直于表面的垂直法线矢量(洋红色和绿色线)。通过平均两次命中的法线,您可以为角色找到合适的方向,从而可以合理反映基本地形(青色线)。

您可以沿该方向线向下施加力,以使角色保持在地形上(尽管如果摩擦力较低,这可能会导致滑动),或者像使用Walker一样将角色手动定位在平均射线相交点处。

您将需要逐渐融合角色的方向,以防止角色振动或看起来像机器人一样(请参阅当Walker越过角落时法线如何急剧变化,但身体会平滑移动)。

如果您的地形上有尖锐的拐角,则可能需要将这些光线稍微向内倾斜-这样,如果蜘蛛走过90度悬崖的边缘,悬垂的光线就会撞击到悬崖的表面。

“小行星基地”小组还朝沃克的运动方向(未显示)发射短射线,如果该射线撞击地形,它会覆盖该侧的射线。这样可以确保步行者进入90度凹角时不会卡住。

根据文档,2D射线广播与3D射线广播的不同之处在于,它检测射线在其中发生碰撞的对撞机。这对我来说听起来像是可疑的,但是如果您的测试证实了这一点,您将希望使用layerMask来限制射线以仅检测可爬坡的对撞机。


我可以确认2D射线广播将检测到包含射线广播起点的对撞机。但是,这很容易被过滤掉,因为第一次检测总是返回距离0且与射线投射方向垂直的法线。
XenoRo

2

为此,您将需要自定义代码。

基本上,您需要知道最接近的对象是什么,例如所讨论的平台,然后找到最接近的边缘以及该边缘上的最接近的点,然后从那里计算出蜘蛛的位置和旋转。

使其真正变得好起来并不容易,但要使其完全正常工作将是一个很大的挑战。


2
这里是一个非常不错的链接,不知道这是否正是适合你的情况,但也许也许...... gamasutra.com/blogs/AdamWinkels/20140220/211306/...
karmington
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.