一、随机生成平台
1.可以删除其他平台,只留下一个开局的平台
2.新建一个空物体作为平台出生点,调整大小,添加碰撞体,勾选is trigger,修改标签为spike
3.新建脚本挂载到平台出生点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Spawner : MonoBehaviour { public List<GameObject> platform = new List<GameObject>();
public float spawnTime; float countTime; Vector3 spawnPosition;
void Update() { SpawnPlatform(); }
public void SpawnPlatform() { countTime += Time.deltaTime; spawnPosition = transform.position; spawnPosition.x = Random.Range(-3f, 3f);
if(countTime > spawnTime) { CreatePlatform(); countTime = 0; }
}
public void CreatePlatform() { int index = Random.Range(0, platform.Count); Instantiate(platform[index], spawnPosition, Quaternion.identity ); } }
|
4.回到unity设置脚本中平台列表的大小为3并且拖入三种基础平台
5.设置好生成速度Spawn Time就可以开始玩啦!
二、细节调整
1.将链锤的锤子设置标签为spike(不小心删了链锤的预制体,我是sb,以后碰到警告操作不可撤回的要万分小心)
2.角色检测碰到尖刺死亡的代码是在OnTriggerEnter2D中的,而顶部尖刺是触发器,链锤是碰撞器,需要将死亡代码复制到OnCollisionEnter2D中。注意两个函数接收的变量不同,需要按照提示修改一下
3.改变平台列表的大小并拖入不同的平台,这样就可以调整游戏难度以及未来新增其他平台或者陷阱
4.在平台出生点中修改代码,添加:
1 2
| GameObject newPlatform = Instantiate(platform[index], spawnPosition, Quaternion.identity ); newPlatform.transform.SetParent(transform);
|
这样就可以让新生成的平台作为平台出生点的子物体
5.为了不让链锤连续生成太多以至于游戏难度过大,修改spawn代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| int spikeBallNum = 0;
public void CreatePlatform() { int index = Random.Range(0, platform.Count);
if (index == 3) { spikeBallNum++; if(spikeBallNum > 2) { index = 0; spikeBallNum = 0; } }
GameObject newPlatform = Instantiate(platform[index], spawnPosition, Quaternion.identity ); newPlatform.transform.SetParent(transform); }
|
当连续出现链锤时变成普通平台,免得出现必死局
终、总结
到此为止主要游戏内容都已经完成啦!最后就是制作一些UI管理游戏