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