UNITY 开发日记/教程 俄罗斯方块 (三) 搭建场景UI
来源:互联网 发布:做seo工资一般多少 编辑:程序博客网 时间:2024/05/21 22:22
接上文.
我们已经可以生成随机的方块了,下面我们重新来看一下最初我们考虑的游戏流程:
系统随机产生方块 → 方块下落 同时玩家操作移动/旋转 → 方块落地,若某行被填满则消除,若超出上限则GAMEOVER
此处,系统随机产生方块部分已经完成,下面我们需要开始做方块下落,以及玩家操作的部分.但是在实现方块下落之前,我们应该意识到
首先需要一个让"方块下落"的"场景",或者说Game World,进行游戏的空间位置场景,无论你怎么称呼都可以.
原来的BlockBuild直接用于生成"下一个"玩家操控\下落的方块,我们的第一个方块也要由其产生,所以不用调整具体参数,只要给他一个背景PANEL,加一个说明文字text就可以了.
然后再建立一个空物体,给他一个背景,一个用于开始测试的按钮,结构如上图所示.
然后写控制游戏流程的代码,点击按钮时,开始游戏,令BlockBuilder产生一个随机方块,并将随机方块置于GameArea的指定初始位置.然后再生成一个随机方块于BlockBuild中显示,
在当前方块落地后,使用该方块继续游戏.
using System.Collections;using System.Collections.Generic;using UnityEngine;public class dmGameArea : MonoBehaviour { public dmBlockBuilder blockBuilder; public Vector2 areaSize; public Vector2 initPos; RectTransform myRectTransform { get { return GetComponent<RectTransform>(); } } dmBlock nowControlBlock;// Use this for initializationvoid Start () { myRectTransform.sizeDelta = new Vector2(areaSize.x * blockBuilder.squareSize.x, areaSize.y * blockBuilder.squareSize.y); }// Update is called once per framevoid Update () {} public void StartGame() { if (nowControlBlock != null) { blockBuilder.DestroySquares(nowControlBlock); } blockBuilder.BuildRandomBlock(); NextBlock(); } public void NextBlock() { PutInBlock(blockBuilder.nowBlock); blockBuilder.BuildRandomBlock(); } public void PutInBlock(dmBlock block) { nowControlBlock = block; blockBuilder.nowBlock = null; foreach(GameObject square in block.squareList) { square.transform.SetParent(transform); } MoveBlockTo(block,initPos); } public void MoveBlockTo(dmBlock onMoveBlock,Vector2 targetPos) { for(int i = 0; i < onMoveBlock.bindBase.squareCoordList.Count; i++) { Vector2 squareCoord = targetPos + onMoveBlock.bindBase.squareCoordList[i]; onMoveBlock.squareList[i].transform.localPosition = AreaPos2Local(squareCoord); onMoveBlock.squareList[i].SetActive(squareCoord.y >= 0); } } public Vector2 AreaPos2Local(Vector2 areaPos) { return new Vector2((areaPos.x + 0.5f) * blockBuilder.squareSize.x, - (0.5f + areaPos.y) * blockBuilder.squareSize.y); }}
在GameArea 中,我建立了一个x向右为正,y向下为正,一个正方形为单位的坐标系,因为此坐标系与Unity中的Scene坐标系不同,所以编写了AreaPos2Local函数来进行转换.
配置参数如下
Play运行调试,点击按钮,可以看到功能已经成功实现.
目录
(一) 定义方块
(二) 搭建方块UI和生成方块.
(三) 搭建场地UI和游戏流程控制
(四) 方块下落和落地判定
(五) 方块平移和旋转
(六) 方块消除
阅读全文
0 0
- UNITY 开发日记/教程 俄罗斯方块 (三) 搭建场景UI
- Unity 开发日记/教程 俄罗斯方块 (二) 搭建方块UI和生成方块.
- UNITY 开发日记/教程 俄罗斯方块 序
- Unity 开发日记/教程 俄罗斯方块 (一) 定义方块
- UNITY 开发日记/教程 俄罗斯方块 (五) 方块平移和旋转
- UNITY 开发日记/教程 俄罗斯方块 (四) 方块下落和落地判定
- UNITY 开发日记/教程 俄罗斯方块 (六) 消除与堆积正方形的下落
- Unity开发UI框架搭建
- 用Unity开发OculusRift体验演示教程(一)——搭建简单场景并使用Oculus提供的SDK包
- UI引擎开发系列(三) 场景视图控制
- Unity简单UI框架搭建
- U3D 场景快速搭建教程
- Unity UI(三):Canvas
- Kendo UI开发教程(25): 单页面应用(三) View
- Kendo UI开发教程(25): 单页面应用(三) View
- Unity 2D游戏开发教程之为游戏场景添加多个地面
- Unity开发环境搭建
- Unity Hololens开发教程
- 关于单元测试和集成测试的新的理解
- CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chrome、Opera
- Dubbo-Admin管理平台和Zookeeper注册中心的搭建
- Hadoop之Avro mapreduce最高气温程序
- Canvas与SVG的区别
- UNITY 开发日记/教程 俄罗斯方块 (三) 搭建场景UI
- 织梦模板:响应式手机电子配件类网站织梦模板
- Lua学习---编译生成lua和luac
- tomcat,javax.management.MalformedObjectNameException: Invalid character ':' in value part of propert
- logistic regression VS decision tree VS support vector machine
- adb常用指令
- 1.4Android 学习+进度之四-socket发送object
- 后端接口编写流程
- 转载 为什么我们应该学好英语