记录一个在Unity中实现生成无限向上旋转楼梯效果

最近因为要做一个小游戏,要实现用代码创建无限向上延伸的旋转楼梯效果,找遍了网上的逻辑都未曾实现,于是乎自己实现了一个,这里记录一下。有需要的朋友拿走不谢~


效果图:

 

直接上代码:

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

public enum StairsDir
{
    X,
    Z
}

public class StairsManager : MonoBehaviour
{
    public GameObject cube;

    StairsDir stairsDir;
    int yPos = 0;

    private void Start()
    {
        //这里的for循环即可控制旋转楼梯需要往上延伸多高

        for (int i = 0; i < 4; i++)
        {
            CreateOneCircleStairs();
        }
    }
    //这里是楼梯旋转一圈的逻辑
    public void CreateOneCircleStairs()
    {
        CreateGroupStairs(StairsDir.X, 0.5f, 10, 1, new Vector3(0, yPos * 5, 0));
        yPos += 1;
        CreateGroupStairs(StairsDir.Z, 0.5f, 10, 1, new Vector3(9, yPos * 5, 1));
        yPos += 1;
        CreateGroupStairs(StairsDir.X, 0.5f, 10, -1, new Vector3(8, yPos * 5, 10));
        yPos += 1;
        CreateGroupStairs(StairsDir.Z, 0.5f, 10, -1, new Vector3(-1, yPos * 5, 9));
        yPos += 1;
    }

    //这里返回列表,是为了能够获取当前一小段楼梯的所有实例化的物体的引用
    public List<GameObject> CreateGroupStairs(StairsDir stairsDir, float gap,int count,int dir , Vector3 startCreatePos) {
        List<GameObject> groupStairs = new List<GameObject>();
        for (int i = 0; i < count; i++)
        {
            GameObject ccc = (GameObject)Instantiate(cube);
            switch (stairsDir)
            {
                case StairsDir.X:
                    ccc.transform.position = new Vector3(i * dir, i * gap, 0)+startCreatePos;
                    break;
                case StairsDir.Z:
                    ccc.transform.position = new Vector3(0, i * gap, i * dir) + startCreatePos;
                    break;
            }
            groupStairs.Add(ccc);
        }
        return groupStairs;
    }
}

直接把此代码放到任何一个空物体上,然后拖入单个楼梯预制体。当然咯,里面的参数需要根据你项目的楼梯尺寸进行改变,大体逻辑是这样的。不过这里我没有考虑性能的问题,大家可以自行修改!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小明哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值