通过做unity3d的demo,我发现了一些小问题,并且解决了不少,遇到的问题我没有及时记录下来,以后我会通过随笔的方式记录下我的成长经历,在这里先缅怀下我逝去的时光。T.T..

  However,从今天开始做的第一件事,就是把我做的demo的功能更新的实现方法放在这里,供大家日后参考,以提供小小的解决方案。

  先放一张游戏图,做的是一个人,在地图上行走,今天要讲到的是,关于如何实现空气墙的讨论。

  

   众所周知,一般来说,地图是有限制大小的,我们不需要玩家跑到一些限制地点,例如地图的极限边缘,这样就失去了可控性,而且容易触发各种意外。所以最好的方式是限制玩家的行动范围,这就出现了游戏中著名的空气墙,明明3D游戏中,可以看得到眼前的景象,却被一堵空气墙挡住了去路。这不是不让你去,而是你过去了,就麻烦了,所以,称得上是良心的作品,一般范围会放的很宽,因为考虑的更多了嘛,而一些赶工的作品呢,为了避免遇见突发情况,就喜欢将玩家尽可能关在“空气墙里”,这样更容易写程序。题外话说多了,我们来讲一讲原理吧。其实空气墙是基于collider的碰撞器,碰撞器检测到我们的角色与空气墙接触了,那么就限制我们的角色坐标,不让他越过雷池了,而大多数的空气墙使用什么方法来避免玩家越过呢?

  有些人突然会想到,用类似于地图平面,我们能站在平面上,无法穿过去,就是因为地图带有collider属性,如果我们再弄一块 “平面”,竖起来放,加上collider,不就做成了空气墙了吗?这样做是可行的,然而平面---也即是plane是基于mesh 的碰撞检测,是基于mesh顶点的,比较耗费运算资源,而且碰撞壁没有厚度,物体穿过碰撞壁的风险较高。而比较正规的做法应该是用box collider拼接,有利于运算效率和减少误判。相关的例子,可以参考一些官方的demo和一些已经成熟了的游戏demo。

  来,那个angry-bots我来给大家截个图,大家就知道了,在那个官方游戏demo里,程序猿是如何实现空气墙的。

  大家看到了,在environment下的 collider 里面有好多的capsule 和cube 都是用来拼接出复杂的空气墙系统的,而打开其中的一个cube,我们看到了,在左图中是一个墙面,然而我们无法离墙太近,因为墙面是设有空气墙的,我们在右图中打开mesh,看到了贴图的前面的确竖着黑压压一个长方体块儿。

  下面我就演示如何在自己的地图上添加空气墙吧。

  首先第一步,添加一个 plane,这个plane要放大到足够覆盖到地图的一条边才行。

  这里需要注意一点了,你看到我的plane的mesh 是已经旋转过的了,刚开始添加的plane是平躺着的,所以需要你调整rotation 属性,来使得 你的plane “竖起来”,像一堵墙一样。接着你要关闭plane的mesh render,这样在游戏运行的时候,这个plane 的绿色mesh线就会消失,变得透明。对了,还有一点尤其是注意的,你调整rotation往往在90度,和270度的时候,都可以让它竖起来变成一堵墙,但是呢?哪一个角度才行呢?答案是-要根据transform的正方向来看。你看我图中的正方向是朝着地图内侧的,这样看似乎不太明显,看下图有个对比的,你就明白了。

         

  通过找不同大家是否发现了什么呢?对,就是那个对着地图水平面的轴,要朝向地图内侧!为什么?因为当角色 从地图内侧走来的时候,如果plane mesh 的朝向不是朝着角色的,那么这个mesh 是不被渲染的,而且 collider 也不会有作用,这是direct3d那一套的默认选择,当然如果你足够牛,修改他的shader的话,实现90度和270,都可以实现碰撞的效果也是可以的~

  好了,本人水平有限,就不再讨论其他的空气墙做法了,其实用脚本写地图碰撞检测也挺快的,但是,在一张复杂的地图上,这样就显得有些乏力了,所以,大家练好用小物体填充的方式,做空气墙,对做游戏是非常实用有效的。现在已经和大家讨论了正确使用空气墙的做法了,一起进步吧~~~

转载于:https://www.cnblogs.com/pengsy/p/4697209.html

unity3d android开发笔记之空气墙的实现相关推荐

  1. Android开发笔记(一百六十五)利用红外发射遥控电器

    红外遥控是一种无线控制技术,它具有功耗小.成本低.易实现等诸多优点,因而被各种电子设备特别是家用电器广泛采用,像日常生活中的电视遥控器.空调遥控器等等基本都采用红外遥控技术. 不过遥控器并不都是红外遥 ...

  2. Android开发笔记(一百二十六)自定义音乐播放器

    MediaRecorder/MediaPlayer 在Android手机上面,音频的处理比视频还要复杂,这真是出人意料.在前面的博文< Android开发笔记(五十七)录像录音与播放>中, ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:概述

    1.前言 数据生产和数据展示是常见的两大专业级移动GIS应用场景,这里我们针对数据生产环节的ArcGIS的离在线一体化技术给大家做一个基本的介绍和梳理. 使用ArcGIS离在线一体化技术首先需要以下基 ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步...

    1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出 ...

  5. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据编辑...

    1.前言 在上一篇我们已经实现了离线地理数据库的下载,这一篇我们着重介绍离线数据库的加载与编辑. 由于ArcGIS Runtime SDK for Android 10.2.X版本并没提供要素绘制功能 ...

  6. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据下载...

    1.前言 1.1.环境准备: ArcGIS for Desktop 10.4.1(10.2.1以上版本即可) ArcGIS for Server 10.4.1 (10.2.1以上版本即可) Postg ...

  7. 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用...

    1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...

  8. 《ArcGIS Runtime SDK for Android开发笔记》

    开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>--(1).And ...

  9. Android开发笔记(序)写在前面的目录

    知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入 ...

最新文章

  1. 大白话详解Spring Security认证流程
  2. 个人站点提高访问量七大方案
  3. 跨域 || Jsonp
  4. 能源局将提高光伏“领跑者”项目技术指标
  5. qtableview点击行将整行数据传过去_可以实时获取数据的Database Asset插件
  6. 备份自己的myeclipse快捷键到需要的环境
  7. 10.Shell 编程从入门到精通 --- 超级工具(shell,ssh,screen,vim)
  8. 算法 后减前最大值,zt
  9. HTML5学完就去浪迹天涯的我...
  10. 详解30道Vue面试题
  11. java 汇率换算_汇率换算自然语言理解功能JAVA DEMO
  12. shardingsphere5.0 解决第一次执行sql慢的问题
  13. 写公众号的一些【奇葩经历】以及【思考】
  14. 《笨方法学 Python 3》31. 作出决定
  15. 装机、做系统必备:秒懂MBR和GPT分区表
  16. GotW#63 狂乱的代码
  17. School:1靶机
  18. IMAU 软件项目管理 期末复习总结 第七章
  19. matlab胞元数组
  20. 如何看产品之:价值链

热门文章

  1. vue监控表单输入事件,正则验证手机号,邮箱
  2. OpenCV实战系列——拟合直线
  3. 网站制作过程合理的步骤是怎么样的呢?
  4. PHP 二维数组排序
  5. c语言一些如暂停、清屏等功能(持续更新ing...)
  6. 【vs code】shell 语法提示,检查,运行调试
  7. 数据可视化就是数据分析吗,两者之间是什么关系?
  8. 8.30 vim编辑器 文件查找 文件系统 作业(练习)
  9. c#反射入门篇(Reflection)——PropertyInfo 发现属性
  10. 展锐UDX710:LAN7800 PHY驱动调试