using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class DoorsLockManager : MonoBehaviour
{
[System.Serializable]
public class DoorClass
{
public HoriDoorManager Door;
public bool doorState;
public Transform[] DoorShieldFXLocked;
}
public bool allDoors = false;
public DoorClass[] doorclass;
private List<HoriDoorManager> Doors = new List<HoriDoorManager>();
private Renderer rend;
private Shader unlitcolor;
private List<GameObject> DoorShieldFXLocked = new List<GameObject>();
private void Start()
{
DoorShieldFXLocked = GameObject.FindGameObjectsWithTag("DoorShield").ToList();
unlitcolor = Shader.Find("Unlit/ShieldFX");
var doors = GameObject.FindGameObjectsWithTag("Door");
doorclass = new DoorClass[doors.Length];
for (int i = 0; i < doors.Length; i++)
{
Doors.Add(doors[i].GetComponent<HoriDoorManager>());
LockDoorState(i, allDoors);
doorclass[i] = new DoorClass();
doorclass[i].Door = Doors[i];
doorclass[i].doorState = allDoors;
}
}
我如何遍历doorClass以及DoorShieldFXLocked。 每个doorClass都有两个DoorShieldFXLocked项。
例如:
doorClass1
DoorShieldFXLocked
DoorShieldFXLocked
doorClass2
DoorShieldFXLocked
DoorShieldFXLocked
在开始时,我需要为每个doorClass分配两个DoorShieldFXLocked到DoorShieldFXLocked转换数组。
doorClass的大小为13(索引0到12),DoorShieldFXLocked列表的大小为24(索引0到23)。
答案 0 :(得分:4)
如果我们假设以下内容,则无需遍历DoorShieldFXLocked
数组;简单的数学原理:
在doorClass[0]
,您需要使用DoorShieldFXLocked[0]
和DoorShieldFXLocked[1]
。
在doorClass[1]
,您需要使用DoorShieldFXLocked[2]
和DoorShieldFXLocked[3]
。
等
在这种情况下,您可以看到每对DoorShieldFXLocked
索引分别为2*i
和(2*i)+1
。
但是,如果您需要找到两个特定的门,则可以使用嵌套循环。
for (int i = 0; i < doors.Length; i++)
{
...
for (int j=0; j< DoorShieldFXLocked.Length; ++j)
{
//test and Add if needed
}
}