手把手教你Unity开发俄罗斯方块

第九节 创建像素点阵列 上

2019-06-19  本文已影响0人  安静的程序员
01.分析需要哪些成员

主屏幕是由像素点阵列组成,那就需要引用一个像素点对象,上一节已经制作了一个像素点预制体,本节就需要用到这个预制体。
还需要一个像素点数组来保存像素点阵列中每个像素点的引用,否则我就无法控制像素点的显示或隐藏了。
屏幕基本属性:宽度、高度、横坐标、纵坐标、像素点大小、像素点间距。
根据以上分析,需要以下这些成员:

02.编辑代码,添加成员

添加成员之前,先删除默认添加的Start()方法和Update()方法,因为我的设计思路是通过导演对象驱动,所以初始化工作就交给导演对象来调用了。
删除默认的方法之后,添加一个Init()方法以供导演对象调用。

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScreenMain : MonoBehaviour
{
    public GameObject Pixel;    // 像素点对象
    GameObject[,] _screen;      // 像素点数组

    int _ScreenWidth = 10;      // 屏幕宽度
    int _ScreenHeight = 20;     // 屏幕高度
    int _ScreenPoint_x = 16;    // 屏幕横坐标
    int _ScreenPoint_y = 16;    // 屏幕纵坐标
    int _PixelSize = 14;        // 像素点大小
    int _PixelInterval = 1;     // 像素点间距

    // 初始化
    public void Init()
    {

    }
}
03.分析创建像素点阵列流程

首先,有一点要明确:屏幕的宽度和高度是表示屏幕的宽和高有多少个格子,不是指屏幕真正的像素值。
然后创建像素阵列的话就是遍历宽度和高度,根据屏幕坐标、像素点大小和间距计算出每个像素点真正的坐标值,然后使用预制体在刚刚计算出的坐标处实例化一个像素点,然后再将该对象绑定至像素点数组中对应的对象上。
原点定在左下角,然后外层遍历行,内层遍历列。

04.编辑代码
// 初始化
public void Init()
{
    // 遍历行
    for (int line = 0; line < _ScreenHeight; line++)
    {
        // 遍历列
        for (int list = 0; list < _ScreenWidth; list++)
        {
            // 计算坐标
            int x = _ScreenPoint_x + list * (_PixelSize + _PixelInterval);
            int y = _ScreenPoint_y + line * (_PixelSize + _PixelInterval);
            Vector3 point = new Vector3(x, y, 0);
            // 实例化像素点
            GameObject pixel = Instantiate(Pixel, point, Quaterni-on.identity) as GameObject;
        }
    }
}

以上代码仅仅是实例化像素点阵列,还没有与像素点数组绑定,但是,我们先实现实例化像素点阵列。

目前,这段代码还无法运行,因为缺少驱动。要想成功驱动,还需要进行一些必要的绑定:

下一节,我们来完成这些绑定,以及完成初始化像素点阵列剩余的工作。

代码下载:https://pan.baidu.com/s/1PmqUz3QLTWuEmP2V_HApww
提取码:u58n

上一篇 下一篇

猜你喜欢

热点阅读