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
方法之前执行