Unity3D入门 俄罗斯方块总结(一)
主要参考: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入门 俄罗斯方块总结(一)相关推荐
- Unity3D 入门 游戏开发 Unity3D portal game development
Unity3D 入门 游戏开发 Unity3D portal game development 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com ...
- Unity3D入门其实很简单
在上次发布拙作后,有不少童鞋询问本人如何学习Unity3D.本人自知作为一名刚入门的菜鸟,实在没有资格谈论这么高大上的话题,生怕误导了各位.不过思来想去,决定还是写一些自己的经验,如果能给想要入门U3 ...
- Unity3D入门(八):物理组件之刚体与碰撞体
Unity3D入门(八):物理组件之刚体与碰撞体 准备工作 物理组件之刚体 刚体组件简介 使用刚体移动物体 遇到的问题 物理组件之碰撞体 碰撞体简介 碰撞体种类 Box Collider Sphere ...
- Unity3D入门Demo-Cube移动-触发球体-切换场景
Unity3D入门Demo-Cube移动-触发球体-切换场景 新建Unity3D项目--选择3D类型 编写场景切换脚本ChangeScenes 添加场景切换脚本到游戏物体并保存Menu场景 新建Gam ...
- [转]【Unity3D入门教程】Unity3D简介、安装和程序发布
<Unity3D入门教程>会带领零基础的初学者,一步步学会使用Unity3D来开发简单的应用程序,走近游戏开发的世界.本系列教程虽然不会面面俱到地深入到全部的知识点,但是会涉及到所有入门阶 ...
- Unity3D 入门:安装 Unity3D 并配置与 Visual Studio 的协作开发环境
实际上本文不看也罢,因为整个过程除了网速之外基本没啥坑.不过装完可能有一些配置,所以如果不知道的话可以参考本文. @TOC 安装 我们共需要安装两款应用: Visual Studio 2019 及 U ...
- Unity3D入门-坦克大战
Unity3D入门-坦克大战 文章目录 Unity3D入门-坦克大战 1.基础 2.功能介绍 3.部分代码 4.展示 5.打包发布 6.未处理问题 1.基础 概念1:预制体PreFab 将一个Game ...
- 【Unity3D入门教程】Unity3D开发实战之五子棋
前言 经过前面<Unity3D入门教程>系列讲解,再加上我们自己的探索,相信大家已经掌握了Unity3D的相关知识和基本方法.本文将使用前面学到的知识,开发一款简单的五子棋程序.本文用到的 ...
- Unity3D入门 第陆章: 贴两个材质玩玩
在这章里,我们简单的学习一下如何给cube贴图. 效果是这样 首先 我们搭建如下场景:放两个cube,加一个点光源,为了把cube照亮.调整一下摄像机,光源和cube的位置角度. 接着,我们导两张贴图 ...
最新文章
- 将redis作为windows服务安装
- Ruby on Rails 的检验方法(Validation Helpers)大全
- 【Codeforces】 Round #374 (Div. 2)
- java动态菜单显示实现,java – 为Spring MVC / AOP应用程序实现动态菜单
- Hadoop----hdfs的基本操作
- 1.数据库基本概念知识
- linux tcb,在Linux中从潜藏密码迁移至tcb怎么做?
- webpack的简介---webpack工作笔记001
- 基于matlab的信号与系统课程设计,信号与系统课程设计基于 MATLAB 完成信号与系统综合设计实验...
- dlna 斐讯r1怎么用_DLNA加持,斐讯R1说学逗唱样样行
- python微信聊天机器人_Python快速搭建会学习的微信聊天机器人
- html5 mp4在线播放器,HTML5 Web播放器-Video.js
- php统计页面访问量_PHP 统计 网页 总访问次数 附代码
- CentOS 基础知识与命令总结
- matlab画条状图,使用Matlab画条形图
- window location href is not a function错误解决
- 两边同时取对数求复合函数_【函数与导数】复合函数求导的几个妙用
- 给大家分享一下指纹挂锁的方案
- 抖音上热门?这几个一定要记住
- C#窗口程序 UI模板【简约风、去边框】