本文将介绍如何在跑酷游戏中使用代码动态控制道路的生成。
1、使用已有的素材资源或者自己建的模型制作一段道路的预制体。
Transform仅供参考:
2、创建一个空对象,用于所有路段的父物体,并将写好的道路生成脚本挂载上去。
玩家的Transform也仅供参考:
3、脚本代码如下:
using System.Collections.Generic;
using UnityEngine;
public class GenerateRoad : MonoBehaviour
{
public Transform m_roadPar; //用来生成路段的父物体
public GameObject m_roadPre; //路段预制体
public List<GameObject> m_roads = new List<GameObject>(); //存储路段的列表
public GameObject m_player; //玩家
private Vector3 m_spawnPos = new Vector3(0, 0, -5); //记录路段生成位置
private void Start()
{
//开局生成20个路段
DoRoad(20);
}
private void Update()
{
AddRoad();
}
/// <summary>
/// 生成路段
/// </summary>
/// <param name="count"> 生成数量</param>
private void DoRoad(int count)
{
for(int i = 0; i < count; i++)
{
GameObject road = Instantiate(m_roadPre, m_roadPar);
road.transform.position = m_spawnPos;
m_roads.Add(road);
m_spawnPos += new Vector3(0, 0, 5);
}
}
/// <summary>
/// 动态添加新的路段,删除旧的路段
/// </summary>
private void AddRoad()
{
//玩家和列表中第一个路段的位置进行比较
if(m_player.transform.position.z - m_roads[0].transform.position.z > 10f)
{
//销毁
Destroy(m_roads[0]);
m_roads.RemoveAt(0);
//添加
DoRoad(1);
}
}
}
PS:虽然上述步骤已经完成动态生成的效果,但是频繁的使用Destroy和Instantiate会产生大量的内存碎片,并消耗性能,所以希望大家尽可能的使用对象池去优化一下。