【Unity】简易俄罗斯方块(Tetris)制作
原视频:https://www.youtube.com/watch?v=T5P8ohdxDjo
b站转载:【UNITY】13分钟制作出俄罗斯方块!(附下载)_哔哩哔哩_bilibili
一、背景及方块制作关键点
1、要将背景的左下角移到坐标(0,0)点
2、方块的旋转点设置
3、方块坐标需要在整数值
二、脚本
1、TetrisBlock
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;public class TetrisBlock : MonoBehaviour
{public Vector3 rotationPoint;//方块旋转的坐标点private float previousTime;public float fallTime = 0.8f;//下落时间public static int height = 20;//界面高度public static int width = 10;//界面宽度private static Text points;//分数(消除行数)private static int lines = 0;public static Transform[,] grid = new Transform[width, height];//界面网格// Start is called before the first frame updatevoid Start(){points = GameObject.Find("Points").GetComponent<Text>();}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.LeftArrow))//键盘左键{transform.position += new Vector3(-1, 0, 0);//向左移动一格if (!validMove())//判断是否超出界面,超出就反向移动一下抵消transform.position -= new Vector3(-1, 0, 0);}else if (Input.GetKeyDown(KeyCode.RightArrow)){transform.position += new Vector3(1, 0, 0);if (!validMove())transform.position -= new Vector3(1, 0, 0);}else if (Input.GetKeyDown(KeyCode.UpArrow)){transform.RotateAround(transform.TransformPoint(rotationPoint), new Vector3(0, 0, 1), 90);//旋转点、旋转轴、旋转度数if (!validMove())transform.RotateAround(transform.TransformPoint(rotationPoint), new Vector3(0, 0, 1), -90);}if (Time.time - previousTime > (Input.GetKey(KeyCode.DownArrow) ? fallTime/10 : fallTime))//如果按下向下,下落时间改为0.08{transform.position += new Vector3(0, -1, 0);if (!validMove()){transform.position -= new Vector3(0, -1, 0);addToGrid();//不再下落后将对应数据存入网格中checkLines();//检查是否有连成一行this.enabled = false;FindObjectOfType<SpawnTetromino>().newTetromino();//生成下一个方块}previousTime = Time.time;}if (Input.GetKey(KeyCode.Escape)){Application.Quit();}if (Input.GetKey(KeyCode.Space)){if (Time.timeScale != 0)Time.timeScale = 0;else if (Time.timeScale == 0)Time.timeScale = 1;}}void checkLines(){for(int i = height - 1; i >= 0; i--)//对每一行进行扫描{if (hasLine(i)){deleteLine(i);rowDown(i);//将该行上方的所有方块向下移动一格lines++;points.text = "Points:" + lines;}}}bool hasLine(int i){for (int j = 0; j < width; j++)//对每一行中的每一个格子进行扫描{if (grid[j,i] == null)//只要有一个格子为空就返回false{return false;}}return true;}void deleteLine(int i){for (int j = 0; j < width; j++){Destroy(grid[j, i].gameObject);grid[j, i] = null;}}void rowDown(int i){for (int y = i; y < height; y++)//选择从第i行往上的所有行{for (int j = 0; j < width; j++){if (grid[j, y] != null)//只要方格不为空{grid[j, y - 1] = grid[j, y];//就将方块复制到下一行grid[j, y] = null;//同时清除原本方格中的方块grid[j, y - 1].transform.position -= new Vector3(0, 1, 0);}}}}void addToGrid(){foreach (Transform children in transform){int roundedX = Mathf.RoundToInt(children.transform.position.x);int roundedY = Mathf.RoundToInt(children.transform.position.y);grid[roundedX, roundedY] = children;}}bool validMove(){foreach(Transform children in transform){int roundedX = Mathf.RoundToInt(children.transform.position.x);int roundedY = Mathf.RoundToInt(children.transform.position.y);if(roundedX < 0 || roundedX >= width || roundedY < 0 || roundedY >= height){return false;}if (grid[roundedX, roundedY] != null)return false;}return true;}
}
(1)Rotate和RotateAround(围绕旋转):目标点、旋转轴、角度
RotateAround(Vector3 point, Vector3 axis, float angle);
(2) TransformPoint:将相对 “当前游戏对象” 的坐标转化为基于世界坐标系的坐标
(3)RoundToInt:四舍五入最接近的整数
2、SpawnTetromino
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;public class SpawnTetromino : MonoBehaviour
{public GameObject[] Tetrominoes;// Start is called before the first frame updatevoid Start(){newTetromino();}public void newTetromino(){Instantiate(Tetrominoes[Random.Range(0, Tetrominoes.Length)], transform.position, Quaternion.identity);//Quaternion.identity就是指Quaternion(0,0,0,0),}
}
【Unity】简易俄罗斯方块(Tetris)制作相关推荐
- unity简易的摄像机小地图制作
记录一下fps游戏的简易的小地图制作过程,先放一下效果图 如图我们需要在地图上显示敌人和玩家的特殊图标,但是摄像机识别Culling Mask的是layer层,所以通过设置这个层的id来让主摄像机不显 ...
- 俄罗斯方块 Tetris
今天,为大家带来一个用Qt C++ (Windows环境下)做的一个简易俄罗斯方块小游戏 思路和模块介绍都在注释里面,其次就是一些项目中遇到的问题以及解决方案,在后面部分说明. 一.效果 测试图样 Q ...
- java 俄罗斯方块简易_Java实现简易俄罗斯方块
本文实例为大家分享了Java实现简易俄罗斯方块的具体代码,供大家参考,具体内容如下 一.将对象抽象为类 首先考虑俄罗斯方块游戏中含有哪些具体的对象,对象中含有哪些具体属性和方法,然后用代码来实现. 建 ...
- Cinemachine教程 | Unity中如何快速制作镜头晃动?
摘要:经常在游戏.影视中会看到镜头晃动的镜头,比如枪的后坐力.爆炸.碰撞.巨人踩踏地面等等,镜头晃动如何快速制作呢? 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周 ...
- Cinemachine教程 | Unity中如何快速制作相机切换动画?
摘要:使用Cinemachine可以快速制作相机切换动画,来看看我是怎么做的吧. 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦. 好久不见.我最近 ...
- 如何制作linux系统硬盘,手把手带你自制Linux系统之二 简易Linux的制作
手把手带你自制Linux系统之二 简易Linux的制作 本文利用CentOS5.5自带内核制作一个可以正常启动的Mini Linux. 打开上一篇准备工作中创建的CentOS虚拟机,为另一台虚拟机Mi ...
- 俄罗斯方块Tetris(C基础,Linux终端)
文章目录 俄罗斯方块Tetris(C基础,Linux终端) 前言 游戏说明 游戏效果展示 游戏程序实现步骤 一.准备工作 1.非阻塞型输入 2.在屏幕上打印一个方块 二.头文件.宏定义.全局变量.声明 ...
- 【Unity】 结合DoTween制作抛物线效果
[Unity] 结合DoTween制作抛物线效果 概要 public partial class EMath {public static Vector3 Parabola(Vector3 start ...
- 基于51单片机的简易减法器设计制作
基于C51单片机的简易减法器设计制作 51单片机可实现很多功能,今天笔者介绍一种使用C51编写程序,通过4*4矩阵键盘和8位共阴数码管实现的简易减法器.矩阵键盘以及数码管的原理图如下: (1)4*4矩 ...
最新文章
- boost::shared_lock相关的测试程序
- 五、Web App 基础可视组件属性(IVX 快速开发教程)
- Intellij Idea的使用之svn篇
- java中如果需要返回多个值怎么办
- 云端之战:Google Cloud 的多云战略和甲骨文的数据库云
- python字符串编码判断
- 通过 Kubeflow 实例瞄准 Kubernetes 集群的密币挖掘攻击
- 做B/S的朋友注意了。。。(又一先进的武器出现了)
- java图书馆_java入门第三季--图书馆借书系统
- 你们要的最小样本量计算来了。
- 网络安装CentOS 7
- 关于python使用hadoop(使用python操作hdfs)
- 【Filecoin周报-62】倒计时1天,太空竞赛准备怎么样了?
- rtsp播放h265(hevc)
- yolov4评估自己的模型
- mel表达式_表达式和 MEL 语法之间的区别
- 汽车汽配行业供应链协同管理平台一体化管理,SCM供应链提升企业竞争力
- 关于java项目与web项目中lib包的那点事
- 财务比率:ROE, 净利润增长率、毛利率、市盈率、PEG
- 清除网页缓存HTML方法