位置: 编程技术 - 正文

Unity 3D俄罗斯方块(3ds 俄罗斯方块)

编辑:rootadmin
学习unity也有一段时间了,从一开始的懵懵懂懂到现在的学有所小成,心里挺是高兴的,不过目前还是处于初学者阶段,很多东西还等着自己去发掘去学习。 最近做了一个3D俄罗斯方块小游戏作为练手,花了有两个多星期吧,感觉话费太多时间了,中间不断地修改实现的方法,但确实让自己学到很多东西,可能对有些人来说,俄罗斯方块根本算不上什么,不过对于初学者来说,练手还是能学到很多东西的,好了,废话不多说,接下来说说我如何完成的吧,先贴上最终的效果图--来自狗刨学习网 其实对于3D的俄罗斯方块,我觉得可以用多种方法实现的,一开始,我尝试用unity提供的碰撞机制去做这个游戏,结果问题一个个接踵而来,解决了一个又出现了另一个,最后只能上网找教程,网上是有网友实现了的,有一种unity实现方法是直接用GUI,把button当作方块,虽然也能做出很好的效果,但是我觉得这样就不算3D了吧。 另外我还找到一份代码,它实现了真正意义上的3d俄罗斯方块,不过它是JS写的,我试着看了一下代码,然后自己用C#写了一个自己的,看代码里面的注释,应该是外国的,看完它的代码,着实让我学到很多东西,我之前想通过真正的碰撞去完成这个游戏,结果问题多多,但是网上的这份代码提出了一种很聪明的解决方法,用两个布尔类型的数组分别存放已经固定下来的方块和正在掉落的方块,通过判断下落方块下一个位置对应坐标的布尔&#;的真假,为真则停止下落,固定位置。 另外可以将边界对应的&#;设为真,从而方块在碰到边界无法继续运动。在检测满一行方块消除的时候也相当的方便,可以直接对布尔数组进行操作。这种思维让我恍然大悟,才发现自己真的是有待提高啊。 好了,开始动手,首先你需要一个正方体模型,它的边界需要经过一些处理,在多个相连的时候才能显现出接痕,这个我自己用Maya做了一个,很简单的。然后导入模型的FBX文件到你的项目中。 接着创建一个新场景,在场景中创建边界,如效果图中所示,用unity自带的Cube就可以了,改一下一些参数就可以有图中的效果,当然你也可以自己制作边界物体。设置左边界x坐标为3,右边界为,这不是硬性规定说得设置成这样的,这不过是方便我编写代码而已,哦,另外,由于方块的最大size是4,所以我两边都留出了4个位置,中间个位置是方块可以放置的地方,底边界放置在0位置。 创建一个空物体对象命名为Manager,并为其创建一个绑定脚本Manager.cs,接着一一创建对应方块的空对象,对其各自命名,注意,之前我导入的正方体只是方块的组成单体,不同形状的方块需要四个正方体拼接在一起,正常俄罗斯方块游戏中有7种方块,将这七个空物体对象创建为Prefab,一一对应命名,再接着为方块创建绑定脚本,这里,我只需要一个脚本文件,即7种方块都绑定同一个脚本。 我试过各自做出七个不同的模型,结果,很麻烦,由于模型是一个整体,消除部分是一个问题,然后我还要写七个脚本对应不同的方块,其实有很多东西是一样的,这简直就是浪费时间和资源。 然后我发现了网上代码中用了一种和巧妙的方法,在绑定的脚本中,设置一个公有的字符串数组,&#;只有0和1,显示出方块的形状,比如直方块,即4个正方体直线连接在一起,这是我们需要填上字符串数组的size为4,然后string[1]的&#;为“”,其余都为0,大家应该都明白了吧,一个方块,算上周围的空的地方围成一个正方体,必须是正方体,不然旋转之后,你的数据没办法修改。 在Manager中创建一个公有的GameObject数组,然后把7种方块对应的Prefab拖拽到数组里面,Manager随机生成方块,绑定方块的脚本根据字符串数组组合正方体。这一步算是最重要的吧,根据字符串数组计算组成方块各正方体的位置,一开始就是因为老是弄错正方体的位置所以除了点问题,还有就是旋转轴心,轴心错了也会让你接下来的步骤漏洞百出。 首先,在之前我们创建方块空对象物体的时候,坐标都是为(0, 0, 0)的,就以这个作为轴心点坐标,如果size是奇数的话,那么处于围绕方块大正方体中间的那个正方体的中心就是轴心坐标,如果size为偶数的话,大正方体的中心便为轴心,以轴心坐标确定各个正方体的位置,这是相当重要的。注意,各个正方体在方块中的坐标不同于在世界坐标中的坐标,轴心坐标即方块在世界坐标系中的坐标,找对了轴心才能正确算出各个正方体在世界坐标系中的坐标。for(int y=0;y<size;y&#;&#;){for(int x=0;x<size;x&#;&#;){if (block[y][x] == '1'){blockMatrix[y, x] = true;var cube = (Transform)Instantiate(Manager.manager.cube, new Vector3(x - childSize, childSize - y, 0), Quaternion.identity);cube.parent = transform;}}}根据字符串数组中‘1’对应的x,y与参照&#;做运算便可以计算出其位置了。 接着便是计算各正方体在世界坐标系中的x坐标,即方块在世界坐标中的坐标减去(size-1)*0.5,求出方块外围正方体左上角的第一个正方体的x坐标,同样道理,这个应该不难理解,其y坐标为已知,可根据它来确定方块的起始下落位置,参考&#;也是(size-1)*0.5。哦,起始下落位置的设置也是有规律的,当size为偶数时,坐标必须是符合规定范围内的一个整数加0.5,如果是奇数的话,中心正方体的坐标可作为方块的起始坐标。 当方块旋转时,判断其是否可以旋转(边界等),可以旋转,则要变换方块对应的布尔数组,跟着相同方向旋转数组即可。当方块停止下落时,销毁方块,同时将记录下来的各个正方体的坐标对应的产生正方体,这一步是为了接下来方便销毁满一行的正方体,修改对应的整个区域的布尔数组,上文提到的。判断是否满一行也很简单,同一个y坐标,连续十个x坐标对应的布尔&#;为真即销毁正一行的正方体,然后大于y的正方体集体下落一个单位,再继续检测。 以上已经完成游戏的大半部分了,也算是解决了一个技术难点吧,接着是运行,本实现方法用yield来实现游戏一帧一帧的动画,初开始接触这个东西,只是普通的认为它就是一个延缓暂停的机制。最近才知道其真正的用法。这里我们需要在Start函数中执行我们要的操作,然后游戏就可以如我们所期望的那样运作了。其实,用Update函数也是可以实现的,可能会麻烦一点,用yield反而比较简便。 在while(true)循环里面使用yield,满足特定条件时跳出循环,注意,请务必设置一个跳出的特定条件,而且是程序会最终执行到那一步的,不然,程序会陷入死循环。 另外,在有些时候延缓执行或者整个程序进入等待,这里需要特别注意一下,因为yield毕竟不能像update函数那样,在一帧一帧里实现你要的效果,稍微错漏某个地方都会让你的游戏没法像预期那样运行,可以自己尝试着在代码中修改让后运行,根据结果的不同可更清楚地认识了解yield的用法。还有就是yield的用法在JS与C#中大为不同,这是需要注意的,在把JS代码重写成C#代码的时候需要特别注意这一点。 大概就这么多吧,这里附上两个代码资源,一个JS版的,一个C#版,可根据自己的语言喜好选择,不过JS代码中有些东西跟上述的不符,不过大概原理是一样的。

推荐整理分享Unity 3D俄罗斯方块(3ds 俄罗斯方块),希望有所帮助,仅作参考,欢迎阅读内容。

Unity 3D俄罗斯方块(3ds 俄罗斯方块)

文章相关热门搜索词:三维俄罗斯方块,俄罗斯3d游戏,ue4俄罗斯方块,俄罗斯3d游戏,ue4俄罗斯方块,3d俄罗斯方块下载安装,3d立体俄罗斯方块,3d立体俄罗斯方块,内容如对您有帮助,希望把文章链接给更多的朋友!

unity 对xml 文件的处理之 TinyXmlReader 使用自己总结 附上插件地址

Unity3D技术之从 Cinema 4D 中导入对象浅析 从Cinema4D中导入对象Unity可直接导入Cinema4D文件。开始时只需将.c4d文件放到工程的资源(Assets)文件夹下。切换回Unity时,场景自动导入并显示在工程视图(Pr

unity安装异常,monodevelop 缺失,安装.net3.5.1报错0x 最近重装了电脑,再次安装unity的时候发现死活看不见monodevelop,搞了一天,总算弄清楚原因。原因:重装的系统是win8,.net3.5更新失败。网上有很多类

标签: 3ds 俄罗斯方块

本文链接地址:https://www.jiuchutong.com/biancheng/381522.html 转载请保留说明!

上一篇:Unity3D技术之艺术资源最佳实务指南(unity3ds)

下一篇:unity 对xml 文件的处理之 TinyXmlReader 使用自己总结(unity xml读取)

  • 所得税汇算清缴招待费扣除标准
  • 上年度已交房产税减免如何做账务处理
  • 自己的医院
  • 公司附加税怎么计算
  • 车辆购置税和车船税的区别在哪
  • 印花税税源明细表怎么填
  • 平行结转分步法各步骤的费用
  • 现金销售收入是净收入吗
  • 银行利息月末结算方式
  • 银行日记账写错了怎么改
  • 残疾人保障金计算方法
  • 什么情况下可以报警
  • 银行卡撤销账户
  • 交车辆购置税可以刷信用卡吗
  • 挂靠工程的所得税账务处理怎么做?
  • 公司买的设备
  • 估价入账是什么意思
  • 支付劳务报酬怎么做账
  • 城市建设维护税和教育费附加怎么算
  • 商品流通企业会计心得体会3000字
  • 卫生巾的税率
  • 统一员工行为规范
  • 失控发票不处理的后果
  • 住房公积金做账怎么看交了哪些人
  • 自建仓库转让如何计算增值税
  • 企业更换银行卡意味着什么
  • 进料加工料件需补税的情况
  • 小规模季度的税收优惠
  • 税局代开专票季度未达起征点怎么缴纳地税?
  • 罗马尼亚卫生部长
  • deepin 20 wifi
  • launcher.exe是什么,每次开机都是否需要进行更改
  • 股票的交易费用多少
  • php面向对象面试题
  • 银行公户转账需要带什么
  • 银行开户费用怎么做账
  • node.js in action
  • 公司变更需要哪些资料~问华杰 财务
  • 超参数设置
  • redis zset源码
  • win11装双系统虚拟机mac
  • php添加数据到数据库失败error
  • ip6tables-restore命令 还原ip6tables表
  • 收据能抵成本吗
  • 专票认证对企业有影响吗
  • 小规模纳税人如何开专票
  • 出口业务的会计处理
  • 应付货款和应付款的区别
  • 预收款项可以开发票吗
  • sql server 2008 r2 express 精简版与企业版的区别
  • 可供出售金融资产现在叫什么
  • 购进免税农产品进项税额计算
  • 检测费可以抵扣吗
  • 申报残保金的时候有处罚决定书怎么办
  • 港币转人民币怎么算
  • 预计负债的账务处理
  • 结转固定资产清理科目
  • 在途物资和材料采购的区别
  • 会计如何建账做账
  • mysql在查询结果中查询
  • mysql查询id最大的记录
  • mysql数据库简单介绍
  • 误删了分区怎么恢复
  • ubuntu里怎么装软件
  • win10快速访问在哪
  • Win7旗舰版电脑亮度怎么调节?
  • android5种布局
  • node.js怎么搭建服务器
  • shell基础教程
  • 实用的批处理
  • 网站渗透违法吗
  • unity jsonutility
  • nodejs模块有哪些
  • 前端自动化开发软件
  • javascript高级程序设计pdf百度云
  • 孙其功陪你学之——unity3d进程暂停
  • jQuery+ajax实现实用的点赞插件代码
  • locust框架
  • 海关免税金额现在是多少金额
  • 江苏国税申报怎么操作流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设