using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlatFromSpawner : MonoBehaviour
{
/// <summary>
/// 初始位置
/// </summary>
public Vector3 startSpawnPos;
/// <summary>
/// 生成平台数量
/// </summary>
private int spawnPlatformCount;
/// <summary>
/// 管理器容器
/// </summary>
private ManagerVars vars;
/// <summary>
/// 平台生成位置
/// </summary>
private Vector3 platformSpawinPosition;
/// <summary>
/// 是否向左生成
/// </summary>
private bool isLeftSpawn = false;
private void Start()
{
platformSpawinPosition = startSpawnPos;
vars = ManagerVars.GetManagerVars();
for (int i = 0; i < 5; i++)
{
spawnPlatformCount = 5;
DecidePath();
}
}
/// <summary>
/// 确定路径
/// </summary>
private void DecidePath()
{
if (spawnPlatformCount>=0)
{
spawnPlatformCount--;
SpawnPlatform();
}
else
{
isLeftSpawn = !isLeftSpawn;//转向
spawnPlatformCount = Random.Range(1, 4);
SpawnPlatform();
}
}
/// <summary>
/// 生成平台
/// </summary>
private void SpawnPlatform()
{
GameObject go= Instantiate(vars.normalPlarform, transform);//生成一个实例化平台
go.transform.position = platformSpawinPosition;
if (isLeftSpawn)//向左生成
{
platformSpawinPosition = new Vector3(platformSpawinPosition.x - vars.nextXPos, platformSpawinPosition.y + vars.nexYPos, 0);
}
else
{
platformSpawinPosition = new Vector3(platformSpawinPosition.x + vars.nextXPos, platformSpawinPosition.y + vars.nexYPos, 0);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//[CreateAssetMenu (menuName ="CreatMaagerVarsContainer")]
public class ManagerVars : ScriptableObject
{
public static ManagerVars GetManagerVars()
{
return Resources.Load<ManagerVars>("Manager Vars");
}
public List<Sprite> bgThemeSpriteList = new List<Sprite>();//背景
public GameObject normalPlarform;//平台预制体
public float nextXPos = 0.554f, nexYPos = 0.645f;//差值
}
1.平台预制体制作
给平台添加单独的图层
2.给平台初始生成位置
在管理器容器定义变量平台移动的差值nesxXPos,和nextYPos。
public float nextXPos = 0.554f, nexYPos = 0.645f;(往右边生成加,左边就减x,加y)
- 添加平台生成类(PlatFromSpawner)
- 添加一个空物体(PlatFromSpawner)将脚本挂载上去
- 定义一个平台初始位置
public Vector3 startSpawnPos
4.2修改Y值
- for循环每次生成五个
for (int i = 0; i < 5; i++)
{
}
- 添加一个确定路径的方法
- 定义生成平台的数量(spawnPlatformCount)
private int spawnPlatformCount;
- 在for循环中定义平台生成的数量为5
在确定一下路径
for (int i = 0; i < 5; i++)
{
spawnPlatformCount = 5;
DecidePath();
}
- 在确定路径的方法DecidePath()中判断生成的数量是否大于0
大于零就每次减一
if (spawnPlatformCount>=0)
{
spawnPlatformCount--;
}
如果小于零就是,生成完了,就需要重新生成
那我们就随机生成一到四个
else
{
spawnPlatformCount = Random.Range(1, 4);
}
- 添加一个生成平台的方法
- 在确定路径中调用生成平台的方法
private void DecidePath()
{
if (spawnPlatformCount>=0)
{
spawnPlatformCount--;
SpawnPlatform();
}
else
{
SpawnPlatformCount = Random.Range(1, 4);
SpawnPlatform();
}
}
- 在容器管理器中定义平台预制体
public GameObject normalPlarform;
- 定义一个容器管理器类型的变量。
private ManagerVars vars;
- 在开始方法中进行赋值
platformSpawinPosition = startSpawnPos;
- 在生成平台中实例化平台预制体
GameObject go= Instantiate(vars.normalPlarform, transform);
- 定义一个平台生成位置的变量
private Vector3 platformSpawinPosition;
该变量在开始的时候就等于变量startSpawnPos;默认的位置就是我们初始的位置
platformSpawinPosition = startSpawnPos;
- 定义一个bool类型的变量来判断平台生成的位置
private bool isLeftSpawn = false;//是否向左
- 在DecidePath()确定路径的时候平台数量小于零时进行转向
isLeftSpawn = !isLeftSpawn;//转向(这次向左下次向右,反之一样的操作)
- 在生成平台判断平台生成方向
if (isLeftSpawn)//向左生成
{
platformSpawinPosition = new Vector3(platformSpawinPosition.x - vars.nextXPos, platformSpawinPosition.y + vars.nexYPos, 0);//(往右边生成加,左边就减x,加y)我们有提到过的
}
else//向右生成
{
platformSpawinPosition = new Vector3(platformSpawinPosition.x + vars.nextXPos, platformSpawinPosition.y + vars.nexYPos, 0);
}