Unity3d模拟电梯运行功能(一)

       使用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);
        }

    }

}

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

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

运行效果图:

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值