Unity自学之路(1)

Unity 3D Learn示例中的2D roguelike (一)

Board Manager
1.使用[Serializable] 将此类序列化,保持活性

2.InitialiseList()函数初始化 grid的位置信息

void InitialiseList ()
        {
            gridPositions.Clear ();

            for(int x = 1; x < columns-1; x++)
            {
                for(int y = 1; y < rows-1; y++)
                {
                    gridPositions.Add (new Vector3(x, y, 0f));
                }
            }
        }

清除链表数据后双层for循环给gridPositions赋值(声明为: private List gridPositions = new List ();)

3.BoardSetup()函数设定整个场景的Board

void BoardSetup ()
        {
            boardHolder = new GameObject ("Board").transform;

            for(int x = -1; x < columns + 1; x++)
            {
                for(int y = -1; y < rows + 1; y++)
                {
                    GameObject toInstantiate = floorTiles[Random.Range (0,floorTiles.Length)];

                    if(x == -1 || x == columns || y == -1 || y == rows)
                        toInstantiate = outerWallTiles [Random.Range (0, outerWallTiles.Length)];

                    GameObject instance =
                        Instantiate (toInstantiate, new Vector3 (x, y, 0f), Quaternion.identity) as GameObject;

                    instance.transform.SetParent (boardHolder);
                }
            }
        }

设置 Board的函数(生成的子对象存放在一个叫”Board”的空物件下)

先随机实例化一个(public)FloorTiles[]里面的自定义prefab(当I,j循环至外围的时候要用墙的prefab)

4.RandomPosition()函数确定物件位置

Vector3 RandomPosition ()
        {
            int randomIndex = Random.Range (0, gridPositions.Count);

            Vector3 randomPosition = gridPositions[randomIndex];

            gridPositions.RemoveAt (randomIndex);

            return randomPosition;
        }

随机生成一个值域为gridPositions的Vector3类型的位置信息randomPosition,随即在gridPositions数组中移除该对象(public class List:public void RemoveAt(int index);)

返回随机生成的Vector位置信息

5. LayoutObjectAtRandom(GameObject[] tileArray, int minimum, int maximum)函数

void LayoutObjectAtRandom (GameObject[] tileArray, int minimum, int maximum)
        {
            int objectCount = Random.Range (minimum, maximum+1);

            for(int i = 0; i < objectCount; i++)
            {
                Vector3 randomPosition = RandomPosition();

                GameObject tileChoice = tileArray[Random.Range (0, tileArray.Length)];

                Instantiate(tileChoice, randomPosition, Quaternion.identity);
            }
        }

设置一个随机数objectCount,范围在miniumu,maximum+1之间

循环objectCount次,每次利用RandomPosition()函数生成一个随机位置,再在该位置随机实例化一个Gameobject
6.SetupScene(int level)函数 利用上面的函数生成每个关卡场景

public void SetupScene (int level)
        {
            BoardSetup ();

            InitialiseList ();

            LayoutObjectAtRandom (wallTiles, wallCount.minimum, wallCount.maximum);

            LayoutObjectAtRandom (foodTiles, foodCount.minimum, foodCount.maximum);

            int enemyCount = (int)Mathf.Log(level, 2f);

            LayoutObjectAtRandom (enemyTiles, enemyCount, enemyCount);

            Instantiate (exit, new Vector3 (columns - 1, rows - 1, 0f), Quaternion.identity);
        }

1.生成背景、外围墙壁
2.初始化gridPositions
3.生成不可穿过的墙壁
4.生成食物
5.设置敌人数量
6.生成敌人
7.实例化出口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值