【发布时间】:2018-06-29 01:30:42
【问题描述】:
这基本上为我的无尽跑步者设置了瓷砖,特别是错误是:
可访问性不一致:字段类型“gameobject”的可访问性不如 tilePrefabs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TileManager : MonoBehaviour {
private Transform playerTransform;
private float spawnZ = 0.0f;
private float tileLength = 39.0f;
private int amnTileOnScreen = 7;
public GameObject[] tilePrefabs;
// ** it is already public here **
private List<GameObject> activeTiles;
// Use this for initialization
public void Start () {
activeTiles = new List<GameObject> ();
playerTransform = gameObject.FindGameObjectWithTag("Player").transform;
for (int i = 0; i <= amnTileOnScreen; i++) {
SpawnTile ();
}
}
private void Update () {
if (playerTransform.position.z > (spawnZ - amnTileOnScreen +
tileLength)) {
SpawnTile ();
//DisableTile ();
DestroyTile();
}
}
public void SpawnTile(int prefabIndex = - 1)
{
GameObject go;
go = Instantiate(tilePrefabs[0]) as GameObject;
// reappears here
go.transform.SetParent(transform);
go.transform.position = Vector3.forward*spawnZ;
spawnZ += tileLength;
activeTiles.Add (go);
}
private void DestroyTile()
{
Destroy (transform.GetChild (0));
}
}
【问题讨论】:
-
您能否向我们提供确切的错误消息,包括正确的大小写?您的问题指出错误消息使用名称“gameobject”,但您的代码中没有“gameobject”。你的代码也会有问题。您正在将实例化对象添加到您的私有
activeTiles列表中,但随后销毁该对象而不从activeTiles列表中删除该对象。不过,这将是一个运行时问题。在这种情况下,Queue<GameObject>可能会更好。如果可能的话,肯定会回收你的对象(池)。 -
由于我们不知道错误是什么,因此很难提供帮助。但是,有几件事让我担心。首先,您为 tilePrfabs 使用一个数组,但为 activeTiles 使用一个列表。有什么理由不统一吗?我建议的另一件事是,与其拥有一组瓷砖预制件,不如为每个预制件设置一个公共变量。这就是我使用基于图块的游戏的方式。当然,如果您有大量的瓷砖,这可能不方便。
标签: c# unity3d monodevelop gameobject