C# 如果每个门上的脚本在主脚本之后执行,我如何获得门的列表?

C# 如果每个门上的脚本在主脚本之后执行,我如何获得门的列表?,c#,unity3d,C#,Unity3d,主脚本附加到空的游戏对象。这个剧本先开火 using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; public class DoorsLockManager : MonoBehaviour { private List<List<DoorHori>> doorsLR = new List<List<DoorHor

主脚本附加到空的游戏对象。这个剧本先开火

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class DoorsLockManager : MonoBehaviour
{
    private List<List<DoorHori>> doorsLR = new List<List<DoorHori>>();
    public static void GetDoors(List<DoorHori> doorsLR)
    {
        doorsLR.AddRange(doorsLR);
    }

    private List<HoriDoorManager> Doors = new List<HoriDoorManager>();

    private void Start()
    {
        var doors = GameObject.FindGameObjectsWithTag("Door");
        foreach(var door in doors)
        {
            Doors.Add(door.GetComponent<HoriDoorManager>());
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用System.Linq;
使用UnityEngine;
公共类DoorsLockManager:MonoBehavior
{
私有列表门SLR=新列表();
公共静态门(列表门SLR)
{
doorsLR.AddRange(doorsLR);
}
私有列表门=新列表();
私有void Start()
{
var doors=GameObject.FindGameObjectsWithTag(“门”);
foreach(门中的var门)
{
添加(door.GetComponent());
}
}
}
此脚本第二个脚本附加到每个门,此脚本中的开始在顶部脚本之后执行:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

public class HoriDoorManager : MonoBehaviour
{
    private List<DoorHori> doors = new List<DoorHori>();
    private bool doorLockState;

    private void Start()
    {
        if (transform.parent != null)
        {
            Transform parent = transform.parent;
            var children = parent.GetComponentsInChildren<Transform>();

            if(children != null)
            {
                foreach (Transform door in children)
                {
                    if (door.name == "Door_Left" || door.name == "Door_Right")
                        doors.Add(door.GetComponent<DoorHori>());
                }

                DoorsLockManager.GetDoors(doors);
            }
        }
    }

    void OnTriggerEnter()
    {
        if (doorLockState == false)
        {
            if (doors != null)
            {
               for(int i =0; i < doors.Count; i++)
                {
                    doors[i].OpenDoor();
                }
            }
        }
    }

    public void ChangeLockState(bool lockState)
    {
        doorLockState = lockState;
    }
}
使用UnityEngine;
使用系统集合;
使用System.Collections.Generic;
使用System.Linq;
公共类horidoormanger:单行为
{
私有列表门=新列表();
私家门锁州;
私有void Start()
{
如果(transform.parent!=null)
{
Transform parent=Transform.parent;
var children=parent.GetComponentsInChildren();
如果(子项!=null)
{
foreach(儿童中的转换门)
{
如果(door.name==“door_Left”| | door.name==“door_Right”)
添加(door.GetComponent());
}
DoorsLockManager.GetDoors(doors);
}
}
}
void ontriggenter()
{
如果(doorLockState==false)
{
如果(门!=null)
{
对于(int i=0;i
问题是,在第一个脚本中将所有门添加到doorsLR列表之前,第一个脚本已经执行了Start

我希望首先从horidoormanger获取所有的门,然后在DoorsLockManager脚本中执行Start


我不想使用标签,我想让Horidoormanger中的每两个门都添加到门SLR,当它完成添加所有门后,然后在DoorsLockManager中开始使用它。

Horidoormanger
中的代码移动到
唤醒
(而不是
启动
)。场景组件中的所有
Awake
方法都将在执行任何
Start
方法之前执行