在 Unity 中制作一个具有电梯行为的移动平台,且每 5 秒在关卡之间移动。那么大家需要搭建一个类似的场景,可用盒子代替,这样有了模型,才可以用作制作电梯的移动。

第一步
创建一个空对象作为电梯的子对象,以表示电梯的原点和最终位置。然后须创建一个新的电梯脚本并将其附加到电梯游戏对象上。

在新脚本中,须声明 2 个变量来存储对点 a 和 b 以及电梯平台的引用。
还有一些与运动相关的变量,例如速度、知道要向哪个方向移动的标志以及停止和再次开始移动的延迟。
// 航路点
[SerializeField]
private Transform _pointA,_pointB;
[SerializeField]
private GameObject _elevatorFloor;
// 一般变量
[SerializeField]
private float _speed;
[SerializeField]
private bool _moveUp = false;
[SerializeField]
priate float _delay = 1.0f;
第二步
在同一个脚本中,将创建一个新的协程以无限循环移动平台。
在这个协程中,首先检查平台是否通过了 2 个点中的一些点以移动到另一个方向。
然后检查标志的当前值并将一个 int 值分配给路径变量,最后调用 Translate 函数来移动平台。
// 在第一帧更新之前开始就调用
void Start()
{
Startcoroutine( MaveElevator());
}
private IEnumerator MoveElevator()
{
while (true)
{
// 计算路径
if (_elevatorFloor.transform.position.y <= _pointB.position.y)
{
yield return new WaitForSeconds(_delay);
_moveUp = true;
}
if (_elevatorFloor.transform.position.y >= _pointA.position.y)
{
yield return_new waitForSeconds(_delay);
_moveup = false;
}
int path = _moveUp == true ? l:-l;
// 移动地板
_elevatorFloor.transform.Translate(0, _speed * path * Time.deltaTime,0);
yield return new waitForEnd0fFrame();
}
}
第三步
在检查器中分配值。

那么此时这个电梯配备了升降系统,可应用于楼层。

对于方便以后使用可以把它做成一个预制件。
如果想了解预制件以及如何制作,可以阅读3D天堂站内的文章,或许会有点帮助。