GameObject [] менее доступен, чем (prefabs) - PullRequest
0 голосов
/ 29 июня 2018

Это в основном устанавливает плитки для моего бесконечного бегуна, в частности ошибка:

Непоследовательная доступность: тип поля 'gameobject' менее доступен, чем tilePrefabs

enter image description here

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));
    }
}

1 Ответ

0 голосов
/ 29 июня 2018

Вот где находится проблема:

playerTransform = gameObject.FindGameObjectWithTag("Player").transform;

Существует разница между gameObject и GameObject. Обратите внимание на заглавную букву "G" во втором.

GameObject - это просто класс, используемый для создания GameObjects.

gameObject - это переменная, созданная из GameObject, которая объявлена ​​как public GameObjects gameObject в классе Unity Component. Это просто экземпляр GameObjects.

Вы получаете доступ к переменной gameObject, когда ваш скрипт TileManager происходит от MonoBehaviour.


Функция FindWithTag находится в классе GameObject и также объявлена ​​как static, что означает, что вам не нужен экземпляр GameObject для ее вызова. Вы должны вызвать его напрямую с именем класса

Заменить

gameObject.FindGameObjectWithTag("Player").transform;

с

GameObject.FindGameObjectWithTag("Player").transform;
...