本篇主要介绍游戏中白天草地场景的地形网格的设置,从而为后续种植植物做下基础。
首先要创建一个网格管理器,进行相应数据调节后编写代码进行网格的设置。
主要逻辑为基于grid脚本的形式创建网格,进行对效果的观察设置偏移量数值,这样的话可以防止在一个网格上种植了植物之后没有对其内容的保存以使还能够在这个网格上种植其他植物。使用for循环依次为地图上增加网格。
private void CreatGridsBaseGird()
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 5; j++)
{
GirdList.Add(new Grid(new Vector2(i,j), transform.position + new Vector3(1.33f * i, 1.63f * j, 0),false));
}
}
}
因此创建grid脚本,记录网格的信息,记录坐标点、世界坐标、某个网格上是否有植物、当前植物的种类等信息。
之后在网格管理器脚本中在编写代码对网格坐标点的获取可以通过鼠标获取以及通过世界坐标获取
public Vector2 GetGridPointByMouse()
{
return GetGridPointByWorldPos(Camera.main.ScreenToWorldPoint(Input.mousePosition));
}
public Vector2 GetGridPointByWorldPos(Vector2 wordlPos)
{
return GetGridByWorldPos(wordlPos).Position;
}
public Grid GetGridByWorldPos(Vector2 wordlPos)
{
float dis = 1000000;
Grid grid = null;
for (int i = 0; i < GirdList.Count; i++)
{
if (Vector2.Distance(wordlPos, GirdList[i].Position) < dis)
{
dis = Vector2.Distance(wordlPos, GirdList[i].Position);
grid = GirdList[i];
}
}
return grid;
}
public Grid GetGridByMouse()
{
return GetGridByWorldPos(Camera.main.ScreenToWorldPoint(Input.mousePosition));
}
经过以上的脚本就可以实现在网格中种植植物的功能。