- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
UnityD热更新技术脚本(五)NGUI脚本使用
Unity3D热更新技术-脚本(五) NGUI脚本使用
学习unity也有一段时间了,从一开始的懵懵懂懂到现在的学有所小成,心里挺是高兴的,不过目前还是处于初学者阶段,很多东西还等着自己去发掘去学习。? ?? ? 最近做了一个3D俄罗斯方块小游戏作为练手,花了有两个多星期吧,感觉话费太多时间了,中间不断地修改实现的方法,但确实让自己学到很多东西,可能对有些人来说,俄罗斯方块根本算不上什么,不过对于初学者来说,练手还是能学到很多东西的,好了,废话不多说,接下来说说我如何完成的吧,先贴上最终的效果图--来自狗刨学习网
? ?? ? 其实对于3D的俄罗斯方块,我觉得可以用多种方法实现的,一开始,我尝试用unity提供的碰撞机制去做这个游戏,结果问题一个个接踵而来,解决了一个又出现了另一个,最后只能上网找教程,网上是有网友实现了的,有一种unity实现方法是直接用GUI,把button当作方块,虽然也能做出很好的效果,但是我觉得这样就不算3D了吧。? ?? ?另外我还找到一份代码,它实现了真正意义上的3d俄罗斯方块,不过它是JS写的,我试着看了一下代码,然后自己用C#写了一个自己的,看代码里面的注释,应该是外国的,看完它的代码,着实让我学到很多东西,我之前想通过真正的碰撞去完成这个游戏,结果问题多多,但是网上的这份代码提出了一种很聪明的解决方法,用两个布尔类型的数组分别存放已经固定下来的方块和正在掉落的方块,通过判断下落方块下一个位置对应坐标的布尔值的真假,为真则停止下落,固定位置。? ?? ? 另外可以将边界对应的值设为真,从而方块在碰到边界无法继续运动。在检测满一行方块消除的时候也相当的方便,可以直接对布尔数组进行操作。这种思维让我恍然大悟,才发现自己真的是有待提高啊。? ?? ? 好了,开始动手,首先你需要一个正方体模型,它的边界需要经过一些处理,在多个相连的时候才能显现出接痕,这个我自己用Maya做了一个,很简单的。然后导入模型的FBX文件到你的项目中。? ?? ? 接着创建一个新场景,在场景中创建边界,如效果图中所示,用unity自带的Cube就可以了,改一下一些参数就可以有图中的效果,当然你也可以自己制作边界物体。设置左边界x坐标为3,右边界为14,这不是硬性规定说得设置成这样的,这不过是方便我编写代码而已,哦,另外,由于方块的最大size是4,所以我两边都留出了4个位置,中间10个位置是方块可以放置的地方,底边界放置在0位置。? ?? ? 创建一个空物体对象命名为Manager,并为其创建一个绑定脚本Manager.cs,接着一一创建对应方块的空对象,对其各自命名,注意,之前我导入的正方体只是方块的组成单体,不同形状的方块需要四个正方体拼接在一起,正常俄罗斯方块游戏中有7种方块,将这七个空物体对象创建为Prefab,一一对应命名,再接着为方块创建绑定脚本,这里,我只需要一个脚本文件,即7种方块都绑定同一个脚本。? ?? ?我试过各自做出七个不同的模型,结果,很麻烦,由于模型是一个整体,消除部分是一个问题,然后我还要写七个脚本对应不同的方块,其实有很多东西是一样的,这简直就是浪费时间和资源。? ?? ? 然后我发现了网上代码中用了一种和巧妙的方法,在绑定的脚本中,设置一个公有的字符串数组,值只有0和1,显示出方块的形状,比如直方块,即4个正方体直线连接在一起,这是我们需要填上字符串数组的size为4,然后string[1]的值为“1111”,其余都为0,大家应该都明白了吧,一个方块,算上周围的空的地方围成一个正方体,必须是正方体,不然旋转之后,你的数据没办法修改。? ?? ? 在Manager中创建一个公有的GameObject数组,然后把7种方块对应的Prefab拖拽到数组里面,Manager随机生成方块,绑定方块的脚本根据字符串数组组合正方体。这一步算是最重要的吧,根据字符串数组计算组成方块各正方体的位置,一开始就是因为老是弄错正方体的位置所以除了点问题,还有就是旋转轴心,轴心错了也会让你接下来的步骤漏洞百出。? ?? ? 首先,在之前我们创建方块空对象物体的时候,坐标都是为(0, 0, 0)的,就以这个作为轴心点坐标,如果size是奇数的话,那么处于围绕方块大正方体中间的那个正方体的中心就是轴心坐标,如果size为偶数的话,大正方体的中心便为轴心,以轴心坐标确定各个正方体的位置,这是相当重要的。注意,各个正方体在方块中的坐标不同于在世界坐标中的坐标,轴心坐标即方块在世界坐标系中的坐标,找对了轴心才能正确算出各个正方体在世界坐标系中的坐标。
1. for(int y=0;ysize;y++){
2. for(int x=0;xsize;x++){
3. if (blo
文档评论(0)