原视频: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)制作相关推荐

  1. unity简易的摄像机小地图制作

    记录一下fps游戏的简易的小地图制作过程,先放一下效果图 如图我们需要在地图上显示敌人和玩家的特殊图标,但是摄像机识别Culling Mask的是layer层,所以通过设置这个层的id来让主摄像机不显 ...

  2. 俄罗斯方块 Tetris

    今天,为大家带来一个用Qt C++ (Windows环境下)做的一个简易俄罗斯方块小游戏 思路和模块介绍都在注释里面,其次就是一些项目中遇到的问题以及解决方案,在后面部分说明. 一.效果 测试图样 Q ...

  3. java 俄罗斯方块简易_Java实现简易俄罗斯方块

    本文实例为大家分享了Java实现简易俄罗斯方块的具体代码,供大家参考,具体内容如下 一.将对象抽象为类 首先考虑俄罗斯方块游戏中含有哪些具体的对象,对象中含有哪些具体属性和方法,然后用代码来实现. 建 ...

  4. Cinemachine教程 | Unity中如何快速制作镜头晃动?

    摘要:经常在游戏.影视中会看到镜头晃动的镜头,比如枪的后坐力.爆炸.碰撞.巨人踩踏地面等等,镜头晃动如何快速制作呢? 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周 ...

  5. Cinemachine教程 | Unity中如何快速制作相机切换动画?

    摘要:使用Cinemachine可以快速制作相机切换动画,来看看我是怎么做的吧. 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦. 好久不见.我最近 ...

  6. 如何制作linux系统硬盘,手把手带你自制Linux系统之二 简易Linux的制作

    手把手带你自制Linux系统之二 简易Linux的制作 本文利用CentOS5.5自带内核制作一个可以正常启动的Mini Linux. 打开上一篇准备工作中创建的CentOS虚拟机,为另一台虚拟机Mi ...

  7. 俄罗斯方块Tetris(C基础,Linux终端)

    文章目录 俄罗斯方块Tetris(C基础,Linux终端) 前言 游戏说明 游戏效果展示 游戏程序实现步骤 一.准备工作 1.非阻塞型输入 2.在屏幕上打印一个方块 二.头文件.宏定义.全局变量.声明 ...

  8. 【Unity】 结合DoTween制作抛物线效果

    [Unity] 结合DoTween制作抛物线效果 概要 public partial class EMath {public static Vector3 Parabola(Vector3 start ...

  9. 基于51单片机的简易减法器设计制作

    基于C51单片机的简易减法器设计制作 51单片机可实现很多功能,今天笔者介绍一种使用C51编写程序,通过4*4矩阵键盘和8位共阴数码管实现的简易减法器.矩阵键盘以及数码管的原理图如下: (1)4*4矩 ...

最新文章

  1. boost::shared_lock相关的测试程序
  2. 五、Web App 基础可视组件属性(IVX 快速开发教程)
  3. Intellij Idea的使用之svn篇
  4. java中如果需要返回多个值怎么办
  5. 云端之战:Google Cloud 的多云战略和甲骨文的数据库云
  6. python字符串编码判断
  7. 通过 Kubeflow 实例瞄准 Kubernetes 集群的密币挖掘攻击
  8. 做B/S的朋友注意了。。。(又一先进的武器出现了)
  9. java图书馆_java入门第三季--图书馆借书系统
  10. 你们要的最小样本量计算来了。
  11. 网络安装CentOS 7
  12. 关于python使用hadoop(使用python操作hdfs)
  13. 【Filecoin周报-62】倒计时1天,太空竞赛准备怎么样了?
  14. rtsp播放h265(hevc)
  15. yolov4评估自己的模型
  16. mel表达式_表达式和 MEL 语法之间的区别
  17. 汽车汽配行业供应链协同管理平台一体化管理,SCM供应链提升企业竞争力
  18. 关于java项目与web项目中lib包的那点事
  19. 财务比率:ROE, 净利润增长率、毛利率、市盈率、PEG
  20. 清除网页缓存HTML方法

热门文章

  1. 使用谷歌云搭建node服务器
  2. 分布式- BFT拜占庭容错
  3. 企业移动内容管理(MCM)
  4. 使用Qt Designer制作应用(Creating applications with Qt Application))
  5. C# Stopwatch详解
  6. 2D平面上的二连杆机器臂反向运动模拟(matlab代码示例)
  7. 大咖面对面 | 范维:从潮玩到NFT
  8. 谷歌浏览器导出所有收藏书签
  9. TensorFlow 制作自己的TFRecord数据集
  10. oracle监听器配置详解,Oracle 监听配置详解