У меня проблема, у меня есть список игровых объектов, переданных в функцию.Я получаю игровой объект в списке на I-й позиции и получаю доступ к общедоступной версии сценария, размещенного на игровом объекте.var должен возвращать игровой объект, но возвращает ноль.Вот как работает мой код:
- сценарий levelMechanics создает сетку игровых объектов с помощью сценария nodeMechanics
- levelMechanics вызывает сценарий roomSpawner, который сообщает каждому узлу запускать там код nodeMechanics, который получаетузлы, окружающие узлы и сохраняющие их в общедоступных переменных
оба эти шага работают отлично, и я могу щелкнуть по каждому узлу, и в иерархии скрипт nodeMechanics, прикрепленный к каждому узлу, сообщит мне узлывыше, ниже, слева и справа от текущего узла.проблема в том, что если я пытаюсь получить доступ к узлам, окружающим узлы, я получаю нулевое значение.что я пытался,
получение списка в roomSpawner путем доступа через levelMechanics вместо levelMechanics, помещая его в roomSpawner.
, передавая в списке икопирование и доступ к скопированному списку.
оба списка [i] .getcomponet (nodemechanics) .nodeDown и список [i] .gameobject.getcomponet (nodemechanics) .nodeDown
- получение nodeMechanics узла, его сохранение, а затем попытка получить данные сохраненной nodeMechanics вместо того, чтобы просто прыгнуть прямо в получение данных.
я просто потерян, так какИерархия говорит, что эти переменные не являются нулевыми, но когда я пытаюсь получить к ним доступ в коде, они есть.В следующем коде я пытаюсь получить доступ к vars
public GameObject test;
public nodeMechanics temp;
public void IntializeNodes(List<GameObject> nodes)
{
for (int i = 0; i < nodes.Count; i++)
{
nodes[i].gameObject.GetComponent<nodeMechanics>().test = true;
//im not sure why i am able to write but not read
}
}
public void SpawnObjects(List<GameObject> nodes)
{
//this function is being called in level mechanics and the list is being passed in
print("nodes created");
for (int i = 0; i < nodes.Count; i++)
{
noders.Add(nodes[i]);//the current method is copy over the list and try to access the copy but that doesnt work. i tried not copying
test = noders[i].gameObject;//ive tried not splint this up and jumping straight into nodes[i]..GetComponent<nodeMechanics>().nodeDown;
temp = test.GetComponent<nodeMechanics>();
print(temp.nodeDown);//no matter what i do this always returns null. but in the hierarchy it is not
// это скрипт levelMechanics
public List<GameObject> objects;
public List<GameObject> nodes;
public GameObject floor;
public float offX, offZ;
void Awake()
{
RoomCheck();
RoomSetup();
//GetComponent<roomSpawner>().SpawnEnemys(nodes);
this.GetComponent<roomSpawner>().IntializeNodes(nodes);
this.GetComponent<roomSpawner>().SpawnObjects(nodes);
}
void RoomSetup()
{
bool first = true;
int collCount = -1;
GameObject placeHolder = new GameObject("temp");
float colls;
colls = floor.transform.localScale.x - 1;
offX = floor.transform.localScale.x;
offZ = floor.transform.localScale.z;
offX = (offX / 2) - offX + 1;
offZ = (offZ / 2) - 1;
offX = offX + floor.transform.position.x;
offZ = (offZ + floor.transform.position.z);
//print(colls);
for (int i = 0; i < ((floor.transform.localScale.x-1) * (floor.transform.localScale.z-1)); i++)
{
collCount++;
//print(collCount);
GameObject temp = new GameObject(i + " Node");
temp.transform.SetParent(floor.transform);
temp.AddComponent<BoxCollider>();
temp.GetComponent<BoxCollider>().isTrigger = true;
temp.AddComponent<nodeMechanics>();
temp.layer = 9;
if(!first)
{
temp.transform.position = new Vector3((placeHolder.transform.position.x + 1), 6, placeHolder.transform.position.z);
placeHolder = temp;
if (collCount >= colls)
{
//print("new line on " + temp.name + " coll " + collCount);
collCount = 0;
temp.transform.position = new Vector3(floor.transform.localPosition.x + offX, 6, placeHolder.transform.position.z - 1);
placeHolder = temp;
}
}
if (first)
{
// print(colls);
temp.transform.position = new Vector3(floor.transform.localPosition.x+offX, 6, floor.transform.localPosition.z+offZ);
placeHolder = temp;
first = false;
}
nodes.Add(temp);
}
}
это скрипт nodeMechanics
public class nodeMechanics : MonoBehaviour
{
public GameObject nodeUp, nodeDown, nodeLeft, nodeRight, forced;
public bool test = false;
void FixedUpdate()
{
if (test)
{
FindAround();
}
if(forced != null)
{
Instantiate(forced, this.transform.position, forced.transform.rotation);
}
}
public void FindAround()
{
int mask = LayerMask.GetMask("Node");
RaycastHit up, down, left, right;
if (Physics.Raycast(this.transform.position, Vector3.forward, out up, 1, mask))
{
nodeUp = up.collider.transform.gameObject;
}
if (Physics.Raycast(this.transform.position, Vector3.back, out down, 1, mask))
{
nodeDown = down.collider.transform.gameObject;
}
if (Physics.Raycast(this.transform.position, Vector3.left, out left, 1, mask))
{
nodeLeft = left.collider.transform.gameObject;
}
if (Physics.Raycast(this.transform.position, Vector3.right, out right, 1, mask))
{
nodeRight = right.collider.transform.gameObject;
}
}
}
, чтобы уточнитьследующий код не работает должным образом
for (int i = 0; i < nodes.Count; i++)
{
noders.Add(nodes[i]);//the current method is copy over the list and try to access the copy but that doesnt work. i tried not copying
test = noders[i].gameObject;//ive tried not splint this up and jumping straight into nodes[i]..GetComponent<nodeMechanics>().nodeDown;
temp = test.GetComponent<nodeMechanics>();
print(temp.nodeDown);
temp.nodeDown должен возвращать правильный узел, но возвращает ноль, в иерархии он показывает правильный объект, а не нуль