处理ARPG和RTS中的碰撞技术精萃[转帖] 

2006-12-06 15:56 发布

4009 1 0


在2006年10月的国庆期间,我分析了整整4天,终于理清了整个RTS引擎中的碰撞流程,在国庆过后,就是现在,我完成了整个碰撞处理系统,是基于3D游戏引擎实现的RTS模式的collision AI,其中包括:对碰,摩擦碰,角碰,追踪碰,分离碰,静态碰,并行碰,一共7种关系碰撞状态。

因为节前我在gameres和tw发表过一篇关于collision AI相关的文章,那时只是从一个分析角度,确定碰撞流程的开发方向,其中缺乏诸多技术细节。因为这点,当时许多人都在批评我,并且我也承诺在往后几天会给出详细的碰撞技术资料。现在刚刚做完碰撞,下一步是规则系统,因为今天处于缓冲期,所以我把原创的思想+制作技巧整理了一下。目前国内的游戏制作水平还很落后,我们走在前面的老革命,理当尽一些绵薄之力。

要制作出RTS模式的AI碰撞系统,首先你需要的是一个DirectionScan函数,该函数的作用在于分析两个物体的方位坐标关系。因为现在3D游戏引擎中的对象往往大小不一,加上物理坐标系统又全是用的精度浮点,所以在方位坐标分析上,应该按从BoundBox取出的4轴进行判定。可能这一段你会感到不好理解,我画了一幅方位分析的草图。DirectionScan这一步的主要任务,是得到一个方位坐标,打个比方,我有两个物体,分别是obj1和obj2,DirectionScan函数是基于物理坐标系统分析出obj2位于obj1的什么方向。而我提到的BoundBox的4轴判定,是指DirectionScan的坐标分析方法。最后得到的结果是,obj2位于obj1的方向,其中包括:上,右上,右,右下,下,左下,左,左上,原地,一共9个方位。

因为DirectionScan的实现很麻烦,而从直观上理解,它的前后逻辑分析并不麻烦,一般只要做过几年游戏,一眼就能明白,所以我就不在这点上浪费唇舌了,去看图。

在分析出了方位以后,我们可以用辩证法来假设一些实际情况。为了更好表达,我又画了一幅图,请参看A1模式以后再来阅读下文。

值得一提的是,本文只介绍3D Collision AI,并没有涉及到3D Collision Detected,因为关于Detected的技术资料目前太多太多,有点3D游戏制作基础的地球人都会,所以在碰撞Detected的技术上我就不予以讲解了,因为写Detected纯粹是浪费时间。

刚才提到的A1模式,如果你把页面往下拉,就会看到我画的模式图解,都是中文在说明。而在说明中,我提到了关系表,其实用数组表这是出于开发经验的缘故,如果用程序来判定碰撞模式,9种坐标方位值,加上obj1的9种运动方位,再加上obj2的运动方位,这里就有729种碰撞模式,如果用代码实现这729种碰撞的分析,那是何其复杂,所以我将之做成了一张3维数组表,并且做了一个针对这729种碰撞模式专用的分析工具,可以直接生成源码,如果你感兴趣可以下载。不过我建议在仔细阅读完这篇全文后再来使用它。

碰撞分析部分到这里就查不多都说完了。接下来的是实现Collision AI,这时候你应该挽挽袖口,准备大干一场,因为实现Collision AI并不容易,少则一周,多则一月。如果你在一周之内就可以搞定Collision AI的算法,那说你的IQ非常之高,我对你表示佩服。因为Collision AI的实现,我花了整整一周,才做到了完善的地步。

在实现Collision AI的时候,有个很重要的技巧,我不得不提一下。前面我讲到各种碰撞,比如对碰,分离碰,并行碰,追踪碰等等,因为我实现Collision AI时,发现这许多的碰撞,其实在处理上只有3种情况。

第一种情况:两个3D物体发生碰撞,其中一个物体会处于等待状态,而另一个是从边上绕过,当处于等待的物体没有和从边上绕过的物体发生碰撞时,等待状态才被取消。这种情况,只会发生在对碰和静态碰的时候。

第二种情况:两个3D物体发生碰撞,其中一个物体处于等待状态,而另一个物体则是保持运动路线,一直到运动的物体没有和等待的物体发生碰撞时,等待状态才被取消。这种情况只会发生在角碰和追踪碰的时候。

第三种情况:两个3D物体发生碰撞,两个物体都不理会,仍然按预定的路线继续运动。这种情况只会发生在并行碰,分离碰,摩擦碰的时候。

根据以上条件,我们在Collision AI的时候其实可以更简单,因为RTS和ARPG的Collision AI无非是要做到尽量不发生拥堵、碰死的情况,那些逻辑上的碰撞模式,比如对碰,并行碰,分离碰,等等都可以被取消掉,直接在关系碰撞表中指定以上三种情况。比如下图的A1碰撞模式,AI碰撞模式是属于第二种碰撞情况。

虽然Collision AI的关系数组表可以被涉及得更简单,但是在思维方式上,我不建议你把关系碰撞表理解成只是得到最终碰撞的分析方式,因为这样干了以后,你会丧失那种对Collision AI特有的感觉,你会在调试时,遇上重重BUG。那种感觉,其实就是对7种碰撞模式的感觉:对碰,摩擦碰,角碰,追踪碰,分离碰,静态碰,并行碰,一共7种。这7种碰撞模式,一定要让它牢牢固定在Collision AI的理念中,否则你以后在做游戏引擎的Collision AI系统时,会遇上很多难以DE掉的BUG。

我在论坛给出的附件,分别是,已经由我做好的一张包括729种碰撞模式的3维数组表,以及一个这张三维数组表的编辑工具。因为我目前做的是游戏引擎,Collision AI又和内核息息相关,其中涉及到运动系统,碰撞检测系统,很多很多东西,缺少一样我的Collision AI代码都不能正常工作,所以我现在还不能给出Collision AI的全部代码,我只能把国庆期间,用了我4天时间做出的那张碰撞表给出来,并且给出那个代码生成工具的代码。

如果你需要制作Collision AI,或则你对现有引擎的Collision AI不满意,打算重写,那么我们多少都算是战友了。

如果你没做Collision AI,但你认真看完了该贴,那么我要算你的老师了。作为你的老师,我希望你记住我,中国游戏界的游戏引擎专家,至少在Collision AI上要算专家。抱歉,我说得很难听,我只希望你以后在大街上碰见我,或则在论坛上碰见我,或则看到我在某地发布我的游戏,你能够给我捧捧场,象征性的表示一下崇拜就行了。我喜欢被人崇拜,我喜欢荣誉感。我从小到大都习惯了,阿门。

另。我的近几年的大作会开源,会公布全部代码,和很多很多游戏资源。不管是企业还是个人业余学习,相信都不会错过的。那是媲美当今业界大作的作品。注意!我会将之开源,甩进SF.net,然后开个个人主义的网站,来给自己搞宣传。趁此期间,我还会另行开发一部比较有艺术价值,但是又不考虑商业价值的游戏,完全是个人爱好。我是游戏制作狂。阿门。

请站长将此文甩进精华区。





本主题包含附件: sf_20061010233756.jpg (107695bytes)

楼主新帖

TA的作品 TA的主页
B Color Smilies

全部评论1

你可能喜欢

处理ARPG和RTS中的碰撞技术精萃[转帖] 
联系
我们
快速回复 返回顶部 返回列表