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

这篇具有很好参考价值的文章主要介绍了【Unity3d】 教会你如何做一个简单的电梯系统(升降平台)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

       第一步,设计小球的运动,包括前后左右跳跃,摄像机部分省略(资源丰富),给小球加上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),谢谢大家!文章来源地址https://www.toymoban.com/news/detail-515670.html

到了这里,关于【Unity3d】 教会你如何做一个简单的电梯系统(升降平台)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity3D与iOS的交互 简单版开箱即用

    本文适合的情况如下: Unity客户端人员 与 IOS端研发人员合作的情况 目录 From U3D to iOS 实现原理 1.unity工程目录创建2个文件 NativeCallProxy.m、NativeCallProxy.h 并且放到Unity工程目录Plugins/iOS/unity_ios_plus目录下 2.创建C#调用脚本 定义对应.mm脚本的 调用接口,调用也如下 实现原理 由

    2024年02月06日
    浏览(34)
  • Unity3D教程:触发器实现简单的场景跳转

    首先,需确保有一个想要跳转的目标场景。在本案例中,目标场景是ending。 第一步:创建一个碰撞体,放置在需要的触发场景跳转的位置。 第二步:删除多余的脚本,并且新建自己的脚本: 第三

    2024年02月12日
    浏览(40)
  • 使用Unity3D创建一个立方体(Cube)游戏对象并启动Unity

    Unity3D是一个强大的游戏开发引擎,可以用来创建各种类型的游戏和交互应用程序。在本文中,我们将探讨如何使用Unity3D创建一个立方体(Cube)游戏对象,并启动Unity编辑器。 首先,确保你已经安装了Unity3D并且已经在你的计算机上成功启动。然后,按照以下步骤进行操作:

    2024年02月05日
    浏览(71)
  • Unity3D制作一个会移动的方块(还不会移动照相机)

    学习 Unity3D 这么久了,如果你还不会制作一个按下 WASD 就可以移动的方块的话,那么你的学习将没有一点成就感,我学习的时候,我决定 先学习移动 ,这样我就会对 Unity 更加感兴趣,学习起来的动力会更为充足 先创建一个项目,名为move,如果你手头有一个随便乱用的项目

    2024年02月14日
    浏览(36)
  • 【unity3D】如何修改相机的默认视角

    💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的如何修改相机的默认视角 Game窗口运行的话视角是这样的: 此时Scene窗口的视角是这样的,可以观察到人物变化,但是我现在需要游戏运行起来从Game窗口进行操作来观察

    2024年02月09日
    浏览(27)
  • 【unity3D】Dropdown组件 — 如何使用下拉菜单

    💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的Dropdown组件 介绍:Unity的Dropdown组件是一种UI控件,用于在下拉列表中显示选项或选项组。它允许用户从列表中选择一个选项,并可以在选择时触发特定的行为或事件。通

    2024年02月06日
    浏览(42)
  • 【Unity3D】小tips:如何在Unity中切换三视图

    项目需要在Unity中比较精确地移动枢轴位置,找了一圈,没发现直接切三视图的方法。后来发现,可以直接用正交视图! Step1 Unity中可以在Gizmos中切换透视(Perspective)与正交(Orthogonality)视图。点击中间小方块块或Persp字样,变为正交视图。 透视试图Persp:近大远小 正交视

    2024年02月14日
    浏览(25)
  • Unity3D 服务器逻辑和传输如何分层/解耦详解

    Unity3D 是一款强大的游戏开发引擎,它提供了丰富的功能和工具,使得开发者可以轻松地创建高质量的游戏。在游戏开发过程中,服务器逻辑和传输是非常重要的组成部分。本文将详细介绍如何在Unity3D中实现服务器逻辑和传输的分层和解耦。 对啦!这里有个游戏开发交流小组

    2024年01月16日
    浏览(34)
  • 如何将Unity3D中的脚本打包成为DLL类库?

    如果我们想把代码打成DLL,首先需要有一个Assembly和一个合理的代码目录结构规划。 1.将要归为一类的脚本放进同一个文件内,在该文件夹下右键创建一个Assembly Definition,默认它会将同文件夹以及子目录内的脚本归为一个Assembly。 2.在Editor下创建一个CompileDll脚本来将我们的脚

    2024年02月12日
    浏览(32)
  • 【Unity3D赛车游戏】【五】Unity中汽车加速效果是如何优化的?

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity游戏demo – 😶‍🌫️版本: Unity2021 😶‍🌫️适合人群:Unity初学者 😶‍🌫️学习目标:3D赛车游戏的基础制作 😶‍🌫️技能掌握

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包