避免掉落边缘

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了避免掉落边缘相关的知识,希望对你有一定的参考价值。

我正在尝试在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;
    }
}

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

答案

在播放器指向前方的光线投射,看它是否达到水平将是一个选项,但是运行这么多是非常昂贵的。

如果您的等级是正方形(其他形状可以工作但需要一些数学运算),您可以记录左上角和右下角作为边界点并检查您的玩家位置+每帧的行走速度是否在此边界之外。如果是的话,否认这一举动。

E.g

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

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

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

如果玩家正在跳跃,那么无论对手是否接触,都允许在所有方向上移动。

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

另一答案

为边缘创建一个预制件,在预制件边缘放置预制件,使预制件真正成为边缘。这将确保有效的代码始终存在于边缘。

以上是关于避免掉落边缘的主要内容,如果未能解决你的问题,请参考以下文章

如何向 ViewPager 提供许多片段并避免错误代码?

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

需要一种有效的方法来避免使用 Laravel 5 重复代码片段

谷歌云存储:我如何避免边缘缓存

是否有可能让 networkx dijkstra 避免某些边缘?

r 在Barabasi游戏中捐赠边缘以避免单身