避免掉落边缘

时间:2018-09-04 10:43:05

标签: c# unity3d

我正在尝试在Unity3d中制作一个简单的FPS游戏,除非角色跳出平台,否则角色不能从平台上掉下来,应该不可能走开。 我为移动平台上的对象制作了一个脚本:

public GameObject Player;

private void OnTriggerEnter(Collider other)
{
    if (other.gameObject == Player)
    {
        Player.transform.parent = transform;
    }
}

private void OnTriggerExit(Collider other)
{
    if (other.gameObject == Player)
    {
        Player.transform.parent = null;
    }
}

我想解决这个问题的唯一方法是创建一个短的,不可见的盒式对撞机作为阈值,但是将其添加到每个步行空间的每个边缘将是一场噩梦。另外,我不能使用导航网格。

3 个答案:

答案 0 :(得分:1)

在播放器下方指向下方进行光线投射,看看它是否达到了水平将是一种选择,但是大量运行会非常昂贵。

如果您的水平是正方形(其他形状可以使用,但需要一些数学运算),则可以记下左上角和右下角作为边界点,并检查玩家的位置+每帧的步行速度是否在范围之外这个边界正方形。如果是,则拒绝此举。

例如

if((transform.position + transform.forward * walkingSpeed * time.deltatime).x > maxX || < minX || .y > maxY || .y << minY)
    //Deny the move

答案 1 :(得分:0)

与使用对撞机检测允许/禁止跳跃的地面的方式相同,您还可以使用对撞机检测平台的边缘。

在玩家对象底部每一侧的每个角或中点添加一个小对撞机。如果玩家A侧的对撞机与地面接触,则玩家只能向A方向移动。这意味着,当您靠近壁架时,壁架最近的一侧将失去与地面的接触,因此会阻止沿该方向的任何移动。

如果玩家正在跳跃,则无论碰撞器接触如何,都可以在所有方向上移动。

您将不得不权衡这些对撞机的位置以及允许移动的方向,但这对我来说似乎是一种简单而有效的方法。

答案 2 :(得分:0)

为边缘创建一个预制件,在每个有边缘的地方都放置预制件,这样预制件才是真正的边缘。这样可以确保正常工作的代码始终存在于边缘。