避免掉落边缘
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上移动。这意味着当您接近壁架时,距离壁架最近的一侧将失去与地面的接触,从而阻止在该方向上的任何更多移动。
如果玩家正在跳跃,那么无论对手是否接触,都允许在所有方向上移动。
你将不得不玩这些碰撞器的位置以及你允许移动的方向,但这对我来说似乎是一种简单而有效的方法。
另一答案
为边缘创建一个预制件,在预制件边缘放置预制件,使预制件真正成为边缘。这将确保有效的代码始终存在于边缘。
以上是关于避免掉落边缘的主要内容,如果未能解决你的问题,请参考以下文章
需要一种有效的方法来避免使用 Laravel 5 重复代码片段