我想实现一个系统,它有平台和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的值和用法的代码,因为它还没有很好的表达出来.先谢谢你。
OnChunkExitedN();
positionN = gameObject.transform.position;
只要把这两个你在设置positionN之前调用onchunkexitedn就可以了。
positionN = gameObject.transform.position;
OnChunkExitedN();