Как я могу зациклить список, который больше, чем цикл? - PullRequest
0 голосов
/ 16 марта 2019
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;
        }
    }

Как я могу зациклить на doorChield, а также на DoorShieldFXLocked. Каждый дверной класс имеет два элемента DoorShieldFXLocked.

Например:

doorClass1
    DoorShieldFXLocked
    DoorShieldFXLocked

doorClass2
    DoorShieldFXLocked
    DoorShieldFXLocked

При запуске мне нужно назначить каждому doorClass два объекта DoorShieldFXLocked для массива преобразований DoorShieldFXLocked.

Размер doorClass равен 13 (индекс от 0 до 12), а размер списка DoorShieldFXLocked равен 24 (индекс от 0 до 23).

1 Ответ

4 голосов
/ 16 марта 2019

Если мы предположим следующее, вам не нужно перебирать массив 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...