我的球员落地

时间:2013-12-13 02:15:26

标签: c# unity3d collision-detection

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

然后我创建了一个名为" Collisions"的新图层,我将其应用于地板并在PlayerPhysics菜单中选择。但是,当我播放场景时,我的角色正好落在了地板上。

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

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

1 个答案:

答案 0 :(得分:4)

看看你的项目,问题在于:

  

您已为玩家设置了比例。你的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;

但是,如果您对不同的轴有不同的缩放因子,您当然必须进行调整。这种调整应该排好光线。

也许你没有注意到,但是在编辑器视图中,当游戏正在播放时会绘制光线。所以你实际上可以直观地看出出了什么问题。进行上述更改,所有内容都应排好。