使用Unity3d模拟电梯运动,首先是电梯轿厢的运动,当点击楼层按钮时,电梯轿厢即可到达相应楼层位置。

       电梯模型如下:

                                    

       电梯轿厢运行脚本代码,直接挂载在电梯轿厢上即可,运行速度可以随意设置:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class dtjxyidong : MonoBehaviour
{

    public Transform Onelayer;
    public Transform Twolayer;
    public Transform Threelayer;//获取楼层

    Vector3 targetLayer;//目标楼层
    public float speed;

    void Start()
    {
        targetLayer = Twolayer.position;

    }

    void Update()
    {
        LiftMove();
    }
    //鼠标点击按钮,控制电梯轿厢的目标楼层
    public void OnFirstButtonClick()
    {
        targetLayer = Onelayer.position;
    }
    public void OnSecondButtonClick()
    {
        targetLayer = Twolayer.position;
    }
    public void OnThirdButtonClick()
    {
        targetLayer = Threelayer.position;
    }

    void LiftMove()
    {
        transform.position = Vector3.MoveTowards(transform.position, targetLayer, speed * Time.deltaTime);
    }
}

        这里电梯轿厢运行的原理主要是通过改变电梯轿厢坐标,因为电梯基本上是垂直运行的,所以保证x,z轴坐标不变,只改变y轴坐标,即可实现电梯的垂直运行。

        所以这里我们要在电梯楼中的每个楼层设置一个空物体,以方便电梯轿厢定位。这里是我设置的一楼位置,二楼三楼同理。

 

       全部设置完成之后就是电梯对重的运动了,这部分基本和电梯轿厢一样,只是在运行中楼层与电梯轿厢相反。

       对重运行脚本代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class dzyidong : MonoBehaviour
{

    public Transform Onelayer;
    public Transform Twolayer;
    public Transform Threelayer;//获取楼层

    Vector3 targetLayer;//目标楼层
    public float speed;

    void Start()
    {
        targetLayer = Twolayer.position;

    }

    void Update()
    {
        LiftMove();
    }
    public void OnFirstButtonClick()
    {
        targetLayer = Onelayer.position;
    }
    public void OnSecondButtonClick()
    {
        targetLayer = Twolayer.position;
    }
    public void OnThirdButtonClick()
    {
        targetLayer = Threelayer.position;
    }

    void LiftMove()
    {
        transform.position = Vector3.MoveTowards(transform.position, targetLayer, speed * Time.deltaTime);
    }
}

       然后就是电梯轿厢门的开门与关门了,这里的思路是点击按钮之后,将开门信息传递给轿厢门,当到达目标楼层之后,进行开门操作,然后等待一段时间之后,自动关门。

       轿厢门的运动也与电梯轿厢运动相似,保证两个坐标轴的坐标不变,只改变一个坐标,所以也需要通过设置空物体的方式来实现开关门。

       电梯轿厢门运行脚本代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class dtjxmen : MonoBehaviour
{
    //楼层开门位置
    public Transform Open1;
    public Transform Open2;
    public Transform Open3;
    //关门位置
    public Transform Close;
    //电梯轿厢及其到达楼层
    public Transform Onelayer;
    public Transform Twolayer;
    public Transform Threelayer;
    public Transform dt;
    //目标楼层
    Vector3 target;
    //门运行速度,可在界面处调整
    public float speed;

    void Start()
    {
        //初始化,电梯轿厢门保持关门状态
        target = Close.position;
    }

    void Update()
    {
        Move();
    }
    public void SetTargetLayer(int i)
    {
        switch (i)
        {
            case 1:
                target = Open1.position;
                Invoke("ClosetheDoor", 10);//开门之后10秒后关门,10可以修改
                break;
            case 2:
                target = Open2.position;
                Invoke("ClosetheDoor", 10);
                break;
            case 3:
                target = Open3.position;
                Invoke("ClosetheDoor", 10);
                break;
            default:
                break;
        }

    }
    void ClosetheDoor()
    {
        target = Close.position;
    }
    void Move()
    {
        //待电梯到达目标位置之后再进行轿厢门运动
        if ((dt.position == Onelayer.position) || (dt.position == Twolayer.position) || (dt.position == Threelayer.position))
        {
            transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);
        }

    }

}

       挂载好脚本之后,进行设置:

 最后在按钮上挂载相应的函数:

运行效果图:

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐