「Unity入门」Step by step的太空清理垃圾游戏Part 5: 碰撞探测与模拟测试

这篇具有很好参考价值的文章主要介绍了「Unity入门」Step by step的太空清理垃圾游戏Part 5: 碰撞探测与模拟测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

书接上回,完成了后视镜头中点击收集垃圾的操作。但是,在Unity编辑器中无法测试真正的效果。因为用鼠标点击和触碰屏幕Touch是两个不同的input类型。同样的,VR/AR环境中的某些input也无法直接在编辑器中测试,或者说会有不同的测试效果。因此,需要通过相应的外置工具来完成更加真实的测试。对于手机端的测试,Unity Remote是最直接简单、方便操作的工具之一。

❗️本期内容有许多复杂的部分,强烈建议配合视频食用,效果更佳哦~

从零开始的Unity太空清理游戏|Part 5

在手机上测试你的游戏 – Unity Remote

「Unity入门」Step by step的太空清理垃圾游戏Part 5: 碰撞探测与模拟测试,unity,游戏,游戏引擎,c#,ui,3d,测试工具

(Unity Remote手册)

Unity Remote是支持Andriod、iOS、tvOS操作系统,连接手机端和Unity编辑器的测试工具。它可以接收到移动端的输入数据,比如触碰屏幕、GPS等。以此在不需要完整build的情况下,完成手机端用户测试。除了略微下降的画面帧率,Unity Remote能够完全模拟移动端的使用情况,我们在上一章节中完成的内容在这里可以体现出来了。

注意:Unity Remote不支持跨系统的测试,Win系统和macOS的Unity也有很多不兼容之处。

  • 首先在手机上安装Unity Remote,在app store/商店中可以免费下载。

「Unity入门」Step by step的太空清理垃圾游戏Part 5: 碰撞探测与模拟测试,unity,游戏,游戏引擎,c#,ui,3d,测试工具

(App Store截屏)

  • 用数据线将手机和电脑连接。可能需要在手机上选择”相信此设备“。

  • 打开Unity项目。在Edit>>> Project Settings >>> Editor 的Device中下拉选择你的移动设备。

「Unity入门」Step by step的太空清理垃圾游戏Part 5: 碰撞探测与模拟测试,unity,游戏,游戏引擎,c#,ui,3d,测试工具

  • 设置完成后,打开手机上的Unity Remote,再点击Editor中的“Play”按钮,手机端和编辑器中就会同步开始运行了。

将手机从竖屏转换到横屏,这样画面才不会被拉伸。

可能会发现在手机上运行时,用户界面中的摇杆和按钮位置不太对劲。这是因为手机的屏幕像素一般会大很多,而摇杆和按钮并没有相应的扩大。要完成这一点,只需要将canvas的UI Scale Mode从“Constant Pixel Size”换成“Scale With Screen Size“就好了。

「Unity入门」Step by step的太空清理垃圾游戏Part 5: 碰撞探测与模拟测试,unity,游戏,游戏引擎,c#,ui,3d,测试工具

(UI Scale Mode)

「Unity入门」Step by step的太空清理垃圾游戏Part 5: 碰撞探测与模拟测试,unity,游戏,游戏引擎,c#,ui,3d,测试工具

Constant Pixel Size Vs. Scale With Screen Size)

手机上切换到后视镜后,点击两种垃圾就可以让他们消失了。

防穿模 - Collider & Rigidbody

如果驾驶飞船冲向中间的行星,你会发现它直接穿过了星球。为了防止这样穿模的情况,我们需要给飞船加上Collider和RigidBody两个部分。

Collider是Unity中一个非常重要的API,可以探测物体之间的碰撞并引发任意的反应。而RigidBody的存在是为了实现某个物体在真实物理环境下的行为。比如在现实生活中,具有质量的物体A会受到重力作用,它不会漂浮在空中,而是会坠落。另一个例子是两个物体相撞的时候,质量较大的物体由于惯性更大,受作用力产生的位移会相对小。

  • 点击Spacecraft,右侧最下方点击“Add Component”,输入Collider → Box Collider

    • 完成后会看到物体周边出现了一个绿色的框,这就是飞船Collider的范围。任何同样具有Collider的物体进入或离开这个框,都被探测到。

  • 同样的方法加上Rigidbody

    • Mass:可以调整物体的质量(决定它的惯性),这里可以保持不变

    • Use Gravity:是否受到重力,如果受到重力会在空中下落。由于这里是太空,我们取消选择这一项

    • Is Kinetic:是否受到物理作用等;如果勾选了,物体将不会受到任何力和碰撞的作用。同样取消选择这一项

加上这两个部分后,飞船就如我们所愿,不会穿过其他物体了

在这个游戏中,飞船还可以通过接触到太空中的垃圾来收集它们。这项功能也需要Collider,它不仅能够模拟物体在真实物理世界的状态,也能监控有collider的物体之间是否发生碰撞,并且做出相对应的行为。

  • 打开Spacecraft的script,添加

   void OnCollisionEnter(Collision collision)

   {

        ...
   }
  • OnCollisionEnter会在游戏开始后的每一帧监听是否有带有Collider的物体与Spacecraft发生碰撞。如果有,在碰撞开始的那一帧,就会触发这个方法中的行为

  • 在OnCollisionEnter()中输入如下:通过collision.gameObject获取与飞船发生碰撞的物体,如果这个物体的标签是”Moon Trash”和”Space Trash”之一,就将他们消除

// If collide with Moon trash

        if (collision.gameObject.CompareTag("Moon Trash") || collision.gameObject.CompareTag("Space Trash"))

       {

           collision.gameObject.SetActive(false);

       }


 

位置触发剧情 – OnTriggerEnter

在太空中,当飞船偏航,距离行星越来越远到一定距离时,会触发“距离过远”的警报。如果继续远离到达边界,则会触发自动返航。这类似于角色走到某个特定位置时触发剧情这种情况,其实这也是通过Collider完成的。

但与物体间的碰撞不同之处是,特定的位置不能有rigidbody,否则会阻挡玩家走入这个区域。对于一方(飞船)有rigidbody而另一方(位置)没有,之间的碰撞就需要用到trigger了。

「Unity入门」Step by step的太空清理垃圾游戏Part 5: 碰撞探测与模拟测试,unity,游戏,游戏引擎,c#,ui,3d,测试工具

首先在场景中区分各个区域,因为这是3D场景,可以用球形/立方体来囊括不同区域。我在这里选择用球体,保证各个方向到中心的位置一致。

  • 建立两个大小不同的同心球体,命名为“InBound”和“OutBound”。

    • 把它们的mesh删掉,场景中不可见

    • 移动位置,确保它们的中心为行星。

  • 分别加上”Sphere Collider”组件,新建并添加InBound和OutBound标签

    • 勾选“is Trigger”

Trigger可以让我们得到一个物体与另一个物体碰撞的不同状态,分别有Enter、Stay和Exit。

游戏开始时,飞船是在两个球体当中的。当飞船越飞越远,退出inBound时,需要显示一个提示。如果飞船转向,重新进入inBound,就将提示关掉。

  • 打开Spacecraft代码,加入新的公开变量warning,它一开始的状态应该为SetActive(false)

  • 如果进入了InBound就关掉Warning,如果离开了InBound就打开Warning

   void OnTriggerEnter(Collider other)

   {

       if (other.gameObject.CompareTag("InBound"))

       {

           warning.SetActive(false);

       }

   }



   void OnTriggerExit(Collider other)

   {

       if (other.gameObject.CompareTag("InBound"))

       {

           warning.SetActive(true);

       }

   }
  • 保存,回到编辑器

  • Canvas中新建一个panel,加TextMeshPro,修改文字为“Warning: Too far from cleaning Space. Please return.”

    • 简单修改背景颜色等

  • 将panel关闭,并拖拽到SpaceCraft中“warning”变量对应的空中。

同样的道理,在退出OutBound范围后,飞船需要自动返航(换句话说是旋转180度)。

  • 在OnTriggerExit中加入

     if (other.gameObject.CompareTag("OutBound"))

       {

           transform.Rotate(Vector3.up, 180);

       }
  • 保存,返回编辑器。现在就实现了自动调转方向返航。

Main Takeaway

Collider是Unity开发中十分重要、几乎不可或缺的一个API。如果想要进一步学习相关内容,Unity官方也给出了非常简单明了的Collider相关课程,通过实际例子在短短几分钟内将清了初级开发者需要的所有相关知识。

如果有任何疑问或者建议,也欢迎在下方留言评论哟~文章来源地址https://www.toymoban.com/news/detail-793287.html

到了这里,关于「Unity入门」Step by step的太空清理垃圾游戏Part 5: 碰撞探测与模拟测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微信小程序通知,微信小程序长期订阅消息添加硬件设备能力的设备订阅消息step-by-step

    本文目的,分享一个实际案例: 开发微信小程序的报警器的微信订阅消息, 设备报警后触发微信报警 前提: 有一个微信小程序并且微信认证过。 1: 添加设备申请权限 2:按照实际情况填写设备信息, 一般等两天到三天能审核过  3: 申请设备消息能力 , 这个一部不做的

    2024年04月16日
    浏览(43)
  • 数字逻辑Fundamentals of Digital Logic with Verilog Design | 3rd Edition Solutins Chapter 4(step by step)

    第四章 重要内容:1、多路选择器  2、采用香农展开的多路选择器综合 3、译码器  4、多路分配器  5、优先级编码器  6、代码转换器  7、算数比较电路  8、Verilog语法 纠错:4-11香农展开式最后结果应该是同或门。 Chapter 4 Chapter 4, Problem 1P Chapter 4, Problem 2P Chapter 4, Problem 3P

    2024年02月05日
    浏览(29)
  • Sitecore10 Demo演示环境Azure一键部署(Step By Step Guide to installing Sitecore10 in Azure Paas)

    本文演示Sitecore XP Single(XP0)在Azure上的一键部署,即“30分钟生成Sitecore演示环境”的一环。 关于XP(即Sitecore Experience Platform) roles的相关介绍移步 XP Single配置主要用来开发和测试: Four Sitecore roles: Content Delivery, Content Management, Processing, and Reporting as a single WebApp instance.(cd,

    2023年04月25日
    浏览(36)
  • torch之optimizer.step() 与 scheduler.step() 的用法

      首先需要明确optimzier优化器的作用, 形象地来说,优化器就是需要根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值的作用,这也是机器学习里面最一般的方法论。   optimizer.step()通常用在每个mini-batch之中,可以根据具体的需求来做。只有用了

    2024年02月16日
    浏览(33)
  • 【博客692】grafana如何解决step动态变化时可能出现range duration小于step

    grafana本身是没有提供step参数的,因为仪表盘根据查询数据区间以及仪表盘线条宽度等,对于不同查询,相同的step并不能很好的发挥作用,所以step是动态计算的 所以在Grafana中并没有直接提供step参数,而是这两个参数:min step和resolution min step: min step故名思义设定的是step的

    2024年02月13日
    浏览(29)
  • 关于STEP文件格式的介绍

    Step文件(也称为STandard for the Exchange of Product data,或简称STEP或 ISO 10303 )是一种用于表示三维CAD数据的标准文件格式。它是一种 中立的格式 ,可以在不同的CAD软件之间进行交换和共享,因为它不依赖于任何特定的CAD软件。 Step文件的格式 基于一系列的实体(entity)和属性(

    2024年02月01日
    浏览(27)
  • [COCI2010-2011#6]STEP

    目录 1.题目: 题目描述 输入格式 输出格式 2.思路 1.ans数组的维护 2.L and R 的维护 3.ne数组与pr数组的维护 4.len数组:  3.代码: 1.有注释版: 2.copy版: 给定一个长度为N的字符序列  ,初始时序列中全部都是字符L。 有 q次修改,每次给定一个 x,若为L,则将 修改成R,否则将

    2024年02月15日
    浏览(29)
  • MATLAB中step函数的用法

    MATLAB中step函数的用法 step函数是MATLAB中的一个重要函数,用于绘制系统的阶跃响应图。它可以帮助工程师和科学家分析和设计控制系统。本文将详细介绍step函数的用法,并提供相应的源代码示例。 step函数的基本用法如下: 其中,sys是一个线性系统模型对象,可以是连续时间

    2024年02月03日
    浏览(41)
  • RK3588环境配置过程全记录 step 1

    最近在做毕设,由于是第一次接触NPU,所以踩了不少坑,顺便将它记录下来,防止后来者继续踩(doge)hh。 许多人都和我一样,刚到手拿到一块NPU算力版的时候都不知道从何下手,是先在PC端操作呢还是直接在板子上操作? 本人虽然熟悉一些类似于STM32 ,esp等板子,但是也是

    2024年02月09日
    浏览(39)
  • 西门子_Step7软件仿真方法

    西门子_Step7软件仿真方法 现在的PLC厂商提供的开发环境都具备仿真能力。无论是西门子、三菱、罗克韦尔还是ABB 或是其他一些厂商提供的产品都具有仿真功能。 仿真就是在没有硬件的情况下来测试程序功能,同时也为初学者提供了方便,即便没有硬件 我们也能进行试验,可

    2024年02月06日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包