主要参考:http://blog.csdn.net/kobbbb/article/details/8900974

绘制了俄罗斯方块,进行unity的入门学习。

结果如下:

基本功能实现了。

总结如下:

1.Unity和DX类似,默认左手坐标系。旋转和绘制时候为顺时针方向。

2.注意Manger、myCube、block1,block2....之间的关系

其中myCube为绘制的基本单元,block1等形状也是由myCube来组合绘制的。如图2-2中,block1属性中只是进行了逻辑上绘制的设计,并没有真正的render,在cs脚本里,最后还是有myCube进行Instance操作,进行字符串中‘1’的判断,组合绘制的Block1.....

而Manger作为一个空的GameObject,对整体进行控制,其中组合了七种形态,并加载了myCube,来进行真正的绘制。

            

图2-1                                                            图2-2

3.区分静止的block绘制和动态下降的block绘制

    IEnumerator Fall(){     while(true){mYPosition--;//block下落,if (true == Manager.manager.CheckBlock(blockMatrix, mXPosition, mYPosition))//如果碰壁,下落停止{           Manager.manager.SetBlock(blockMatrix, mXPosition, mYPosition + 1);//绘制静态的block,并在SetBlock内初始化一个新的blockDestroy(gameObject);//删除此次动态的block,break;//这个block消亡了,进行新的block下落}for(float i=mYPosition+1;i>mYPosition;i-=Time.deltaTime*mFallSpeed)//平稳的下落一个单位,以时间为控制,而不受帧率的控制{transform.position = new Vector3(transform.position.x, i - childSize, transform.position.z);yield return null;//等待下一帧进行下落...}}} 

4.场景坐标系以及每个动态Block的初始化坐标

本例有本地坐标系和世界坐标系之分。

图4-1

如上图4-1,Block作为一个GameObject,需要确定一个Transform,并且为所有子集的中心。进行初始化:

        blockSize = block.Length;//此次长度为3childSize = (blockSize - 1) * 0.5f;blockMatrix = new bool[blockSize,blockSize];//建立对应元素的bool数组,来进行是否绘制myBlock的判断for (int y = 0; y < blockSize;y++ ){for (int x = 0; x < blockSize;x++ ){if (block[y][x]=='1')//如果element中字符为'1',则clone一个myCube,实质性的绘制{blockMatrix[y,x] = true;                    //每个cube相对与父结点的位置,即在本地坐标系下进行cube的绘制var cube = (Transform)Instantiate(Manager.manager.oneCube, new Vector3(x - childSize, childSize - y, 0), Quaternion.identity);cube.parent = transform;//绑定到父结点上去}}}mYPosition = Manager.manager.GetFieldHeight() - 1;        //初始化block的位置,和左上角的位置mYPosition mXPosition;transform.position = new Vector3(Manager.manager.GetFieldWidth() / 2 + (blockSize % 2 == 0 ? 0.5f : 0), mYPosition - childSize, 0);mXPosition = (int)(transform.position.x - childSize);//如下图,代表了在整个场景中,一个动态的Block在下落时的坐标

图4-2

    public void SetBlock(bool[,] blockMatrix, int posX, int posY)//在静止区域绘制相应的block
    {int size = blockMatrix.GetLength(0);//  判断下降时,静止,那么则进行静止绘制: for (int y = 0; y < size;y++ )//{for (int x = 0; x < size;x++ ){if (true==blockMatrix[y,x]){Instantiate(oneCube, new Vector3(posX+x, posY-y, 0), Quaternion.identity);//绘制此次静止的blockfieldsJudge[posX + x, posY - y] = true;}}}//此block静止之后: 1.检测行是否满足消去? 2.生成新的动态block...StartCoroutine(CheckRows(posY-size,size));}

 Instantiate(oneCube, new Vector3(posX+x, posY-y, 0), Quaternion.identity);其中:
Vector3(posX+x, posY-y, 0)可有4-2可知,每个Cube的绘制都需要对应自己的坐标,这次坐标为世界坐标系下的。

5.俄罗斯方块的整体流程

1.在Manger.cs里随机初始化一个block,CreateBlock(int random)

2.对这个block,根据string的'1',进行myBlock实例化,并设定这个block的transform,

3.下降...判断是否静止?...是的,则绘制静态的block,并Create新的动态block,删除先前的动态block

4.重复以上过程...

其中不好理解的是:代码中本地坐标系和子结点的关系、每个block的位置信息

下一章记录本次使用的Unity语法。

转载于:https://www.cnblogs.com/dust-fly/p/4418923.html

Unity3D入门 俄罗斯方块总结(一)相关推荐

  1. Unity3D 入门 游戏开发 Unity3D portal game development

    Unity3D 入门 游戏开发 Unity3D portal game development 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com ...

  2. Unity3D入门其实很简单

    在上次发布拙作后,有不少童鞋询问本人如何学习Unity3D.本人自知作为一名刚入门的菜鸟,实在没有资格谈论这么高大上的话题,生怕误导了各位.不过思来想去,决定还是写一些自己的经验,如果能给想要入门U3 ...

  3. Unity3D入门(八):物理组件之刚体与碰撞体

    Unity3D入门(八):物理组件之刚体与碰撞体 准备工作 物理组件之刚体 刚体组件简介 使用刚体移动物体 遇到的问题 物理组件之碰撞体 碰撞体简介 碰撞体种类 Box Collider Sphere ...

  4. Unity3D入门Demo-Cube移动-触发球体-切换场景

    Unity3D入门Demo-Cube移动-触发球体-切换场景 新建Unity3D项目--选择3D类型 编写场景切换脚本ChangeScenes 添加场景切换脚本到游戏物体并保存Menu场景 新建Gam ...

  5. [转]【Unity3D入门教程】Unity3D简介、安装和程序发布

    <Unity3D入门教程>会带领零基础的初学者,一步步学会使用Unity3D来开发简单的应用程序,走近游戏开发的世界.本系列教程虽然不会面面俱到地深入到全部的知识点,但是会涉及到所有入门阶 ...

  6. Unity3D 入门:安装 Unity3D 并配置与 Visual Studio 的协作开发环境

    实际上本文不看也罢,因为整个过程除了网速之外基本没啥坑.不过装完可能有一些配置,所以如果不知道的话可以参考本文. @TOC 安装 我们共需要安装两款应用: Visual Studio 2019 及 U ...

  7. Unity3D入门-坦克大战

    Unity3D入门-坦克大战 文章目录 Unity3D入门-坦克大战 1.基础 2.功能介绍 3.部分代码 4.展示 5.打包发布 6.未处理问题 1.基础 概念1:预制体PreFab 将一个Game ...

  8. 【Unity3D入门教程】Unity3D开发实战之五子棋

    前言 经过前面<Unity3D入门教程>系列讲解,再加上我们自己的探索,相信大家已经掌握了Unity3D的相关知识和基本方法.本文将使用前面学到的知识,开发一款简单的五子棋程序.本文用到的 ...

  9. Unity3D入门 第陆章: 贴两个材质玩玩

    在这章里,我们简单的学习一下如何给cube贴图. 效果是这样 首先 我们搭建如下场景:放两个cube,加一个点光源,为了把cube照亮.调整一下摄像机,光源和cube的位置角度. 接着,我们导两张贴图 ...

最新文章

  1. 将redis作为windows服务安装
  2. Ruby on Rails 的检验方法(Validation Helpers)大全
  3. 【Codeforces】 Round #374 (Div. 2)
  4. java动态菜单显示实现,java – 为Spring MVC / AOP应用程序实现动态菜单
  5. Hadoop----hdfs的基本操作
  6. 1.数据库基本概念知识
  7. linux tcb,在Linux中从潜藏密码迁移至tcb怎么做?
  8. webpack的简介---webpack工作笔记001
  9. 基于matlab的信号与系统课程设计,信号与系统课程设计基于 MATLAB 完成信号与系统综合设计实验...
  10. dlna 斐讯r1怎么用_DLNA加持,斐讯R1说学逗唱样样行
  11. python微信聊天机器人_Python快速搭建会学习的微信聊天机器人
  12. html5 mp4在线播放器,HTML5 Web播放器-Video.js
  13. php统计页面访问量_PHP 统计 网页 总访问次数 附代码
  14. CentOS 基础知识与命令总结
  15. matlab画条状图,使用Matlab画条形图
  16. window location href is not a function错误解决
  17. 两边同时取对数求复合函数_【函数与导数】复合函数求导的几个妙用
  18. 给大家分享一下指纹挂锁的方案
  19. 抖音上热门?这几个一定要记住
  20. C#窗口程序 UI模板【简约风、去边框】

热门文章

  1. 高德地图 天气预报查询
  2. Flutter自定义圆形选择框
  3. layui前端框架的基本使用方法
  4. 3行代码5秒抠图的AI神器,PS什么的靠边了
  5. Excel表中右键菜单显示不正常的处理方法
  6. chkdsk命令(Chkdsk命令磁盘空间不足)
  7. C语言程序设计--体测成绩信息管理系统
  8. 因果图-交通一卡通自动充值软件系统-实例分析
  9. SpringMVC+Vue项目停车场管理系统
  10. 屏幕测试图片全屏_全屏视频测试