【发布时间】:2015-01-29 18:21:15
【问题描述】:
我为我的 2D 汽车游戏编写了一个无限轨道的脚本。所以我在我的车后面有一个“杀手”,它摧毁了左边屏幕上出现的所有地面物体,在右边我有一个产卵器,它可以在其中产生我所有的块状精灵,它工作得很好。 这是我的更新功能:
void Update()
{
if(Mathf.Round(this.transform.position.x) == limit)
{
//Debug.Log("Limit reached");
limit += 10;
Spawn();
}
}
我将脚本附加到我的相机上,并且我将开始限制设置为 160(因为我已经获得了 15 个 10x10 精灵作为开始)。每次我的生成器通过 x 轴限制时,它都会在该位置生成一个新精灵并将下一个限制设置为高 10。如果我不开车太快,这很好用。因为那时它停止产卵,世界被切断。当我开车回去让我的产卵器回到已经产卵的区域并再次缓慢驶向它时,它又可以工作了。我相信这种方法效率低下,无法足够快地生成,所以我可能需要另一种方式。
为了理解这里脚本的其余部分:
using UnityEngine;
using System.Collections;
public class Spawner : MonoBehaviour
{
public GameObject[] obj;
private int limit = 160;
public int yAxisValue = -1;
public bool isOnlyDirt;
private ArrayList rotationValues = new ArrayList();
void Start()
{
//Spawn ();
int value = 0;
for(int i = 0; i < 4; i++)
{
rotationValues.Add(value);
//Debug.Log(rotationValues[i]);
value += 90;
}
}
void Spawn()
{
Vector3 pos = new Vector3 (Mathf.Round(transform.position.x), yAxisValue, transform.position.z);
Quaternion rotation = new Quaternion (0, 0, 0, 0);
if(isOnlyDirt)
{
int zRot = (int)rotationValues[Random.Range(0, rotationValues.Count - 1)];
//Debug.Log(zRot);
rotation = new Quaternion(0, 0, zRot, 0);
}
var SpawnedGround = Instantiate(obj[Random.Range(0, obj.GetLength(0))], pos, rotation);
(SpawnedGround as GameObject).gameObject.tag = "Gro
我还有一个单线可以将我的刷怪笼移动到我的车前,这样它就可以生成东西了:
public float yCoord;
void Start ()
{
this.transform.position = new Vector3 (transform.position.x + 160, -yCoord, transform.position.z);
}
我是它的父,所以我只需将它写在启动函数中。
有什么想法可以改进这个吗? 谢谢
【问题讨论】: