【问题标题】:My Player Falls Through the Ground我的播放器从地上掉下来
【发布时间】:2013-12-15 01:41:32
【问题描述】:

我正在尝试在 Unity 中创建 2D 平台游戏。我在 Photoshop 中制作了一个角色并将其导入 Unity。我在他下面画了一个矩形作为地板。然后我尝试按照此视频中的说明应用角色物理和控制器:http://www.youtube.com/watch?v=d3HEFiDFApI。 (我使用的两个脚本可以在视频的描述中找到,虽然我很确定它们没问题,因为它们对于做教程的人来说很好用。)

然后我创建了一个名为“碰撞”的新层,我将其应用于地板并在 PlayerPhysics 菜单中选择。然而,当我播放这个场景时,我的角色就​​从地板上掉了下来。

玩家控制工作 - 我可以在空中左右移动 - 这似乎是物理。当我关闭物理脚本时,我的玩家落到了我的矩形底部而不是落在顶部,并且它部分被覆盖了,但他可以来回移动。不确定是什么问题;如果有人可以帮助我,我将不胜感激。

这是我的故障项目的 DL 链接,如果有人想看一下:http://www.filedropper.com/unityproject

【问题讨论】:

  • 您可能希望将文件上传到带有广告的文件共享网站以外的位置。试试 Mega 或 Dropbox

标签: c# unity3d collision-detection


【解决方案1】:

看你的项目,问题出在这里:

您已为播放器设置了比例。您的 PlayerPhysics(is based off of Sebastien Lagué's tutorials)没有考虑到这一点。

您的碰撞检测依赖于一组光线投射,计算如下:

float dir = Mathf.Sign(deltaY);
float x = (p.x + c.x - s.x/2) + s.x/2 * i; // Left, centre and then rightmost point of collider
float y = p.y + c.y + s.y/2 * dir; // Bottom of collider

ray = new Ray(new Vector2(x, y), new Vector2(0,dir));

这里的问题在于s,它由

定义
s = collider.size;

但您必须记住,对撞机的大小值不受比例影响。您将不得不为此做出明确调整。鉴于在这种情况下您的比例具有 0.3 的统一因子,您可以执行类似的操作

s = collider.size * transform.localScale.x;

当然,如果您对不同的轴有不同的缩放因子,您将不得不进行调整。这种调整应该可以很好地排列光线。

也许您没有注意到,但在编辑器视图中,光线是在游戏运行时绘制的。因此,您实际上可以直观地了解问题所在。进行上述更改,所有内容都应该排列得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多