unity3d android开发笔记之空气墙的实现

  通过做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,看到了贴图的前面的确竖着黑压压一个长方体块儿。

  好了,现在已经和大家讨论了正确使用空气墙的做法了,一起进步吧~~~

时间: 2024-10-15 22:56:44

unity3d android开发笔记之空气墙的实现的相关文章

Android开发笔记(一百零三)地图与定位SDK

集成地图SDK 国内常用的地图SDK就是百度和高德了,二者的用法大同小异,可按照官网上的开发指南一步步来.下面是我在集成地图SDK时遇到的问题说明: 1.点击基本地图功能选项,不能打开地图,弹出"key验证出错!请在AndroidManifest.xml文件中检查key设置的"的红色字提示.查看日志提示"galaxy lib host missing meta-data,make sure you know the right way to integrate galaxy&

[APP] Android 开发笔记 003

接上节 [APP] Android 开发笔记 002 5. 使用ant release 打包 1)制作 密钥文件 release.keystore (*.keystore) keytool -genkey -v -keystore "release.keystore" -alias "release" -keyalg "RSA" -validity "10000" 这里需要注意的是: -keystore "relea

《ArcGIS Runtime SDK for Android开发笔记》——(10)、ArcGIS Runtime SDK支持的空间数据类型

1.前言 移动端的数据来源非常重要,它决定了移动端功能的实现.早期的ArcGIS Android API中,主要以接入在线的数据源为主,因此主要实现在线的地图浏览.查询和路径分析.地理处理等从操作:在v1.0.1版本中,ArcGIS移动产品第一次可以加载松散型切片,自此逐渐掀开了对本地离线数据源的支持,也因此可以在移动端实现越来越受欢迎的离线功能.现在最新的10.2.7 API离线支持数据主要包括紧凑型切片.tpk切片包..geodatabase..shp文件.地名地址库.网络数据集. 转载请注

Android开发笔记--hello world 和目录结构

原文:Android开发笔记--hello world 和目录结构 每接触一个新东西 都有一个hello world的例子. 1.新建项目 2.配置AVD AVD 没有要新建个,如果不能创建 运行SDK Manager更新 3.接着运行就可以了 第一次启动要1分多钟 不要关 4.添加代码 5.接着在运行就OK了 目录结构 1.src - 用于放置源程序 2.gen - 自动生成 R.java 文件,用于引用资源文件(即 res 目录下的数据) 3.assets - 用于放置原始文件,Androi

Android开发笔记(一百一十六)网络学习资源

知名网站 本系列的开发笔记,对Android开发来说只是沧海一瓢,还有更多的技术等待我们去汲取.下面列出几个常用的开发网站,供初学者上路: 首先当然是国内首屈一指的技术网站csdn啦,csdn提供了众多频道,包括博客.论坛.下载.问答等等,其中博客专栏提供了最新的技术文章,值得推荐.csdn博客专栏的地址是 http://blog.csdn.net/column.html 下面是csdn博客专栏的网页截图: 其次是国外有名的开源网站GitHub,这里有众多的开源项目源码,是开发者分享代码的乐园.

Android开发笔记(八十八)同步与加锁

同步synchronized 同步方法 synchronized可用来给方法或者代码块加锁,当它修饰一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.这就意味着,当两个并发线程同时访问synchronized代码块时,两个线程只能是排队做串行处理,另一个线程要等待前一个线程执行完该代码块后,才能再次执行synchronized代码块. 使用synchronized修饰某个方法,该方法便成为一个同步方法,在同一时刻只能有一个线程执行该方法.可是,synchronized的锁机制太

android开发笔记1

1.强制横屏,不能转屏 在AndroidManifest中需要的activity里: <application android:icon="@drawable/ic_launcher" android:label="@string/app_name">   <activity android:name=".GestureFlip"     android:label="@string/app_name"   

ANDROID开发笔记(二)

动机: 开发的一个背单词的软件. 不会实现划屏的特性. 方法: 第一步尝试: 在MainActivity中, 增加以下代码后, 如果在视图的空白处点击时, 文本框中的时间就会发生改变. @Override     public boolean onTouchEvent(MotionEvent event) {         // TODO Auto-generated method stub         final TextView textview = (TextView)findVie

ANDROID开发笔记(一)

manifest, 英['m?n?fest] vt. 显示,表明;证明;使显现 adj. 明白的,明显的 n. 货单,旅客名单 wrap_content, 根据实际内容调整   原来新版的ADB已经支持无线连接了,这样对于我经常使用ADB安装软件的用户可谓是一大福音,这意味着91助手.腕豆夹这类的软件估计在不久的将来也能支持这个功能了,当然前提是你必须下载ADB(PC)软件,另外在手机侧你需要安装一款ADB wireless widget这个插件.使用方法: 1. 先在手机上执行adb wire