Uinty幻径-平台制作

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

  1. 添加平台生成类(PlatFromSpawner)
  2. 添加一个空物体(PlatFromSpawner)将脚本挂载上去
    1.  定义一个平台初始位置

public Vector3 startSpawnPos

4.2修改Y值

  1. for循环每次生成五个

for (int i = 0; i < 5; i++)

{

}

  1. 添加一个确定路径的方法
  2. 定义生成平台的数量(spawnPlatformCount

private int spawnPlatformCount;

  1. 在for循环中定义平台生成的数量为5

在确定一下路径

for (int i = 0; i < 5; i++)

        {

            spawnPlatformCount = 5;

            DecidePath();

        }

  1. 在确定路径的方法DecidePath()中判断生成的数量是否大于0

大于零就每次减一

if (spawnPlatformCount>=0)

        {

            spawnPlatformCount--;

        }

如果小于零就是,生成完了,就需要重新生成

那我们就随机生成一到四个

 else

        {

            spawnPlatformCount = Random.Range(1, 4);

         

        }

  1. 添加一个生成平台的方法
  2. 在确定路径中调用生成平台的方法

 private void DecidePath()

    {

        if (spawnPlatformCount>=0)

        {

            spawnPlatformCount--;

            SpawnPlatform();

        }

        else

        {

          SpawnPlatformCount = Random.Range(1, 4);

            SpawnPlatform();

        }

}

  1. 在容器管理器中定义平台预制体

public GameObject normalPlarform;

  1. 定义一个容器管理器类型的变量。

 private ManagerVars vars;

  1. 在开始方法中进行赋值

  platformSpawinPosition = startSpawnPos;

  1. 在生成平台中实例化平台预制体

 GameObject go= Instantiate(vars.normalPlarform, transform);

  1. 定义一个平台生成位置的变量

 private Vector3 platformSpawinPosition;

该变量在开始的时候就等于变量startSpawnPos默认的位置就是我们初始的位置

platformSpawinPosition = startSpawnPos;

  1. 定义一个bool类型的变量来判断平台生成的位置

 private bool isLeftSpawn = false;//是否向左

  1. DecidePath()确定路径的时候平台数量小于零时进行转向

isLeftSpawn = !isLeftSpawn;//转向这次向左下次向右,反之一样的操作

  1. 在生成平台判断平台生成方向

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);

        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值