博主第一次写博客,语言略俗,有不足之处还请指正!

由于自己还处在unity小白阶段,受2d升降平台的影响(后续我也会上传关于2d升降平台的文章),突发奇想如何用3d做一个电梯系统,查阅网上资料后,发现网上对这方面的讲解少之又少,或者说其他博主提供的并非自己想要的效果,博主也是不断地学习改进,最终才达到效果,所以想和大家分享一下我的学习成果,供大家学习参考。

如果你正在学习unity,会发现其实做一个简单的电梯系统很快就有思路,无非就是去触发Trigger,通过电梯移动实现到达目标楼层,之前也有疑惑和网友交流过到底用Collider碰撞器还是Trigger触发器去实现,这两种都是检测碰撞,个人觉得Trigger实现起来简单点,还有一个思路可能你会想到,在各个楼层安装Collider,当电梯到达某楼层通过检测碰撞,来置停电梯(本文不涉及,想实现的小伙伴可以自己尝试)。

本篇文章主要介绍我制作简单电梯过程(不包括开关门,如果确切划分也可以说是升降平台),博主的想法是一个电梯,按下几楼,电梯会将我们带到几楼,由于博主建模简单,所以利用sphere(球体)代替角色,cube代替电梯(如下图),采用踩Trigger实现前往目标楼层。

第一步,设计小球的运动,包括前后左右跳跃,摄像机部分省略(资源丰富),给小球加上Character Controller组件,新建C#文件,命名为PlayerController,通过中文API搜CharacterController.Move(为GameObject的移动提供附加组件),将其代码复制给PlayController.cs文件,便可实现小球的运动(参数可自己修改)。

第二步,设计电梯的运动,无非就是给电梯贴代码,给Cube(可自由命名,以下均已Cube为例)加上Box Collider以及Rigidbody,勾选Is Kinematic,并锁定X轴和Z轴,新建C#文件,命名为LiftController,代码如下(MoveTowards函数可查阅中文API):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class LiftController : MonoBehaviour
{public Collider coll;public Rigidbody rigid;public float speed;Vector3 OneLayer = new Vector3(0f, 0.1f, 0f);//一楼,实际情况根据自己修改,以下同理Vector3 TwoLayer = new Vector3(0f, 11.1f, 0f);//二楼Vector3 ThreeLayer = new Vector3(0f, 21.1f, 0f);//三楼void Start(){coll = gameObject.GetComponent<Collider>();rigid = gameObject.GetComponent<Rigidbody>();}void Update(){}public void One(){transform.position = Vector3.MoveTowards(transform.position, OneLayer, speed * Time.deltaTime);}public void Two(){transform.position = Vector3.MoveTowards(transform.position, TwoLayer, speed * Time.deltaTime);}public void Three(){transform.position = Vector3.MoveTowards(transform.position, ThreeLayer, speed * Time.deltaTime);}
}

第三步,在Cube下新建三个空物体,加上Box Collider,并勾选Is Trigger,在(Inspector)检视面板Tag下新增三个标签,分别取名为One、Two、Three,并分别为其勾选上,其次可以分别改变三个空物体的Scale(X 0.2 ,Y 0.3 ,Z 0.5),并通过移动合理分配位置,为了便于角色判断楼层,博主分别为三个空物体加上了Text(TMP),添加文字,调节即可,这样我们三个触发器就完成了。

第四步,完善代码,实现触发器,在PlayController.cs中进行添加,PlayController.cs代码如下:

using JetBrains.Annotations;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerController : MonoBehaviour
{private CharacterController controller;private Vector3 playerVelocity;private bool groundedPlayer;public float playerSpeed;public float jumpHeight;public float gravityValue;/*以上为角色运动定义*/public GameObject Lift;public bool isoneColl = false;public bool istwoColl = false;public bool isthreeColl = false;/*以上定义便于判断是否触发*/void Start(){controller = gameObject.GetComponent<CharacterController>();Lift = GameObject.Find("Lift");//引号内容为Cube的命名,可根据自己的改动}void Update(){Movement();LiftMove();}//角色移动void Movement(){groundedPlayer = controller.isGrounded;if (groundedPlayer && playerVelocity.y < 0){playerVelocity.y = 0f;}Vector3 move = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));controller.Move(move * Time.deltaTime * playerSpeed);if (move != Vector3.zero){gameObject.transform.forward = move;}// Changes the height position of the player..if (Input.GetButton("Jump") && groundedPlayer){playerVelocity.y += Mathf.Sqrt(jumpHeight * -3.0f * gravityValue);}playerVelocity.y += gravityValue * Time.deltaTime;controller.Move(playerVelocity * Time.deltaTime);}//触发器private void OnTriggerEnter(Collider collision){if (collision.tag == "One"){isoneColl = true;istwoColl = false;isthreeColl = false;Debug.Log("前往1楼");}if (collision.tag == "Two"){istwoColl = true;isoneColl = false;isthreeColl = false;Debug.Log("前往2楼");}if (collision.tag == "Three"){isthreeColl = true;istwoColl = false;isoneColl = false;   Debug.Log("前往3楼");}}//电梯移动void LiftMove(){if (isoneColl == true){Lift.GetComponent<LiftController>().One();//调用函数Debug.Log("移动中...");}if (istwoColl == true){Lift.GetComponent<LiftController>().Two();//调用函数Debug.Log("移动中...");}if (isthreeColl == true){Lift.GetComponent<LiftController>().Three();//调用函数Debug.Log("移动中...");}}}

运行之前,别忘了给电梯设置速度哦(博主设置为3),谢谢大家!

【Unity3d】 教会你如何做一个简单的电梯系统(升降平台)相关推荐

  1. 用python做一个简单的双色球系统

    #初始化开奖号码 import random kaijiang_red=[x for x in range(1, 21)] kaijiang_red_ball=random.sample(kaijia ...

  2. 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 ...

  3. pygame做一个简单的打字游戏

    pygame做一个简单的打字游戏 1.基本代码 下面的代码完成了每一秒在界面的顶部随机生成一个新的字母 # -*- coding=utf-8 -*- import pygame from pygame ...

  4. 第四章 .net core做一个简单的登录

    项目目标部署环境:CentOS 7+ 项目技术点:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginx 开源地址:https ...

  5. clistctrl控件最后插入在后面_用图表控件做一个简单的员工信息查询系统

    前几天在上课的时候有同学说在做人员的信息查询的时候,经常的要去做查找搜索很麻烦,能不能做一个简单的人员信息查询系统,只需要选择人员的编号就可以查询到这个员工的信息.其实要实现这个同学的需求在EXCEL ...

  6. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截...

    程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少.数据 ...

  7. 【Python】如何用python做一个简单的输入输出交互界面?

    看到知乎上有人在问,如何使用Python做一个简单的输入输出交互界面? 交互界面就涉及到GUI编程. Python有很多GUI框架,功能大同小异. 其中比较出名的有「PyQT」.**wxPython. ...

  8. 如何复制java卡,使用java做一个简单的集卡程序

    使用java做一个简单的集卡程序 本次设想的是要集齐4张卡,每张卡的概率都是25%,如果每个用户集齐需要多少次才能集合完毕 public class Test { public static void ...

  9. python自己做个定时器_技术图文:如何利用 Python 做一个简单的定时器类?

    原标题:技术图文:如何利用 Python 做一个简单的定时器类? 背景 今天在B站上看有关 Python 最火的一个教学视频 -- "零基础入门学习 Python",这也是我们 P ...

最新文章

  1. 通知 | “大数据能力提升项目”证书办理及领取(2021年秋季学期)
  2. Mongoose源码剖析:外篇之web服务器
  3. java下拉列表选日期_iPhone应用程序:日期选择器查看下拉列表
  4. 题目1028:继续畅通工程
  5. Commons-logging + Log4j 入门指南
  6. html线框聚焦效果,24种表单input输入框聚焦动画特效
  7. oracle 11g安装时设密码 database control,安装oracle 11g 保护Database Control时出错,Database Control已在非安全模式下启动...
  8. docker学习记录
  9. 以太网峰会:网络管理员已成濒危职业
  10. Vegas系列Movie Studio录制音频/乐的方法
  11. 算法笔记_面试题_16. 二叉树相关_模板及示例十几道
  12. qq android qav,33 BK.QQAVManager 音视频管理
  13. magisk下载里显示没有模块_magisk框架
  14. iframe透明背景
  15. 把脉城市交通 共商缓堵良策
  16. Android:手机号码归属地查询
  17. OpenCV进阶--图像颜色空间
  18. 16、react 中的高阶函数和柯里化
  19. 双绞线绞合消除电磁干扰原理
  20. 最好的5个电脑上的epub阅读器

热门文章

  1. 游戏交流社区BBS论坛设计与实现
  2. PHP音乐爱好者论坛
  3. 2023闽南师范大学计算机考研信息汇总
  4. 音悦台www.yinyuetai.com下载方法
  5. VL02N、VL09交货单相关增强
  6. C语言身份证信息查询系统(可验证输入身份证是否合法)【已会】
  7. 电影《巴格西》:偏执狂才能名扬千古
  8. Ffmpeg,mencoder视频格式转换
  9. VMware虚拟机复制粘贴不能用的解决办法
  10. kali grub引导修复