unity3d 如何在列表中获得对象的转换?

xhv8bpkk  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(130)

所以我想有一个复活点的列表,让我的敌人从那里复活。问题是我不能得到一个复活点的转换,我不明白任何在线解决方案。他们可能会有不同的名称太多(spawnInFrontOfDoor,spawnInside1),所以我将无法使用GetObjectWithTag。有什么解决方案吗?

a0zr77ik

a0zr77ik1#

事先保存一个你的产卵点列表,然后在你想在敌人身上产卵时访问该列表。
这可能是最基本的例子。

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

public class Spawner : MonoBehaviour
{
    //If your game is not Procedurally Generated just drag and drop your spawn points onto this list.
    public List<Transform> spawnPoints;
    
    //Reference to your enemy.
    public GameObject enemy;
    
    void Start()
    {
        foreach(Transform spawn in spawnPoints)
        {
            SpawnEnemy(spawn);
        }
    }
    
    //Method to spawn your enemy at a given point.
    public void SpawnEnemy(Transform spawnPoint)
    {
        Instantiate(enemy, spawnPoint.position, spawnPoint.rotation);
    }
}

我已经创建了一个完整的敌人产卵系统,所以如果你需要进一步的细节或澄清,不要害怕问。

6kkfgxo0

6kkfgxo02#

您可以在每个衍生点中添加脚本:

public void SpawnPoint : MonoBehaviour{
    public static List<SpawnPoints> spawnPoints = new List<SpawnPoints>();

    void Start() => spawnPoints.Add(this);
    
    public Transform GetTransform() => transform;
}

无论你在哪里需要你的复活点列表,你都可以通过SpawnPoint.spawnPoints访问。
示例:

List<SpawnPoints> spawnPoints = SpawnPoint.spawnPoints;
Transform randomTransform = spawnPoints[Random.Range(0, spawnPoints.Count)].GetTransform();
Instantiate(enemyPrefab, randomTransform.position, Quaternion.identity);

如果要在Start方法中访问此列表,请将

void Start() => spawnPoints.Add(this);

void Awake() => spawnPoints.Add(this);

并且该列表应该可以在Start中使用。

相关问题