当调用第二个脚本时,Unity中的静态值 "丢失"。

问题描述 投票:0回答:1

我想实现一个系统,它有平台和OntriggerExit,可以产生新的平台。包含触发函数的对象是上述平台的子对象。我试图使用触发器对象的全局位置来实例化新的平台,但它一直在根据平台的位置进行实例化,例如,父平台在(0,0,0)。例如,父平台在(0,0,0),触发器,平台的子平台,在全局位置(-15,0,0)。我尝试添加(-35,0,0),它的实例化位置是(-35,0,0),而不是(-50,0,0)。我在OnTriggerExit()时获得Trigger位置,然后在不同的脚本上使用它,如下所示。

public class TriggerExitN : MonoBehaviour
{
    public delegate void ExitAction();
    public static event ExitAction OnChunkExitedN;

    public static Vector3 positionN;

    private bool exited = false;

    private void OnTriggerExit(Collider other)
    {
        Player player = other.GetComponent<Player>();
        if (player != null)
        {
            if (!exited)
            {
                exited = true;
                OnChunkExitedN();

                positionN = gameObject.transform.position;

            }        
        }
    }
}

如果我在这里调试positionN,它就会按照预期返回(-15,0,0)。

然后是平台生成器。

public class MapGenerator : MonoBehaviour
{
    public GameObject[] mapprefabs;
    public GameObject[] startprefabs;
    private List<GameObject> platformslist = new List<GameObject>();

    public Vector3 spawnOrigin;

    private Vector3 spawnPosition;
    // Start is called before the first frame update
    void Start()
    {
        platformslist.Add(startprefabs[0]);
    }

 void OnEnable()
    {
        TriggerExitN.OnChunkExitedN += PickAndSpawnN;
    }

private void OnDisable()
    {
        TriggerExitN.OnChunkExitedN -= PickAndSpawnN;
    }

void PickAndSpawnN()
    {
        spawnPosition = TriggerExitN.positionN + new Vector3(-35f, 0, 0f);

        foreach (GameObject platform in platformslist)
            if(platform.transform.position == spawnPosition)
            {
                return;
            }
            else
            {
                continue;
            }

        GameObject objectFromChunk = mapprefabs[Random.Range(0, mapprefabs.Length)];

        Instantiate(objectFromChunk, spawnPosition + spawnOrigin, Quaternion.identity);

        platformslist.Add(objectFromChunk);

        Debug.Log(TriggerExitN.positionN);
    }

如果我在这里调试poisitionN,它返回(0,0,0).

我知道我漏掉了什么,我只是想得到一些帮助,因为这让我很抓狂.请不要理会其余不涉及positionN的值和用法的代码,因为它还没有很好的表达出来.先谢谢你。

c# unity3d
1个回答
2
投票
OnChunkExitedN();

positionN = gameObject.transform.position;

只要把这两个你在设置positionN之前调用onchunkexitedn就可以了。

positionN = gameObject.transform.position;

OnChunkExitedN();
© www.soinside.com 2019 - 2024. All rights reserved.