我正在尝试在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;
}
}
我想解决这个问题的唯一方法是创建一个短的,不可见的盒式对撞机作为阈值,但是将其添加到每个步行空间的每个边缘将是一场噩梦。另外,我不能使用导航网格。
答案 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)
为边缘创建一个预制件,在每个有边缘的地方都放置预制件,这样预制件才是真正的边缘。这样可以确保正常工作的代码始终存在于边缘。