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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果每个门上的脚本在主脚本之后执行,我如何获得门列表?相关的知识,希望对你有一定的参考价值。

主脚本附加到空游戏对象。这个脚本首先开始。

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>());
        }
    }
}

此脚本第二个附加到每个门,此脚本中的Start在顶部脚本之后执行:

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;
    }
}

问题是,在第一个脚本中将所有门添加到doorsLR列表之前,第一个脚本已经执行了他的Start。

我想先从HoriDoorManager获取所有门,然后才能在DoorsLockManager脚本中执行Start。

我不想使用我希望从HoriDoorManager获得每两个门的标签,当它完成添加所有门后将它们添加到doorsLR,然后在DoorsLockManager中开始使用它。

答案

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

Here is a further description of the order of events in each scene.

以上是关于如果每个门上的脚本在主脚本之后执行,我如何获得门列表?的主要内容,如果未能解决你的问题,请参考以下文章

浏览器的网页我想写一个js脚本控制他,怎么让这个别人的网页执行我写好的js脚本?

如何获得python脚本的峰值内存使用量?

WebBrower如何获取脚本加载完毕后的HTML

Jmeter 脚本增强_思考时间

如果使用func()具有多个输出,如何获得函数输出的长度?

如何在shell脚本中,判断一个基本命令执行是不是成功